Ist Multikollinearität in kategorialen Variablen enthalten?

10

Beim Basteln mit einem multivariaten Regressionsmodell stellte ich fest, dass innerhalb der Kategorien einer kategorialen Variablen (natürlich nach Ausschluss der Referenzkategorie) ein kleiner, aber wahrnehmbarer Multikollinearitätseffekt auftrat, gemessen anhand von Varianzinflationsfaktoren .

Nehmen wir zum Beispiel an, wir haben einen Datensatz mit der stetigen Variablen y und einer nominalen kategorialen Variablen x, die k mögliche sich gegenseitig ausschließende Werte hat. Wir codieren diese möglichen Werte als 0/1 Dummy-Variablen x 1 , x 2 , , x k . Dann führen wir ein Regressionsmodell y = b 0 + b 1 x 1 + b 2 x 2 + + b k - 1 x k - 1 aus . Das VIF-Ergebnis für k - 1kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1Dummy-Variablen sind nicht Null. Tatsächlich nehmen die VIFs mit zunehmender Anzahl von Kategorien zu. Das Zentrieren der Dummy-Variablen scheint die VIFs nicht zu ändern.

Die intuitive Erklärung scheint zu sein, dass die sich gegenseitig ausschließende Bedingung der Kategorien innerhalb der kategorialen Variablen diese leichte Multikollinearität verursacht. Ist dies ein trivialer Befund oder ein Problem, das beim Erstellen von Regressionsmodellen mit kategorialen Variablen zu berücksichtigen ist?

RobertF
quelle

Antworten:

8

Ich kann dieses Phänomen nicht genau reproduzieren, aber ich kann zeigen, dass VIF nicht unbedingt mit zunehmender Anzahl von Kategorien zunimmt .

Die Intuition ist einfach: Kategoriale Variablen können durch geeignete Versuchspläne orthogonal gemacht werden. Daher sollte im Allgemeinen keine Beziehung zwischen der Anzahl der Kategorien und der Multikollinearität bestehen.

Rn

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)
}

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

Dies deutet darauf hin, dass die Multikollinearität aufgrund eines wachsenden Ungleichgewichts im Design möglicherweise zunimmt . Um dies zu testen, fügen Sie die Zeile ein

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

vor der fitLinie in trial. Dadurch wird die Hälfte der Daten zufällig entfernt. Wiederholen

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

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

whuber
quelle
2

xixi=1x1=1xii1

Michael R. Chernick
quelle
Ich verstehe nicht, was Multinomialverteilungen mit dieser Situation zu tun haben. Könntest du erklären?
whuber