我正在尝试扩展问题的答案R: filtering data and calculating correlation。
要获得一年中每个月(1 = 1月)的温度和湿度的相关性,我们必须每个月(12次)做同样的事情。
cor(airquality[airquality$Month == 1, c("Temp", "Humidity")])
有没有办法每个月自动完成?
在我的情况下,我有超过30个群体(不是几个月但是物种),我想测试它们的相关性,我只是想知道是否有比一个一个更快的方法。
谢谢!
答案 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)
给出Month
,unname(x)
给出相关性。
非常感谢!它工作得非常完美!我试图找出如何获得每个相关性
R^2
的向量,但我不能......有什么想法?
cor(x, y)
就像拟合标准化线性回归模型一样:
coef(lm(scale(y) ~ scale(x) - 1)) ## remember to drop intercept
这个简单的线性回归中的R平方就是斜率的平方。以前我们有x
每组存储相关性,现在R平方只是x ^ 2
。