2014-07-23 115 views
0

是否有所有成員之間施加COR()的更好的方法,除了使用for環其他:R:申請相關分佈式

crosses1 = colnames(data) 
crosses1 = crosses1[-(match("Date", crosses1))] 
crosses2 = rev(crosses1) 
crosses = matrix(nrow = length(crosses1), ncol = length(crosses2), dimnames = list(crosses1, crosses2)) 

for(cross1 in crosses1){ 
    for(cross2 in crosses2){ 
     corValue = cor(data[,cross1], data[,cross2], use = "pairwise.complete.obs", method = "pearson") 
     crosses[cross1,cross2] = corValue 
    } 
} 

data僅僅是一個矩陣,其列是碼,並且行是這些代碼在特定日期的不同值。所以,我想要在每個代碼之間有一個互相關。

道歉我缺乏經驗,但我學習R.

感謝。

+2

如果您將矩陣傳遞給它,'cor(...)'自動爲您自動設置。請參閱[本文](http://stackoverflow.com/questions/24622903/not-sure-what-do-call-is-doing-here-in-r/24623280#24623280)。 – jlhoward

回答

1

cor已經這樣做了,只需將一個矩陣傳遞給像下面這樣的函數即可。

X <- replicate(4, rnorm(10)) # Create some toy data 
rownames(X) <- paste0("Obs", 1:nrow(X)) 
colnames(X) <- paste0("Var", 1:ncol(X)) 
print(X) 
#    Var1  Var2  Var3  Var4 
#Obs1 2.28277343 -0.2554098 -1.6855545 -0.88925980 
#Obs2 0.18893139 1.8864308 -2.3971334 -0.79902474 
#Obs3 0.15952813 -0.3048320 -2.2321410 -0.96378752 
#Obs4 -0.50163072 1.9142441 0.2959703 0.19532908 
#Obs5 0.04480382 0.8919782 -1.5025163 1.28883810 
#Obs6 -1.27758040 -1.2707019 -0.3497341 1.19329181 
#Obs7 -0.01028843 -0.9573063 0.3820127 -0.90302080 
#Obs8 0.30440036 0.6356221 -0.8722866 0.67146318 
#Obs9 2.10757600 0.6366983 -0.5190173 -0.51735927 
#Obs10 2.93849016 0.8399872 1.3714519 0.09522004 

cor(X) 
#   Var1  Var2  Var3  Var4 
#Var1 1.0000000 0.14661593 0.19663054 -0.38305468 
#Var2 0.1466159 1.00000000 -0.06886487 0.03659647 
#Var3 0.1966305 -0.06886487 1.00000000 0.23375487 
#Var4 -0.3830547 0.03659647 0.23375487 1.00000000 
+0

我明白了。我試過了,但它並沒有給我像RapidMiner那樣的結果,事實上它使用Pearson。我的意思是,我用RapidMiner得到每個代碼與其他代碼的數量相關性,但是使用'cor(data)',R得到的結果是充滿了'NA'。當我執行'for'循環時,R中的結果幾乎與RapidMiner中的結果相同。如果您想嘗試RapidMiner和R之間的區別,我可以給您**數據** csv和** R **代碼。 – nic

+1

因此,您的數據必須具有「NA」。你正在使用'cor(data,use =「pairwise.complete.obs」,method =「pearson」)'? – jlhoward

+0

@nic請參閱@jihoward的評論。這種差異可能是由於那時的「NA」。你可以看到用'?cor'處理'NA'的不同方法。 –