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?


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⁡(−12∑i(ei2/sn2))

−2log⁡L=nlog⁡(2π)+nlog⁡sn2+∑i(ei2/sn2)

=n[log⁡(2π)+log⁡sn2+1]

AIC=2p−2log⁡L

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)

Por que no seu cálculo de você está apenas dividindo por e não ? s2nn−p
— 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)−2log⁡L(θ^)+2pθθ^nσ^2σ2
— Glen_b -Reinstate Monica

Existe um erro de digitação na segunda equação? Deve ser Ok, entendo, você está usando−2log⁡L=nlog⁡(2π)+nlog⁡sn+∑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.2k−2log⁡LLknlog⁡Srn+2(k−1)Srn

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.