Rで「手動」でAICを計算する


15

私はRの線形回帰のAICを計算しようとしましたが、次のAICように関数を使用しませんでした:

lm_mtcars <- lm(mpg ~ drat, mtcars)

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

ただし、AIC異なる値を指定します。

AIC(lm_mtcars)
[1] 190.7999

誰かが私が間違っていることを教えてもらえますか?


5
(答えをまだチェックせずに):尤度は実際には乗法定数までしか定義されていないため、必ずしも間違ったことをしているわけではありません。2人で対数尤度を計算し、異なる数値を取得できます(ただし、対数尤度の違いは同じです)。
Glen_b -Reinstateモニカ

1
Hong Ooisの答えはこの質問に関連していると思います。関数がAIC使用する式はです-2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1)
COOLSerdash 14

luciano:その式の「+1」は@COOLSerdashが分散パラメーター項から生じることを指します。注また、機能があることlogLikのためと言いlmモデルそれはすべての定数'を含む...そうもあるかもしれませんlog(2*pi)が、どこかで
Glen_b -Reinstateモニカ

1
@Glen_b:尤度が乗算定数までしか定義されていないのはなぜですか?結局のところ、さまざまな分布ファミリーのネストされていないモデルを比較する場合(AICまたはCoxテストなど)、その定数を覚えておく必要があります。
Scortchi -復活モニカ

@Scortchi定義は私のものではありません!RAFisherでそれを取り上げる必要があります。最初からそうだったと思う(1921)。少なくとも継続的な場合は、たとえば、「より正確に」始まる文で、ここを参照してください。
Glen_b -Reinstateモニカ

回答:


18

機能のヘルプという注意logLikRでは、のためにと言うlmモデルそれはすべての定数'を含む...そうあるだろうlog(2*pi)が、どこかだけでなく、可能性が指数のための別の定数項で。また、あなたは事実カウントするように忘れることができないパラメータです。σ2

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

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

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

AIC=2p2logL

σ2

つまり、これがあなたの答えを得る方法です:

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

s2nnp

1
2logL(θ^)+2pθθ^nσ^2σ2
Glen_b -Reinstate Monica

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.