Menghitung AIC "dengan tangan" di R

15

Saya telah mencoba menghitung AIC dari regresi linier dalam R tetapi tanpa menggunakan AICfungsi, seperti ini:

lm_mtcars <- lm(mpg ~ drat, mtcars)

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

Namun, AICmemberikan nilai berbeda:

AIC(lm_mtcars)
[1] 190.7999

Bisakah seseorang memberi tahu saya apa yang saya lakukan salah?

luciano
sumber
5
(tanpa memeriksa jawaban Anda): Anda belum tentu melakukan kesalahan, karena kemungkinan sebenarnya hanya didefinisikan hingga konstanta multiplikasi; dua orang dapat menghitung log-likelihood dan mendapatkan angka yang berbeda (tetapi perbedaan log-likelihood adalah sama).
Glen_b -Reinstate Monica
1
Jawaban Hong Oois terkait dengan pertanyaan ini, saya pikir. Rumus yang AICdigunakan fungsi adalah -2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1).
COOLSerdash
luciano: "+1" dalam rumus itu @COOLSerdash menunjuk ke yang muncul dari istilah parameter varians. Perhatikan juga bahwa fungsi logLikmengatakan bahwa untuk lmmodel itu termasuk 'semua konstanta' ... jadi akan ada log(2*pi)di sana di suatu tempat
Glen_b -Reinstate Monica
1
@ Glen_b: Mengapa mengatakan kemungkinan hanya didefinisikan hingga konstanta multiplikasi? Lagi pula, ketika membandingkan model non-bersarang dari keluarga distribusi yang berbeda (misalnya dengan AIC, atau dengan tes Cox), Anda perlu mengingat konstanta itu.
Scortchi
@ Scortchi, definisi itu bukan milikku! Anda harus mengambilnya dengan RAFisher. Sudah seperti itu sejak awal, saya pikir (1921). Itu masih didefinisikan seperti itu, setidaknya dalam kasus berkelanjutan, lihat di sini , misalnya, pada kalimat yang dimulai 'Lebih tepatnya,'.
Glen_b -Reinstate Monica

Jawaban:

18

Perhatikan bahwa bantuan pada fungsi logLikdalam R mengatakan bahwa untuk lmmodel itu termasuk 'semua konstanta' ... sehingga akan ada log(2*pi)di sana di suatu tempat, serta istilah konstan lain untuk eksponen dalam kemungkinan. Juga, Anda tidak bisa lupa untuk menghitung fakta bahwa adalah parameter.σ2

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

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

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

AIC=2p2logL

tetapi perhatikan bahwa untuk model dengan 1 variabel independen, p = 3 (koefisien x, konstanta dan )σ2

Yang artinya ini adalah bagaimana Anda mendapatkan jawaban mereka:

nrow(mtcars)*(log(2*pi)+1+log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))
       +((length(lm_mtcars$coefficients)+1)*2)
Glen_b -Reinstate Monica
sumber
Mengapa dalam perhitungan Anda hanya membagi dengan n dan bukan n - p ? s2nnp
Luke Thorburn
1
2logL(θ^)+2pθθ^nσ^2σ2
Glen_b -Reinstate Monica
Apakah ada kesalahan ketik pada persamaan kedua? Haruskah Ok saya mengerti, Anda menggunakan 2logL=nlog(2π)+nlogsn+i(ei2/sn2)2πsn2
Rhody
10

AIC2k2logLLknlogSrn+2(k1)Srn

Scortchi - Reinstate Monica
sumber