如何用cor()函数得到相关矩阵?

时间:2014-09-09 17:53:07

标签: r matrix correlation

我在Windows系统中使用R的基础包。

我有两个矩阵,它们有一列数值。两个矩阵的大小都相同。

我使用以下代码

c<-cor(x,y)

其中xy是大小为10 * 1的矩阵,但c的大小为1 * 1

输出只是一个值。当我使用cor函数时,它应该给出一个至少等于矩阵大小的输出吗?

如果我使用summary(c),我的输出应该是这样的:

    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -0.2110 -0.0500  0.0946  0.1250  0.2680  0.7630

但我得到了:

 Min.   :0.06088  
 1st Qu.:0.06088  
 Median :0.06088  
 Mean   :0.06088  
 3rd Qu.:0.06088  
 Max.   :0.06088 

2 个答案:

答案 0 :(得分:1)

您需要将X和Y放在data.frame或matrix中才能使用。这是一个简单的例子

set.seed(4)  #so that we have the same random numbers
X<-rnorm(100)
Y<-rnorm(100)
W<-cor(data.frame(X,Y))
W

           X          Y
X  1.0000000 -0.1338078
Y -0.1338078  1.0000000

as.vector(W)
[1]  1.0000000 -0.1338078 -0.1338078  1.0000000

如果您愿意,可以将cor包裹在as.vector中以将其存储为矢量。

答案 1 :(得分:0)

那么,
    首先,根据作业,你应该返回一个相关向量。其长度等于监视器的数量,满足阈值要求。(完整案例的数量大于阈值)。     让 df 是一个data.frame,它包含来自所有监视器的数据,其完整案例的数量大于阈值(希望你自己可以得到这个 df 和read.csv ,rbind功能)。所以:
    让我们通过监视器ID对该数据框进行分组:

df_gb<-group_by(df,ID)  

现在我们可以计算硫酸盐和硝酸盐油田之间的相关性,并按ID汇总并同时创建新的油田(变量) Cor

dfsum<-summarize(df_gb,Cor=cor(sulfate,nitrate,use = "pairwise.complete.obs"))  

然后我们只在 dfsum 数据框中留下 Cor 字段:

dfsum<-select(dfsum,Cor)  

让我们排除NA结果(因为我们在函数的示例输出中看不到NA摘要,需要创建,不是吗?)

dfsum<-filter(dfsum,is.na(Cor)==FALSE)  

最后我们应该返回数字向量(根据作业):

return(dfsum$Cor)  

这就是全部,请不要忘记

library(dplyr)  

在使用 group_by之前,选择,过滤功能。