2013-07-17 61 views
0

我正在處理一個大型數據集,我懷疑它存在多重共線性問題,因爲var-協方差矩陣有一個負的特徵值(並且與其餘部分相比真的很小);也比最大特徵值/分特徵值> 3000;R中的多重性測試

我的問題是:R中是否有任何測試程序只是爲了確定哪些變量是多餘的(我不適用於迴歸模型);我可能會做線性迴歸對圖或使用對(數據)命令,但我真的很感謝一些數值測試的幫助,因爲我有200個變量和圖形在這個問題上不是很好的決策支持。

+0

一般來說,獲得有用的反饋,你需要提供一個[重複的例子, ](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)並展示一些你已經嘗試過的東西。 – Thomas

回答

0

如果我undesrtood正確,您在找什麼:

如果你心裏有你想用排除一些變量,你可以試試下面的

在這裏的例子我是一個相關閾值產生隨機矩陣

> 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語句替換要用於選擇冗餘變量的閾值(這裏我使用.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" 

希望這有助於