我有大量的分类变量和虚拟变量 (36),我想根据它们的多重共线性(或只是共线性)删除其中的一些。是否有任何函数可以检查我的变量中的(多重)共线性并返回具有多重共线性(或共线性)的变量,而不是一遍又一遍地使用卡方检验?
有没有一种快速的方法来检查 R 中分类变量之间的多重共线性?
数据挖掘
r
逻辑回归
分类数据
2022-02-15 14:33:38
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 函数是汽车库的一部分
其它你可能感兴趣的问题