0

我正在处理一个我怀疑存在多重共线性问题的大型数据集,因为 var-covariance 矩阵具有负特征值(与其他矩阵相比非常小);也比最大特征值/最小特征值 > 3000;

我的问题是:R 中是否有任何测试例程来识别哪些变量是多余的(我不使用回归模型);我可能会做线性回归对图或使用 pairs(data) 命令,但我非常感谢数值测试的一些帮助,因为我有 200 个变量,并且图表在这件事上并不是一个很好的决策支持。

4

1 回答 1

0

如果我没有正确理解您要查找的内容:

如果您想使用相关阈值来排除某些变量,则可以尝试以下操作

在这里的示例中,我正在生成一个随机矩阵

> set.seed(3)
> data <- data.frame(V1=rnorm(20),V2=rnorm(20),V3=rnorm(20),V4=rnorm(20),V5=rnorm(20))
> cor.mat <- cor(data)
> diag(cor.mat)=0

这是相关矩阵,您的变量是 V1、V2、V3、V4、V5

> cor.mat
            V1          V2         V3         V4         V5
V1  0.00000000 -0.14464568 0.09047839 -0.1200863 -0.1110384
V2 -0.14464568  0.00000000 0.04340839  0.1929009 -0.4354569
V3  0.09047839  0.04340839 0.00000000  0.1185795  0.1760463
V4 -0.12008631  0.19290090 0.11857953  0.0000000 -0.2080077
V5 -0.11103839 -0.43545694 0.17604633 -0.2080077  0.0000000

现在您在以下循环中替换if语句中要用于选择冗余变量的阈值(这里我使用 0.4,即使这并不表示冗余,而是从随机矩阵中得出的最大值) .

> High_cor = vector()
> for (i in 1:nrow(cor.mat)){
+     for (j in 1:ncol(cor.mat)){
+        if (abs(cor.mat[i,j]) >= 0.4) {High_cor[i]=paste(rownames(cor.mat)[i], "-",
+                                                         colnames(cor.mat)[j])}
+ }
+ }
> High_cor <- High_cor[!is.na(High_cor)]

在这种情况下,相关 > .4 的变量是 V2 和 V5:

> High_cor
[1] "V2 - V5" "V5 - V2"

希望这可以帮助

于 2013-11-23T14:07:23.267 回答