¿La multicolinealidad está implícita en las variables categóricas?

10

Al jugar con un modelo de regresión multivariante, noté que había un pequeño pero notable efecto de multicolinealidad, medido por factores de inflación de varianza, dentro de las categorías de una variable categórica (después de excluir la categoría de referencia, por supuesto).

Por ejemplo, supongamos que tenemos un conjunto de datos con la variable continua yy una variable categórica nominal x que tiene k posibles valores mutuamente excluyentes. Codificamos esos valores posibles como 0/1 variables ficticias . Luego ejecutamos un modelo de regresión . Las puntuaciones VIF para las variables ficticias resultan ser distintas de cero. De hecho, a medida que aumenta el número de categorías, aumentan los VIF. Centrar las variables ficticias no parece cambiar los VIF.kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1

La explicación intuitiva parece ser que la condición mutuamente excluyente de las categorías dentro de la variable categórica causa esta ligera multicolinealidad. ¿Es este un hallazgo trivial o es un problema a considerar al construir modelos de regresión con variables categóricas?

RobertF
fuente

Respuestas:

8

No puedo reproducir exactamente este fenómeno, pero puedo demostrar que VIF no aumenta necesariamente a medida que aumenta el número de categorías .

La intuición es simple: las variables categóricas pueden hacerse ortogonales mediante diseños experimentales adecuados. Por lo tanto, en general no debería haber una relación entre el número de categorías y la multicolinealidad.

Aquí hay una Rfunción para crear conjuntos de datos categóricos con un número específico de categorías (para dos variables independientes) y una cantidad específica de replicación para cada categoría. Representa un estudio equilibrado en el que cada combinación de categoría se observa el mismo número de veces, :n

trial <- function(n, k1=2, k2=2) {
  df <- expand.grid(1:k1, 1:k2)
  df <- do.call(rbind, lapply(1:n, function(i) df))
  df$y <- rnorm(k1*k2*n)
  fit <- lm(y ~ Var1+Var2, data=df)
  vif(fit)
}

Al aplicarlo, encuentro que los VIF siempre están en sus valores más bajos posibles, , lo que refleja el equilibrio (que se traduce en columnas ortogonales en la matriz de diseño). Algunos ejemplos:1

sapply(1:5, trial) # Two binary categories, 1-5 replicates per combination
sapply(1:5, function(i) trial(i, 10, 3)) # 30 categories, 1-5 replicates

Esto sugiere que la multicolinealidad puede estar creciendo debido a un desequilibrio creciente en el diseño . Para probar esto, inserte la línea

  df <- subset(df, subset=(y < 0))

antes de la fitcola trial. Esto elimina la mitad de los datos al azar. Re-corriendo

sapply(1:5, function(i) trial(i, 10, 3))

muestra que los VIF ya no son iguales a (pero permanecen cerca de él, al azar). Todavía no aumentan con más categorías: produce valores comparables.1sapply(1:5, function(i) trial(i, 10, 10))

whuber
fuente
2

Tiene la restricción que puede ver que es inherente a las distribuciones multinomiales, es decir, que una y solo una de las s será 1 y todo lo demás será 0. Entonces tiene la restricción lineal . Eso significa decir donde la suma se toma sobre . Este es el efecto de colinealidad que estás notando. No hay nada inusual o inquietante al respecto.xixi=1x1=1xii1

Michael R. Chernick
fuente
No entiendo qué tienen que ver las distribuciones multinomiales con esta situación. ¿Podrías explicar?
whuber