Régression pas à pas dans R - Comment ça marche?

15

J'essaie de comprendre la différence de base entre la régression pas à pas et la régression vers l'arrière dans R en utilisant la fonction step. Pour la régression pas à pas, j'ai utilisé la commande suivante

  step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="both")

J'ai obtenu la sortie ci-dessous pour le code ci-dessus.

vers l'avant

Pour la sélection des variables en arrière, j'ai utilisé la commande suivante

 step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="backward")

Et j'ai obtenu la sortie ci-dessous pour en arrière

en arrière

Autant que j'ai compris, quand aucun paramètre n'est spécifié, la sélection pas à pas agit en arrière sauf si les paramètres "supérieur" et "inférieur" sont spécifiés dans R. Pourtant, dans la sortie de la sélection pas à pas, il y a un + disp qui est ajouté dans la 2ème étape. Quelle est la fonction essayant d'atteindre en ajoutant à nouveau le + disp dans la sélection pas à pas? Pourquoi R ajoute-t-il le + disp à la 2e étape alors que les résultats sont les mêmes (valeurs AIC et valeurs de sélection de modèle) que la sélection arrière. Comment fonctionne exactement R dans la sélection pas à pas?

Je veux vraiment comprendre comment cette fonction fonctionne dans R. Merci d'avance pour l'aide!


la source

Réponses:

16

Il serait peut-être plus facile de comprendre comment la régression par étapes se fait en examinant les 15 modèles de lm possibles.

Voici un quickie pour générer une formule pour les 15 combinaisons.

library(leaps)
tmp<-regsubsets(mpg ~ wt + drat + disp + qsec, data=mtcars, nbest=1000, really.big=T, intercept=F)
all.mods <- summary(tmp)[[1]]
all.mods <- lapply(1:nrow(all.mods, function(x)as.formula(paste("mpg~", paste(names(which(all.mods[x,])), collapse="+"))))

head(all.mods)
[[1]]
mpg ~ drat
<environment: 0x0000000013a678d8>

[[2]]
mpg ~ qsec
<environment: 0x0000000013a6b3b0>

[[3]]
mpg ~ wt
<environment: 0x0000000013a6df28>

[[4]]
mpg ~ disp
<environment: 0x0000000013a70aa0>

[[5]]
mpg ~ wt + qsec
<environment: 0x0000000013a74540>

[[6]]
mpg ~ drat + disp
<environment: 0x0000000013a76f68>

Les valeurs AIC pour chacun des modèles sont extraites avec:

all.lm<-lapply(all.mods, lm, mtcars)

sapply(all.lm, extractAIC)[2,]
 [1]  97.98786 111.77605  73.21736  77.39732  63.90843  77.92493  74.15591  79.02978  91.24052  71.35572
[11]  63.89108  65.90826  78.68074  72.97352  65.62733

Revenons à votre régression par étapes. La valeur extractAIC pour lm (mpg ~ wt + drat + disp + qsec) est de 65,63 (équivalent au modèle 15 dans la liste ci-dessus).

Si le modèle supprime disp (-disp), alors lm (mpg ~ wt + drat + qsec) vaut 63.891 (ou le modèle 11 dans la liste).

Si le modèle ne supprime rien (rien), alors l'AIC est toujours 65,63

Si le modèle supprime qsec (-qsec), alors lm (mpg ~ wt + drat + disp) est 65,908 (modèle 12).

etc.

Fondamentalement, le résumé révèle la suppression possible par étapes d'un terme de votre modèle complet et compare la valeur extractAIC, en les répertoriant par ordre croissant. Étant donné que la plus petite valeur AIC est plus susceptible de ressembler au modèle TRUTH, l'étape conserve le modèle (-disp) à l'étape un.

Le processus est répété à nouveau, mais avec le modèle retenu (-disp) comme point de départ. Les termes sont soit soustraits ("en arrière"), soit soustraits / ajoutés ("les deux") pour permettre la comparaison des modèles. Étant donné que la valeur AIC la plus faible en comparaison est toujours le modèle (-disp), les modèles d'arrêt de processus et résultants sont donnés.

En ce qui concerne votre requête: "Quelle est la fonction essayant d'atteindre en ajoutant à nouveau le + disp dans la sélection pas à pas?", Dans ce cas, cela ne fait vraiment rien, car le meilleur modèle parmi les 15 modèles est le modèle 11 , c'est-à-dire lm (mpg ~ wt + drat + qsec).

Cependant, dans les modèles complexes avec un grand nombre de prédicteurs qui nécessitent de nombreuses étapes à résoudre, l'ajout d'un terme qui a été supprimé initialement est essentiel pour fournir la façon la plus exhaustive de comparer les termes.

J'espère que cette aide d'une certaine manière.

Adam Quek
la source
6
"Étant donné que la plus petite valeur AIC est plus susceptible de ressembler au modèle TRUTH" est tout à fait faux. La construction de modèles par étapes est à peu près aussi susceptible de conserver de faux prédicteurs que de rejeter les vrais prédicteurs ... parmi une foule d'autres problèmes: stats.stackexchange.com/questions/115843/…
Alexis
2
C'est évidemment un mensonge. C'est pourquoi la sélection de modèles basée sur des critères uniques (comme la régression pas à pas) est un peu naïve.
Adam Quek
@Alexis aime vos recommandations dans votre réponse dans le lien.
Adam Quek
3

Voici une réponse simplifiée. Premièrement, les deux procédures tentent de réduire l'AIC d'un modèle donné, mais elles le font de différentes manières. Ensuite, la différence fondamentale est que dans la procédure de sélection en arrière, vous ne pouvez supprimer que les variables du modèle à n'importe quelle étape, tandis que dans la sélection pas à pas, vous pouvez également ajouter des variables au modèle.

À propos de la sortie dans la sélection pas à pas, en général, la sortie vous montre des alternatives ordonnées pour réduire votre AIC, donc la première ligne à n'importe quelle étape est votre meilleure option. Ensuite, il y a un +dispdans la troisième ligne parce que l'ajout de cette variable à votre modèle serait votre troisième meilleure option pour diminuer votre AIC. Mais évidemment, comme votre meilleure alternative est<none> , cela signifie ne rien faire, la procédure s'arrête et vous donne les mêmes résultats qu'en sélection arrière.

Ayar Paco
la source