Actualmente estoy ejecutando algunos modelos lineales de efectos mixtos.
Estoy usando el paquete "lme4" en R.
Mis modelos toman la forma:
model <- lmer(response ~ predictor1 + predictor2 + (1 | random effect))
Antes de ejecutar mis modelos, verifiqué la posible multicolinealidad entre los predictores.
Hice esto por:
Hacer un marco de datos de los predictores
dummy_df <- data.frame(predictor1, predictor2)
Use la función "cor" para calcular la correlación de Pearson entre predictores.
correl_dummy_df <- round(cor(dummy_df, use = "pair"), 2)
Si "correl_dummy_df" era mayor que 0.80, entonces decidí que predictor1 y predictor2 estaban demasiado correlacionados y no estaban incluidos en mis modelos.
Al leer un poco, aparecerían formas más objetivas de verificar la multicolinealidad.
¿Alguien tiene algún consejo sobre esto?
El "Factor de inflación de varianza (VIF)" parece un método válido.
El VIF se puede calcular utilizando la función "corvif" en el paquete AED (no Cran). El paquete se puede encontrar en http://www.highstat.com/book2.htm . El paquete admite el siguiente libro:
Zuur, AF, Ieno, EN, Walker, N., Saveliev, AA y Smith, GM 2009. Modelos y extensiones de efectos mixtos en ecología con R, 1ª edición. Springer, Nueva York.
Parece que una regla general es que si VIF es> 5, entonces la multicolinealidad es alta entre los predictores.
¿Usar VIF es más robusto que la simple correlación de Pearson?
Actualizar
Encontré un blog interesante en:
http://hlplab.wordpress.com/2011/02/24/diagnosing-collinearity-in-lme4/
El blogger proporciona un código útil para calcular VIF para modelos del paquete lme4.
He probado el código y funciona muy bien. En mi análisis posterior, descubrí que la multicolinealidad no era un problema para mis modelos (todos los valores VIF <3). Esto fue interesante, dado que anteriormente había encontrado una alta correlación de Pearson entre algunos predictores.
AED
paquete ha sido descontinuado ; en cambio, solosource("http://www.highstat.com/Book2/HighstatLibV6.R")
para lacorvif
función. (2) Espero proporcionar una respuesta real, pero (a) Creo que VIF tiene en cuenta la multicolinealidad (por ejemplo, puede tener tres predictores, ninguno de los cuales tiene fuertes correlaciones por pares, pero la combinación lineal de A y B está fuertemente correlacionada con C ) y (b) tengo fuertes reservas sobre la sabiduría de descartar términos colineales; ver Graham Ecology 2003, doi: 10.1890 / 02-3114http://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Respuestas:
Para el cálculo de VIF, usdm también puede ser un paquete (necesito instalar "usdm")
Si VIF> 4.0, generalmente asumo que la multicolinealidad elimina todas esas variables predictoras antes de ajustarlas a mi modelo
fuente
.4
comovifcor(vardata,th=0.4)
. Del mismo modo, puede utilizarvifstep(vardata,th=10)
para descartar todo mayor que 10.Una actualización, ya que esta pregunta me pareció útil pero no puedo agregar comentarios:
El código de Zuur et al. (2009) también está disponible a través del material complementario para su posterior publicación (y muy útil) en la revista Methods in Ecology and Evolution .
El documento, un protocolo para la exploración de datos para evitar problemas estadísticos comunes , proporciona consejos útiles y una referencia muy necesaria para justificar los umbrales de VIF (recomiendan un umbral de 3). El documento está aquí: http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full y el código R está en la pestaña de materiales complementarios (descarga de .zip).
Una guía rápida : para extraer los factores de inflación de varianza (VIF), ejecute su código HighStatLib.r y use la función
corvif
. La función requiere un marco de datos con solo los predictores (por ejemplo,df = data.frame(Dataset[,2:4])
si sus datos se almacenan en el conjunto de datos con los predictores en las columnas 2 a 4.fuente
Quizás la
qr()
función funcione. SiX
es su marco de datos o matriz, puede usarqr(X)$pivot
. Por ejemplo, lasqr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)
columnas 3 y 6 son la variable multicolineal.fuente
Para evaluar la multicolinealidad entre predictores al ejecutar la función de dragado (paquete MuMIn), incluya la siguiente función max.r como argumento "extra":
luego simplemente ejecute dragado especificando el número de variables predictoras e incluyendo la función max.r:
Esto funciona para los modelos lme4. Para modelos nlme ver: https://github.com/rojaff/dredge_mc
fuente
El VIF (factor de inflación de varianza) se puede medir simplemente por:
fuente