R:按组计算Pearson相关性和R平方

时间:2016-11-24 19:35:58

标签: r dataframe correlation

我正在尝试扩展问题的答案R: filtering data and calculating correlation

要获得一年中每个月(1 = 1月)的温度和湿度的相关性,我们必须每个月(12次)做同样的事情。

cor(airquality[airquality$Month == 1, c("Temp", "Humidity")])

有没有办法每个月自动完成?

在我的情况下,我有超过30个群体(不是几个月但是物种),我想测试它们的相关性,我只是想知道是否有比一个一个更快的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

cor(airquality[airquality$Month == 1, c("Temp", "Humidity")])

为您提供2 * 2协方差矩阵而不是数字。我打赌你想要每个Month一个号码,所以请使用

## cor(Temp, Humidity | Month)
with(airquality, mapply(cor, split(Temp, Month), split(Humidity, Month)) )

你将获得一个载体。

阅读?split?mapply;它们对于#34;非常有用#34;操作,虽然它们不是唯一的选择。同时阅读?cor,并比较

之间的差异
a <- rnorm(10)
b <- rnorm(10)
cor(a, b)
cor(cbind(a, b))

您在问题中链接的答案是执行与cor(cbind(a, b))类似的操作。

可重复的示例

R中的airquality数据集没有Humidity列,因此我将使用Wind进行测试:

## cor(Temp, Wind | Month)
x <- with(airquality, mapply(cor, split(Temp, Month), split(Wind, Month)) )

#         5          6          7          8          9 
#-0.3732760 -0.1210353 -0.3052355 -0.5076146 -0.5704701 

我们得到一个命名向量,names(x)给出Monthunname(x)给出相关性。

  

非常感谢!它工作得非常完美!我试图找出如何获得每个相关性R^2的向量,但我不能......有什么想法?

cor(x, y)就像拟合标准化线性回归模型一样:

coef(lm(scale(y) ~ scale(x) - 1))  ## remember to drop intercept

这个简单的线性回归中的R平方就是斜率的平方。以前我们有x每组存储相关性,现在R平方只是x ^ 2