La multicollinearità è implicita nelle variabili categoriali?


10

Ho notato mentre armeggiavo con un modello di regressione multivariata c'era un piccolo ma evidente effetto multicollinearità, misurato da fattori di inflazione di varianza, all'interno delle categorie di una variabile categoriale (ovviamente dopo aver escluso la categoria di riferimento).

Ad esempio, supponiamo di avere un set di dati con la variabile continua y e una variabile categoriale nominale x che ha k possibili valori reciprocamente esclusivi. Codifichiamo quei possibili valori come 0/1 variabili fittizie . Quindi eseguiamo un modello di regressione . I punteggi VIF per le variabili fittizie risultano essere diversi da zero. Di fatto, all'aumentare del numero di categorie, aumentano i VIF. Centrare le variabili fittizie non sembra modificare i VIF.kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1

La spiegazione intuitiva sembra essere che la condizione reciprocamente esclusiva delle categorie all'interno della variabile categoriale causi questa leggera multicollinearità. È una scoperta banale o è un problema da considerare quando si creano modelli di regressione con variabili categoriche?

Risposte:


8

Non riesco a riprodurre esattamente questo fenomeno, ma posso dimostrare che VIF non aumenta necessariamente all'aumentare del numero di categorie .

L'intuizione è semplice: le variabili categoriali possono essere rese ortogonali mediante opportuni progetti sperimentali. Pertanto, in generale non dovrebbe esserci alcuna relazione tra numero di categorie e multicollinearità.

Ecco una Rfunzione per creare set di dati categorici con un numero specificabile di categorie (per due variabili indipendenti) e quantità specificabile di replica per ogni categoria. Rappresenta uno studio equilibrato in cui ogni combinazione di categoria viene osservata un numero uguale di volte, :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)
}

Applicandolo, trovo che i VIF siano sempre ai loro valori più bassi possibili, , riflettendo il bilanciamento (che si traduce in colonne ortogonali nella matrice del design). Qualche esempio: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

Ciò suggerisce che la multicollinearità potrebbe aumentare a causa di un crescente squilibrio nella progettazione . Per verificare ciò, inserire la riga

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

prima della fitlinea trial. Ciò rimuove la metà dei dati a caso. Re-running

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

mostra che i VIF non sono più uguali a (ma rimangono vicini ad esso, in modo casuale). Non aumentano ancora con più categorie: produce valori comparabili.1sapply(1:5, function(i) trial(i, 10, 10))


2

Hai il vincolo che puoi vedere è inerente alle distribuzioni multinomiali, vale a dire che uno e solo uno degli s sarà 1 e tutto il resto sarà 0. Quindi hai il vincolo lineare . Ciò significa che dove la somma viene rilevata in . Questo è l'effetto collinearità che stai notando. Non c'è nulla di insolito o di inquietante al riguardo.xixi=1x1=1xii1


Non capisco che cosa hanno a che fare le distribuzioni multinomiali con questa situazione. Potresti spiegare?
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.