Tengo un conjunto de datos con 9 variables independientes continuas. Estoy tratando de seleccionar entre estas variables para ajustar un modelo a una única variable de porcentaje (dependiente), Score
. Desafortunadamente, sé que habrá una seria colinealidad entre varias de las variables.
He intentado utilizar la función stepAIC()
en R para la selección de variables, pero ese método, curiosamente, parece ser sensible al orden en el que las variables están listadas en la ecuación...
Aquí está mi código en R (como se trata de datos de porcentaje, utilizo una transformación logit para Score):
library(MASS)
library(car)
data.tst = read.table("data.txt",header=T)
data.lm = lm(logit(Score) ~ Var1 + Var2 + Var3 + Var4 + Var5 + Var6 + Var7 +
Var8 + Var9, data = data.tst)
step = stepAIC(data.lm, direction="both")
summary(step)
Por alguna razón, he descubierto que las variables listadas al principio de la ecuación terminan siendo seleccionadas por la función stepAIC()
, y el resultado puede ser manipulado al listar, por ejemplo, Var9
primero (después de la tilde).
¿Cuál es una forma más efectiva (y menos controvertida) de ajustar un modelo aquí? En realidad, no estoy completamente decidido en utilizar regresión lineal: lo único que quiero es poder entender cuál de las 9 variables es la que realmente está impulsando la variación en la variable Score
. Preferiblemente, esto sería algún método que tenga en cuenta el alto potencial de colinealidad en estas 9 variables.
9 votos
La colinealidad va a significar, sin importar cómo se haga el análisis, que es prácticamente imposible determinar si una variable está 'impulsando' la variación más o menos que una variable con la que está altamente colineal. Teniendo en cuenta esta limitación, podrías intentar el lasso como medio para seleccionar un pequeño número de variables que predicen de manera óptima, luego reportar el conjunto de variables que selecciona y aquellas con las que ese conjunto está altamente colineal. El lasso agrupado es otra opción.
4 votos
@guest: El lazo no funciona particularmente bien en presencia de fuerte colinealidad, especialmente en relación con el problema de selección de modelos.
0 votos
@cardinal, ¿cuáles son las alternativas entonces?
2 votos
@cardinal, el lasso funciona bien, pero si varias variables están correlacionadas tiende a seleccionar solo una de ellas, por eso sugerí mirar el conjunto de variables altamente colineales. Decidir usar algo más complejo que esta "opción predeterminada" requeriría una evaluación de la utilidad y una idea más sólida de para qué está destinado este modelo.
2 votos
Es posible que desees investigar la función bicreg {paquete BMA}. Ten en cuenta que necesitas un conjunto de datos completo para que funcione correctamente. Lo encuentro extremadamente útil para la selección de modelos.
1 votos
@guest: Bueno, eso depende en gran medida de la forma en que se selecciona el parámetro de regularización. De hecho, en ciertos regímenes, el lasso tiene una tendencia (demostrable) a sobre seleccionar parámetros. El OP ha preguntado "lo único que quiero es poder entender cuál de las 9 variables está realmente impulsando la variación en la variable
Score
", que es la frase en la que puede que me haya concentrado demasiado. En presencia de una fuerte colinealidad, el lasso no va a ayudar con eso, al menos en interpretaciones más estrictas de la observación del OP.0 votos
@dominic999 ¡Muchas gracias por esa sugerencia! ¡Parece funcionar bastante bien, de hecho! ¿Hay alguna manera de usar la selección de modelos Bayesiana en un LME? Eso sería increíble.
0 votos
Agregué una respuesta un poco más moderna y avanzada que podría resolver tu problema...