Quelle est la différence entre AIC () et extractAIC () dans R?

11

La documentation R pour l'un ou l'autre n'apporte pas beaucoup de lumière. Tout ce que je peux obtenir de ce lien est que l'utilisation de l'un ou l'autre devrait être correcte. Ce que je ne comprends pas, c'est pourquoi ils ne sont pas égaux.

Réalité: La fonction de régression pas à pas dans R, step()utilise extractAIC().

Fait intéressant, l'exécution d'un lm()modèle et d' un modèle glm()«nul» (uniquement l'interception) sur l'ensemble de données «mtcars» de R donne des résultats différents pour AICet extractAIC().

> null.glm = glm(mtcars$mpg~1)
> null.lm = lm(mtcars$mpg~1)

> AIC(null.glm)
[1] 208.7555
> AIC(null.lm)
[1] 208.7555
> extractAIC(null.glm)
[1]   1.0000 208.7555
> extractAIC(null.lm)
[1]   1.0000 115.9434

C'est bizarre, étant donné que les deux modèles ci-dessus sont les mêmes et AIC()donnent les mêmes résultats pour les deux.

Quelqu'un peut-il éclairer la question?

Sudip Sinha
la source

Réponses:

6

D'après l'aide pour ces deux fonctions (utiliser? AIC et? ExtractAIC), cela est attendu.

Notez que l'AIC est juste défini jusqu'à une constante additive, car c'est également le cas pour la log-vraisemblance. Cela signifie que vous devez vérifier si

extractAIC(full.modell) - extractAIC(null.modell)

et

AIC(full.modell) - AIC(null.modell)

donner le même résultat. Tant qu'ils le font, les deux fonctions sont équivalentes à toutes fins pratiques.

Erik
la source
2
Je suis probablement manque quelque chose, mais je ne comprends toujours pas pourquoi extractAIC(null.lm) != AIC(null.lm)tout , extractAIC(null.glm) == AIC(null.glm)même si null.lmest le même modèle que null.glm. Pourriez-vous développer un peu votre réponse?
smillig
2
@smillig extractAICutilise différentes méthodes pour les lmajustements et glmajustements, c'est-à-dire extractAIC.lmet extractAIC.glm. Vous pouvez utiliser getAnywherepour étudier leur code. AICutilise la même méthode pour les deux.
Roland
J'ai plusieurs paires de modèles (avec plusieurs prédicteurs) pour lesquels les deux fonctions donnent des résultats différents. Modèle 1: y = x1 + x2, Modèle 2: y = z + x1 + x2 * z. extractAIC()donne une valeur inférieure (négative) pour le modèle 1, tandis que AIC donne une valeur inférieure (positive) pour le modèle 2.
Maxim.K
1
@ Maxim.K Vous donnez peu d'informations sur le type de variables et les modèles utilisés. Si vous l'avez fait et qu'il y a des différences avec cette question, il pourrait être utile de l'afficher en tant que nouvelle question. Difficile à dire, sans connaître les détails.
Erik
@Erik Je doute que cela vaudra beaucoup si je dis que z est continu et x2 est catégorique (factice). On aurait besoin des données pour se reproduire et je ne peux pas les publier j'ai peur.
Maxim.K