23 votos

Regresión por pasos en R - ¿Cómo funciona?

Estoy intentando comprender la diferencia básica entre regresión por pasos y regresión hacia atrás en R utilizando la función step. Para la regresión por pasos utilicé el siguiente comando

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

Obtuve la siguiente salida para el código anterior.

forward

Para la selección de variables hacia atrás utilicé el siguiente comando

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

Y obtuve la siguiente salida para hacia atrás

backward

Por lo que he entendido, cuando no se especifica ningún parámetro, la selección por pasos actúa como hacia atrás a menos que se especifique el parámetro "superior" e "inferior" en R. Sin embargo, en la salida de la selección por pasos, hay un +disp que se añade en el 2º paso. ¿Qué intenta conseguir la función añadiendo de nuevo el +disp en la selección por pasos? ¿Por qué R añade el +disp en el 2º paso cuando los resultados son los mismos (valores AIC y valores de selección del modelo) que en la selección hacia atrás? ¿Cómo funciona exactamente R en la selección por pasos?

Realmente quiero entender cómo funciona esta función en R. ¡Gracias de antemano por la ayuda!

23voto

cnavigator Puntos 331

Tal vez sería más fácil comprender cómo se realiza la regresión por pasos si se observan los 15 modelos lm posibles.

Aquí tienes una fórmula rápida para generar las 15 combinaciones.

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>

Los valores AIC para cada uno de los modelos se extraen con:

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

Volvamos a tu paso-regresión. El valor de extractAIC para lm(mpg ~ wt + drat + disp + qsec) es 65,63 (equivalente al modelo 15 de la lista anterior).

Si el modelo elimina disp (-disp), entonces lm(mpg ~ wt + drat + qsec) es 63.891 (o el modelo 11 de la lista).

Si el modelo no elimina nada (ninguno), entonces el AIC sigue siendo 65.63

Si el modelo elimina qsec (-qsec), entonces lm(mpg ~ wt + drat + disp) es 65,908 (modelo 12).

etc.

Básicamente, el resumen revela todas las posibles eliminaciones escalonadas de un término de su modelo completo y compara el valor de extractAIC, enumerándolas en orden ascendente. Dado que el valor AIC más pequeño es más probable que se parezca al modelo TRUTH, mantenga el modelo (-disp) en el paso uno.

El proceso se repite de nuevo, pero con el modelo conservado (-disp) como punto de partida. Los términos se restan ("hacia atrás") o se restan/añaden ("ambos") para permitir la comparación de los modelos. Dado que el valor AIC más bajo de la comparación sigue siendo el modelo (-disp), el proceso se detiene y se dan los modelos resultantes.

En relación con su pregunta "¿Qué intenta conseguir la función añadiendo el +disp de nuevo en la selección por pasos?", en este caso, realmente no hace nada, porque el mejor modelo de los 15 modelos es el modelo 11, es decir, lm(mpg ~ wt + drat + qsec).

Sin embargo, en modelos complicados con un gran número de predictores que requieren numerosos pasos para resolverse, volver a añadir un término que se eliminó inicialmente es fundamental para proporcionar la forma más exhaustiva de comparar los términos.

Espero que esto ayude de alguna manera.

4voto

Shreyas Puntos 31

He aquí una respuesta simplificada. En primer lugar, ambos procedimientos intentan reducir el AIC de un modelo dado, pero lo hacen de formas diferentes. Luego, la diferencia básica es que en el procedimiento de selección hacia atrás sólo se pueden descartar variables del modelo en cualquier paso, mientras que en la selección por pasos también se pueden añadir variables al modelo.

Sobre la salida en la selección por pasos, en general la salida le muestra alternativas ordenadas para reducir su AIC, por lo que la primera fila en cualquier paso es su mejor opción. Entonces, hay un +disp en la tercera fila porque añadir esa variable a su modelo sería su tercera mejor opción para disminuir su AIC. Pero obviamente, como su mejor alternativa es <none> es decir, no hacer nada, el procedimiento se detiene y se obtienen los mismos resultados que en la selección hacia atrás.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X