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;它们对于“按组”操作非常有用,尽管它们不是唯一的选择。另请阅读?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-squared 只是 x ^ 2。