Berechnung des AIC „von Hand“ in R

15

Ich habe versucht, den AIC einer linearen Regression in R zu berechnen, ohne die AICFunktion zu verwenden:

lm_mtcars <- lm(mpg ~ drat, mtcars)

nrow(mtcars)*(log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))+(length(lm_mtcars$coefficients)*2)
[1] 97.98786

Allerdings AICgibt einen anderen Wert:

AIC(lm_mtcars)
[1] 190.7999

Kann mir jemand sagen, was ich falsch mache?

Luciano
quelle
5
(ohne Ihre Antwort noch zu überprüfen): Sie tun nicht unbedingt etwas Falsches, da die Wahrscheinlichkeit tatsächlich nur bis zu einer multiplikativen Konstante definiert ist; Zwei Personen können die Log-Wahrscheinlichkeit berechnen und unterschiedliche Zahlen erhalten (Unterschiede in der Log-Wahrscheinlichkeit sind jedoch gleich).
Glen_b -Reinstate Monica
1
Die Antwort von Hong Oois hängt mit dieser Frage zusammen, denke ich. Die Formel, die die Funktion AICverwendet, lautet -2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1).
COOLSerdash
luciano: Das "+1" in dieser Formel @COOLSerdash ergibt sich aus dem Varianzparameter term. Beachten Sie auch, dass die Funktion logLikbesagt, dass für lmModelle 'alle Konstanten' enthalten sind. Es wird also log(2*pi)irgendwo eine geben
Glen_b -Reinstate Monica
1
@Glen_b: Warum sagen Wahrscheinlichkeit ist definiert nur bis zu einer multiplikativen Konstante? Wenn Sie nicht verschachtelte Modelle aus verschiedenen Distributionsfamilien vergleichen (z. B. mit AIC oder mit dem Cox-Test), müssen Sie sich diese Konstante merken.
Scortchi
@ Scortchi die Definition ist nicht meins! Sie müssen es mit RAFisher aufnehmen. Es war von Anfang an so, denke ich (1921). Dass es zumindest im kontinuierlichen Fall immer noch so definiert ist, sehen Sie hier zum Beispiel am Satzanfang „Genauer“.
Glen_b -Reinstate Monica

Antworten:

18

Beachten Sie, dass die Hilfe zu der Funktion logLikin R besagt, dass sie für lmModelle 'alle Konstanten' enthält ... daher gibt log(2*pi)es irgendwo einen darin sowie einen weiteren konstanten Term für den Exponenten in der Wahrscheinlichkeit. Sie können auch nicht vergessen, die Tatsache zu zählen, dass ein Parameter ist.σ2

L(μ^,σ^)=(12πsn2)nexp(12i(ei2/sn2))

2logL=nlog(2π)+nlogsn2+i(ei2/sn2)

=n[log(2π)+logsn2+1]

AIC=2p2logL

Beachten Sie jedoch, dass für ein Modell mit einer unabhängigen Variablen p = 3 ist (der x-Koeffizient, die Konstante und ).σ2

So erhalten Sie die Antwort:

nrow(mtcars)*(log(2*pi)+1+log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))
       +((length(lm_mtcars$coefficients)+1)*2)
Glen_b - Setzen Sie Monica wieder ein
quelle
Warum dividieren Sie in Ihrer Berechnung von nur durch und nicht durch ? s2nnp
Luke Thorburn
1
Siehe die Definition von AIC: wobei der Vektor der Parameter maximal ausgewertet wird (dh alle Elemente von sind MLEs); zB siehe Wikipedia Akaike Informationskriterium: Definition . Wenn Sie dort bei der Berechnung von nicht durch dividieren , berechnen Sie die MLE von nicht und berechnen daher den AIC nicht wirklich - im Endeffekt würden Sie ihn zweimal anpassen für die Wirkung von Anpassungsparametern. (Ja, viele Leute machen es falsch)2logL(θ^)+2pθθ^nσ^2σ2
Glen_b
Gibt es einen Tippfehler in der zweiten Gleichung? Sollte es Ok, ich verstehe, Sie verwenden2logL=nlog(2π)+nlogsn+i(ei2/sn2)2πsn2
Rhody
10

Die AICFunktion gibt , wobei die Wahrscheinlichkeit und die Anzahl der geschätzten Parameter (einschließlich des Abschnitts und der Varianz) ist. Sie verwenden , wobei die Restsumme der Quadrate ist, & die Stichprobengröße. Diese Formeln unterscheiden sich durch eine additive Konstante; Solange Sie dieselbe Formel verwenden und die Unterschiede in der AIC zwischen verschiedenen Modellen untersuchen, bei denen sich die Konstanten aufheben, spielt dies keine Rolle.L k n log S r2k2logLLkSRnnlogSrn+2(k1)Srn

Scortchi - Wiedereinsetzung von Monica
quelle