【问题标题】:Manually calculate a pearson correlation in R?手动计算 R 中的皮尔逊相关性?
【发布时间】:2020-04-20 08:47:01
【问题描述】:

我正在尝试计算两个数据向量之间的皮尔逊相关性。

x = c(5,5,4,5,5,5)
y = c(0,5,0,3,5,4)
mx = mean(x)
my = mean(y)
newx = c(x-mx)
newy = c(y-my)
corr = (newx%*%t(newy)/sqrt((newx^2)%*%(sqrt(newy^2)))

我的第一个主要问题是,这种相关性是通过忽略 0 值来计算的。但是,如果我完全省略它们,我不相信我的最终计算是可能的。

如果您知道更优雅的编码方式,或者我做错了什么,我将不胜感激。

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    你有几个错误。首先,您缺少右括号。二是分子倒数。您想要第一个组件的转置,而不是第二个。而且你忘了对分母求和。

    c(t(newx) %*% newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
    #[1] 0.5991713
    
    cor(x, y)
    #[1] 0.5991713
    

    或者,您可以使用crossprod

    crossprod(newx, newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
              [,1]
    [1,] 0.5991713
    

    【讨论】:

    • sum(newx*newy)/sqrt(sum(newx^2)*sum(newy^2)) 简单一点。
    • 感谢您的帮助。但是,我现在在使用第一行代码时遇到错误。它声称 t(newx) %*% newy 有不符合规定的协议
    • 您是否在使用您提供的玩具数据?您是否准确复制并粘贴了代码?
    猜你喜欢
    • 2016-08-12
    • 2012-11-18
    • 2020-05-23
    • 2019-12-14
    • 2018-07-23
    • 2022-01-25
    • 2014-11-13
    • 2017-03-17
    • 2013-10-12
    相关资源
    最近更新 更多