【问题标题】:R: Calculating Pearson correlation and R-squared by groupR:按组计算 Pearson 相关性和 R 平方
【发布时间】:2016-11-24 19:35:58
【问题描述】:

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

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

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

有没有办法每月自动执行?

在我的例子中,我有超过 30 个组(不是月份,而是物种),我想测试它们的相关性,我只是想知道是否有比逐个测试更快的方法。

谢谢!

【问题讨论】:

    标签: r dataframe correlation


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

    【讨论】:

    • 非常感谢!它工作得非常完美!我也试图弄清楚如何获得每个相关性的 R^2 向量,但我不能......有什么想法吗?
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多