有没有一种快速的方法来检查 R 中分类变量之间的多重共线性?

数据挖掘 r 逻辑回归 分类数据
2022-02-15 14:33:38

我有大量的分类变量和虚拟变量 (36),我想根据它们的多重共线性(或只是共线性)删除其中的一些。是否有任何函数可以检查我的变量中的(多重)共线性并返回具有多重共线性(或共线性)的变量,而不是一遍又一遍地使用卡方检验?

2个回答

在我的工作中,我通常使用归一化互信息 (NMI) 来了解两个分类变量的“相关性”。

归一化互信息是一种信息论度量,它告诉您两个变量共享了多少信息。如果 NMI 接近 1,则两个变量非常“相关”,而如果 NMI 接近 0,则两个变量“不相关”。

我编写了这个函数来计算 data.table 中前两个变量之间的 NMI。多亏了data.table,它非常快。随意使用它!

compute_mutualinfo <- function(df){
  require(data.table)
  require(entropy)
  var1 = names(df)[1]
  var2 = names(df)[2]
  tmp_tab <- df[,.N,by=c(var1,var2)]
  names(tmp_tab)[1:2] <- c('V1','V2')
  cross_tab <- tapply(tmp_tab$N,list(addNA(as.factor(tmp_tab$V2),ifany = T), addNA(as.factor(tmp_tab$V1),ifany = T)), sum)
  cross_tab[is.na(cross_tab)] <- 0
  mi.plugin(cross_tab)/sqrt(entropy(df[,.N,by=var1,with=T][,N])*entropy(df[,.N,by=var2,with=T][,N]))
}

方差膨胀因子 (VIF) 在回归分析中检测多重共线性。我了解到,高于 10 的 VIF 表示多重共线性,应谨慎对待。
就像斯蒂芬提到的 vif 函数是汽车库的一部分