Cálculo da AIC “manualmente” em R

15

Eu tentei calcular o AIC de uma regressão linear em R, mas sem usar a AICfunção, assim:

lm_mtcars <- lm(mpg ~ drat, mtcars)

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

No entanto, AICfornece um valor diferente:

AIC(lm_mtcars)
[1] 190.7999

Alguém poderia me dizer o que estou fazendo de errado?

luciano
fonte
5
(sem verificar sua resposta ainda): você não está necessariamente fazendo nada errado, pois a probabilidade é realmente definida apenas como uma constante multiplicativa; duas pessoas podem calcular a probabilidade de log e obter números diferentes (mas as diferenças na probabilidade de log são as mesmas).
Glen_b -Reinstala Monica
11
A resposta de Hong Oois está relacionada a essa pergunta, eu acho. A fórmula que a função AICusa é -2*as.numeric(logLik(lm_mtcars))+2*(length(lm_mtcars$coefficients)+1).
COOLSerdash
luciano: o "+1" nessa fórmula @COOLSerdash aponta para o termo do parâmetro de variação. Observe também que a função logLikdiz que, para lmmodelos, inclui 'todas as constantes' ... então haverá uma log(2*pi)em algum lugar
Glen_b -Reinstate Monica
11
@Glen_b: Por que dizer que a probabilidade é definida apenas até uma constante multiplicativa? Afinal, ao comparar modelos não aninhados de diferentes famílias de distribuição (por exemplo, com AIC ou com o teste de Cox), você precisa se lembrar dessa constante.
Scortchi - Restabelece Monica
@ Scortchi a definição não é minha! Você terá que lidar com o RAFisher. Acho que tem sido assim desde o início (1921). Ainda está definido dessa maneira, pelo menos no caso contínuo, veja aqui , por exemplo, a frase que começa com 'Mais precisamente'.
Glen_b -Reinstala Monica

Respostas:

18

Observe que a ajuda na função logLikem R diz que, para os lmmodelos, inclui 'todas as constantes' ... então haverá uma log(2*pi)em algum lugar, além de outro termo constante para o expoente na probabilidade. Além disso, não se esqueça de contar o fato de que é um parâmetro.σ2

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

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

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

AIC=2p2logL

mas observe que, para um modelo com 1 variável independente, p = 3 (o coeficiente x, a constante e )σ2

O que significa que é assim que você obtém a resposta:

nrow(mtcars)*(log(2*pi)+1+log((sum(lm_mtcars$residuals^2)/nrow(mtcars))))
       +((length(lm_mtcars$coefficients)+1)*2)
Glen_b -Reinstate Monica
fonte
Por que no seu cálculo de você está apenas dividindo por e não ? s2nnp
Luke Thorburn
11
Veja a definição de AIC: onde o vetor de parâmetros é avaliado no máximo (ou seja, todos os elementos de são MLEs); por exemplo, consulte Wikipedia Akaike critério de informação: Definição . Se você não está dividindo por lá no cálculo de , não está calculando o MLE de e, portanto, não está realmente computando o AIC - na verdade, estaria ajustando duas vezes para o efeito dos parâmetros de ajuste. (Sim, muitas pessoas fazem isso errado)2logL(θ^)+2pθθ^nσ^2σ2
Glen_b -Reinstate Monica
Existe um erro de digitação na segunda equação? Deve ser Ok, entendo, você está usando2logL=nlog(2π)+nlogsn+i(ei2/sn2)2πsn2
rhody 26/09/19
10

A AICfunção fornece , onde é a probabilidade & é o número de parâmetros estimados (incluindo a interceptação e a variação). Você está usando , onde é a soma residual dos quadrados, e é o tamanho da amostra. Estas formulações diferem por uma constante aditiva; contanto que você use a mesma fórmula e observe as diferenças na AIC entre os diferentes modelos em que as constantes se cancelam, isso não importa.2k2logLLknlogSrn+2(k1)Srn

Scortchi - Restabelecer Monica
fonte