我无法准确再现这种现象,但我可以证明VIF 不一定会随着类别数量的增加而增加。
直觉很简单:分类变量可以通过适当的实验设计正交化。因此,一般而言,类别数和多重共线性之间应该没有关系。
这是一个R
创建分类数据集的函数,该数据集具有可指定的类别数量(对于两个自变量)和每个类别的可指定复制量。它代表了一项平衡研究,其中每个类别组合都被观察到相同的次数,: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)
}
应用它,我发现 VIF始终处于可能的最低值,反映了平衡(转化为设计矩阵中的正交列)。一些例子: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
这表明多重共线性可能会由于设计中的不平衡而增加。要对此进行测试,请插入该行
df <- subset(df, subset=(y < 0))
fit
在行之前trial
。这会随机删除一半的数据。重新运行
sapply(1:5, function(i) trial(i, 10, 3))
表明 VIF 不再等于(但它们随机保持接近 1)。它们仍然不会随着类别的增加而增加:产生可比较的值。1sapply(1:5, function(i) trial(i, 10, 10))