6 votos

Cómo deshacerse de un enorme factor categórico en la regresión múltiple

Tengo un gran problema de regresión con muchos casos, pero relativamente pocas variables independientes. Una de ellas es un factor categórico con miles de niveles. La regresión robusta se eterniza. En algunos casos, el gran número de variables ficticias se vuelve demasiado escaso para calcularlo incluso con lm "normal".

Lo que suele tener sentido es calcular de alguna manera la media de cada nivel del factor, luego ajustar la variable dependiente en consecuencia y hacer la regresión sin el factor grande. Un colega mío podría recordar que hay una función de R de dos letras que hace eso automáticamente, pero no puede recordar la combinación de dos letras.

Cualquier ayuda será muy apreciada.

0 votos

Tal vez esté pensando en plm ?

0 votos

¿Cómo ayudaría el plm?

0 votos

Elimina los efectos fijos categóricos de su modelo.

15voto

Joe Puntos 224

El paquete 'lfe' también se encargará de este problema. Implementa un método para proyectar los factores de las regresiones OLS, el método se describe en este próximo artículo: http://dx.doi.org/10.1016/j.csda.2013.03.024

7voto

Shea Parkes Puntos 2014

Yo pensaría que lme4 sería muy apropiado para esto. Trate su enorme factor categórico como un efecto aleatorio práctico. No voy a entrar en las definiciones teóricas. Como alternativa, utilice sparse.model.matrix() de Matrix para construir el marco de diseño y luego pasarlo a glmnet() de glmnet paquete. ( lme4 construye de forma natural la matriz de diseño dispersa, por lo que no es necesario utilizar el sparse.model.matrix() antes de entrar en él).

Si realmente quiere hacer el truco de la "media de cada nivel", asegúrese de calcular la media de cada observación excluyéndose a sí misma e incluya algunas observaciones adicionales con cada nivel de factor en la media de la población. A continuación, utilice esta variable derivada como una característica en sus modelos en lugar de la variable categórica. Si el factor fuera la única característica, este resultado sería idéntico a lme4 o glmnet (suponiendo que hayas resuelto cuántas observaciones medias hay que añadir).

Hay unas cuantas entradas de blog que llaman al truco de la "media de cada nivel impact coding . Además, según mi experiencia, si hay un rasgo muy denso, es posible que desee ajustar un modelo simple en ese rasgo y codificar los residuos por el nivel del enorme factor categórico en lugar de la respuesta pura.

Como ya se ha dicho, se trata de un consejo más práctico. Probablemente otras personas vendrán con algún consejo teórico más fuerte.

0 votos

Intento calcular la media de la categoría de cada observación excluyéndose a sí misma y utilizarla en el modelo. No funciona tan bien, ya que la predicción fuera de la muestra es pobre (en comparación con el simple uso del factor grande). ¿He entendido bien su técnica?

0 votos

¿Has hecho la segunda parte y has añadido un puñado de observaciones falsas en cada nivel con la respuesta media de la población? Esto es análogo a las crestas / L2-Penalidades. Puede que tengas que afinar cuántas falsas medias poblacionales añadir. Dicho esto, también recomiendo encarecidamente lme4. Su interfaz de fórmula es muy simple: y~x.other+(1|x.huge.factor) .

0 votos

Aclaración: Actualmente utilizo matrices dispersas con MatrixModels / lm.fit.sparse. Las estimaciones que obtengo de lme4 son muy similares. Sin embargo, mi objetivo final es deshacerme de los factores grandes para (también) poder hacer una detección de valores atípicos más efectiva o una regresión robusta. Así que en tal caso, ¿recomendarías la estrategia de "ridging"?

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