Estoy tratando de entender la lógica detrás de la selección hacia adelante y hacia atrás (aunque sé que existen mejores métodos para la selección de modelos). En la selección del modelo hacia adelante, el proceso de selección se inicia con un modelo vacío y las variables se agregan secuencialmente. En la selección hacia atrás, el proceso de selección se inicia con el modelo completo y las variables se excluyen secuencialmente.
Pregunta: ¿Con qué modelo comienza la selección hacia adelante y hacia atrás?
¿Es el modelo completo? ¿El modelo vacío? ¿Algo en el medio? Wikipedia y Hastie et al. (2009) – Los elementos del aprendizaje estadístico, página 60 explican el método, pero no pude encontrar nada sobre el modelo inicial. Para mi análisis, estoy usando la función stepAIC
del R
paquete MASS
.
ACTUALIZACIÓN:
A continuación, puede encontrar un ejemplo en R
. La función stepAIC imprime automáticamente cada paso del proceso de selección en la consola y parece que la selección comienza con el modelo completo. Sin embargo, según la respuesta de jjet, no estoy seguro de haber hecho algo mal.
# Example data N <- 1000000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) # Selection library("MASS") mod <- lm(y ~., data) stepAIC(mod, direction = "both")
Comentarios
Respuesta
Creo que la selección «adelante-atrás» es otro nombre para la selección «adelante-paso a paso». Este es el enfoque predeterminado utilizado por stepAIC. En este procedimiento, comienza con un modelo vacío y se construye secuencialmente como en la selección hacia adelante. La única advertencia es que cada vez que agrega una nueva variable, $ X_ {new} $, debe verificar si alguna de las otras variables que ya están en el modelo debe eliminarse después de que $ X_ {new} $ esté incluido . En este enfoque, puede terminar buscando «no lineal» a través de todos los diferentes modelos.
——– EDITAR ——–
El El siguiente código R ilustra la diferencia entre las tres estrategias de selección:
# library(MASS) set.seed(1) N <- 200000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- x1 + x2 + x3 + rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) fit1 <- lm(y ~ ., data) fit2 <- lm(y ~ 1, data) stepAIC(fit1,direction="backward") stepAIC(fit2,direction="forward",scope=list(upper=fit1,lower=fit2)) stepAIC(fit2,direction="both",scope=list(upper=fit1,lower=fit2))
He modificado tu ejemplo ligeramente en este código. Primero, establecí una semilla para que puedes ver los mismos datos que utilicé. También reduje N para que el algoritmo se ejecute un poco más rápido. Mantuve todas tus variables iguales excepto x6. x6 es ahora el más predictivo de y individualmente; esto lo convertirá en el primero variable elegida en la selección hacia adelante y hacia adelante-paso a paso. Pero una vez que x1, x2 y x3 ingresan al modelo, x6 se vuelve independiente de y y debe excluirse. Verá que adelante-paso a paso hace exactamente esto. Comienza con x6, procede a incluir x1, x2 y x3, luego retrocede y elimina x6 y termina. Si solo usa adelante, entonces x6 permanecerá en el modelo porque el algoritmo nunca regresa a este tipo de verificación de multicolinealidad.
Comentarios
- Gracias usted por su respuesta jjet! Tiene mucho sentido lo que dices, pero si ejecutas el código que actualicé arriba, parece que la selección comienza con el modelo completo. ¿He hecho algo mal?
- Solo un pequeño problema con su código. Escribiste mod < – lm (y ~., Data) seguido de stepAIC (mod, direction = " ambos "). En su primera línea, ' ha definido efectivamente un modelo inicial para incluir todas las variables escribiendo " y ~. ". Este es ahora su punto de partida para la selección hacia adelante. En su lugar, ' querrá escribir " y ~ 1 " que es solo una modelo de intercepción: el punto de partida que ' está buscando. ' he realizado las ediciones anteriores con el código R que deberían aclararlo.
- ¡Muchas gracias por la gran ayuda!Una última pregunta: si mantengo mi ejemplo como está sin el argumento de alcance y con
mod <- lm(y ~., data)
, ¿está realizando una selección hacia atrás normal o está realizando una selección hacia adelante y hacia atrás con un modelo de inicio completo? - Este último. Se ' s avanza y retrocede utilizando un modelo inicial que incluye todas las variables. Si no ' no tiene definida la lista de alcance, se asumirá que su " inferior " modelo es el modelo que especificó inicialmente y su modelo " superior " es el modelo completo.
Respuesta
La selección del modelo hacia adelante y hacia atrás son dos enfoques codiciosos para resolver el problema de optimización combinatoria de encontrar la combinación óptima de características (que se sabe que es NP-completo). Por lo tanto, debe buscar estrategias subóptimas y computacionalmente eficientes. Consulte, por ejemplo, Métodos de búsqueda flotantes en la selección de funciones de Pudil et. al.
En el método Forward, comienza con un modelo vacío e itera sobre todas las características. Para cada característica, entrena un modelo y selecciona la característica que produce el mejor modelo de acuerdo con su métrica. De manera similar, procede agregando la siguiente característica que produce la mejor mejora cuando se combina con las ya seleccionadas.
En el método hacia atrás, simplemente invierte el procedimiento: comience con todas las características y elimine iterativamente esa cuya eliminación daña menos el rendimiento o conduce a la mayor mejora.
Comentarios
- ¡Gracias por su respuesta jpmuc! Sin embargo, no estoy seguro de si esto responde a mi pregunta original, que era: " ¿Con qué modelo comienza la selección hacia adelante y hacia atrás? " ¿Me falta algo en su respuesta o simplemente desea aclarar el procedimiento de selección hacia adelante y hacia atrás en general?
- En este método de selección de características, no está vinculado a un modelo concreto o conjunto de parámetros. Usted selecciona el conjunto de características con las que puede construir el mejor modelo de un tipo en particular (en su caso, un modelo lineal). Esto se ilustra mejor en estos dos enlaces: stat.columbia.edu/~martin/W2024/R10.pdf y rstudio-pubs-static.s3.amazonaws.com/ …
object
&scope
argumentos para comenzar con el modelo que desee:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
. Yo no ' No sé si hay ' es una respuesta autorizada sobre si " adelante-atrás " implica un modelo inicial particular, o cuál; pero incluso si lo hubiera, ' sería sensato no asumir que otras personas lo saben cuando usan la expresión.