r - 手动计算 R 中的皮尔逊相关性?
问题描述
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 值来计算的。但是,如果我完全省略它们,我不相信我的最终计算是可能的。
如果您知道一种更优雅的编码方式,或者我做错了什么,我将不胜感激。
解决方案
你有几个错误。首先,您缺少右括号。二是分子倒数。您想要第一个组件的转置,而不是第二个。你忘了把分母相加。
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
推荐阅读
- mysql - 为什么当 Hangfire 并行处理多个作业时 MySQL InnoDB 会产生如此多的死锁?
- java - Apache Camel JMS 异常循环
- sql-server - SQL Server - 条件/过滤外键。另一种方式
- java - 编译java文件创建serveclass(tomcat学习)
- python - Python 3.7:检查类型注释是否是泛型的“子类”
- python - Python Vscode 扩展 - 无法更改远程 jupyter notebook 内核
- powerbi - 在 Power BI 中使用带有日期的 switch true
- c++ - 将 std::map 复制到成对的 std::vector 中
- button - Roblox Studio:框架没有淡出
- python - Python-如何替换列表中列表项中的字符