R:分布式地应用相关性

时间:2014-07-23 22:58:27

标签: r

除了使用for循环之外,是否有更好的方法在所有成员之间应用cor():

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。

感谢。

1 个答案:

答案 0 :(得分: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