多重共线性是否隐含在分类变量中?

机器算法验证 回归 分类数据 多重共线性
2022-03-16 16:35:55

我注意到,在修改多元回归模型时,在分类变量的类别中(当然,在排除参考类别之后)存在一个小但明显的多重共线性效应,通过方差膨胀因子来衡量。

例如,假设我们有一个包含连续变量 y 和一个名义分类变量 x 的数据集,其中有 k 个可能的互斥值。可能的值编码为 0/1 虚拟变量然后我们运行回归模型虚拟变量的 VIF 分数结果为非零。事实上,随着类别数量的增加,VIF 也会增加。将虚拟变量居中似乎不会改变 VIF。kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1

直观的解释似乎是类别变量内类别的互斥条件导致了这种轻微的多重共线性。这是一个微不足道的发现还是在使用分类变量构建回归模型时需要考虑的问题?

2个回答

我无法准确再现这种现象,但我可以证明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))

您可以看到多项分布中固有的约束,即中只有一个为1,其余均为 0。因此,您有线性约束这意味着说 总和被接管这是您注意到的共线性效应。没有什么不寻常或令人不安的。xixi=1x1=1xii1