我在R中实现了自己的关联函数.令人惊讶的是,当使用内置的cor函数时,我得到的结果略有不同.当观测数量足够大时,差异似乎就消失了.

我的职能:

corr = function(X) {
  Q = X - colMeans(X)
  S_ = colSums(Q**2)
  S = sqrt(S_ %*% t(S_))
  covarr = t(Q) %*% Q
  corrr_ = covarr / S
  return(corrr_)
}

library(mvtnorm)
set.seed(247)
X = rmvnorm(10, sigma = matrix(c(1,0.8,0.8,1), ncol=2)) # change 10 to 100, 1000, or 10000
corr(X)
cor(X)

对于n=10,我得到了0.8490966,而不是0.8465363,所以变化是在小数点后3位.对于n=1000,我得到0.7960206,而不是0.7960925,所以变化是在小数点后5位.

推荐答案

函数的第一行应该是这样的,因为R逐列存储矩阵,而不是逐行存储

Q = t(t(X) - colMeans(X))

Q = X - matrix(colMeans(X), nrow(X), ncol(X), byrow = TRUE)

Q = scale(X, TRUE, FALSE)

或 even this which is not the same Q but in the end gives the same answer

Q = scale(X)

If we use cov2c或 from the base of R then

c或r = function(X) {
  Q = scale(X)
  cov2c或(crossprod(Q))
}

R相关问答推荐

使用ggcorrplot删除值,但保留不重要相关性的 colored颜色

修改dDeliverr中列表列的最后一个元素

在边界外添加注释或标题

在R中列表的结尾添加数字载体

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

从开始时间和结束时间导出时间

自动变更列表

如何在区分不同条件的同时可视化跨时间的连续变量?

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

我正在努力用R计算数据集中的中值逐步距离

展开对数比例绘图的轴(添加填充)

在列表中排列R数据框中的列顺序

按列中显示的配对组估算NA值

在R中,如何将误差条放置在堆叠的每个条上?

创建在文本字符串中发现两个不同关键字的实例的数据框

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

从线的交点创建面

访问数据帧中未定义的列时出现R错误

数据集上的R循环和存储模型系数

如何使用grepl()在数据帧列表中 Select 特定字符串?