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?

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


2

xixi=1x1=1xii1


Nie rozumiem, co rozkłady wielomianowe mają wspólnego z tą sytuacją. Czy możesz wytłumaczyć?
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.