Calcolo dell'AIC "a mano" in R


15

Ho provato a calcolare l'AIC di una regressione lineare in R ma senza usare la AICfunzione, in questo modo:

lm_mtcars <- lm(mpg ~ drat, mtcars)

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

Tuttavia, AICfornisce un valore diverso:

AIC(lm_mtcars)
[1] 190.7999

Qualcuno potrebbe dirmi cosa sto facendo di sbagliato?


5
(senza ancora controllare la risposta): non stai necessariamente facendo nulla di male, poiché la probabilità è in realtà definita solo fino a una costante moltiplicativa; due persone possono calcolare la verosimiglianza e ottenere numeri diversi (ma le differenze nella verosimiglianza sono le stesse).
Glen_b -Restate Monica

1
Hong OOI risposta è legata a questa domanda, credo. La formula utilizzata dalla funzione AICè -2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1).
COOLSerdash,

luciano: il "+1" in quella formula @COOLSerdash punta a derivare dal termine del parametro varianza. Si noti inoltre che la funzione logLikdice che per i lmmodelli include "tutte le costanti" ... quindi ci sarà un log(2*pi)
elemento

1
@Glen_b: Perché dire che la probabilità è definita solo fino a una costante moltiplicativa? Dopotutto, quando si confrontano modelli non nidificati di diverse famiglie di distribuzione (ad esempio con AIC o con il test Cox), è necessario ricordare quella costante.
Scortchi - Ripristina Monica

@Scortchi la definizione non è mia! Dovrai prenderlo con RAFisher. È stato così fin dall'inizio, credo (1921). Che sia ancora definito in questo modo, almeno nel caso continuo, vedere qui , ad esempio, all'inizio della frase "Più precisamente".
Glen_b -Restate Monica

Risposte:


18

Si noti che l'aiuto sulla funzione logLikin R dice che per i lmmodelli include "tutte le costanti" ... quindi ci sarà un log(2*pi)in là da qualche parte, così come un altro termine costante per l'esponente nella probabilità. Inoltre, non puoi dimenticare di contare il fatto che è un parametro.σ2

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

-2logL=nlog(2π)+nlogSn2+Σio(eio2/Sn2)

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

AIC=2p2logL

ma nota che per un modello con 1 variabile indipendente, p = 3 (il coefficiente x, la costante e )σ2

Ciò significa che è così che ottieni la loro risposta:

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

Perché nel tuo calcolo di stai solo dividendo per n e non per n - p ? s2nnp
Luke Thorburn,

1
Vedere la definizione di AIC: dove il vettore di parametri, θ sono valutati al massimo (cioè tutti gli elementi di θ sono MLE); ad es. vedere il criterio informativo di Wikipedia Akaike: definizione . Se non stai dividendo per n lì nel calcolo di σ 2 , non si sta calcolando il MLE di σ 2 e in modo non proprio calcolo AIC - in effetti si sarebbe regolando due volte per l'effetto di parametri adatto. (Sì, molte persone lo fanno male)2logL(θ^)+2pθθ^nσ^2σ2
Glen_b - Ripristina Monica il

C'è un refuso nella seconda equazione? Dovrebbe essere Ok vedo, stai usando 2logL=nlog(2π)+nlogsn+i(ei2/sn2)2πsn2
rhody

10

AIC2k2logLLknlogSrn+2(k1)Srn

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.