Czy wielokoliniowość jest ukryta w zmiennych jakościowych?

10

Zauważyłem, że podczas majstrowania przy modelu regresji wielowymiarowej zaobserwowano niewielki, ale zauważalny efekt wielokoliniowości, mierzony współczynnikami inflacji wariancji, w kategoriach zmiennej jakościowej (oczywiście po wykluczeniu kategorii odniesienia).

Załóżmy na przykład, że mamy zestaw danych ze zmienną ciągłą y i jedną nominalną zmienną kategorialną x, która ma k możliwych wzajemnie wykluczających się wartości. Kodujemy te możliwych wartości jako zmienne obojętne 0/1 . Następnie uruchamiamy model regresji . Wyniki VIF dla zmiennych obojętnych okazują się niezerowe. W rzeczywistości, wraz ze wzrostem liczby kategorii, zwiększają się VIF. Centrowanie zmiennych fikcyjnych nie wydaje się zmieniać VIF.x 1 , x 2 , , x k y = b 0 + b 1 x 1 + b 2 x 2 + + b k - 1 x k - 1 k - 1kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1

Intuicyjnym wyjaśnieniem wydaje się być to, że wzajemnie wykluczające się warunki kategorii w obrębie zmiennej kategorialnej powodują tę niewielką wielokoliniowość. Czy jest to trywialne ustalenie, czy też jest to problem, który należy wziąć pod uwagę, budując modele regresji ze zmiennymi kategorialnymi?

RobertF
źródło

Odpowiedzi:

8

Nie mogę dokładnie odtworzyć tego zjawiska, ale mogę wykazać, że VIF niekoniecznie rośnie wraz ze wzrostem liczby kategorii .

Intuicja jest prosta: zmienne kategorialne mogą być ortogonalne dzięki odpowiednim projektom eksperymentalnym. W związku z tym, nie powinno w ogóle być nie zależność między liczbą kategorii i Współliniowość.

Oto Rfunkcja służąca do tworzenia kategorycznych zestawów danych z określoną liczbą kategorii (dla dwóch niezależnych zmiennych) i określoną ilością replikacji dla każdej kategorii. Reprezentuje zrównoważone badanie, w którym każdą kombinację kategorii obserwuje się tyle samo razy, :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)
}

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

Sugeruje to, że wielokoliniowość może rosnąć z powodu rosnącego braku równowagi w projekcie . Aby to przetestować, wstaw linię

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

przed fitlinią trial. To losowo usuwa połowę danych. Ponowne uruchomienie

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

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

Whuber
źródło
2

xixi=1x1=1xii1

Michael R. Chernick
źródło
Nie rozumiem, co rozkłady wielomianowe mają wspólnego z tą sytuacją. Czy możesz wytłumaczyć?
whuber