繁体   English   中英

关于在R中计算样本相关性的困惑

[英]Confusion about calculating sample correlation in r

我的任务是手动计算两个数据集(D $ Nload和D $ Pload)之间的样本相关性,然后将结果与R的内置cor()函数进行比较。

我计算与

cov(D$Nload,D$Pload, use="complete.obs")/(sd(D$Nload)*sd(D$Pload, na.rm=TRUE))

这给了我0.5693599的结果

然后我尝试使用R的cov()函数

cor(D[, c("Nload","Pload")], use="pairwise.complete.obs")

这给了我结果:

          Nload     Pload
Nload 1.0000000 0.6244952
Pload 0.6244952 1.0000000

这是不同的结果。 谁能看到我哪里出问题了?

发生这种情况的原因是,当您在单个向量上调用sd()时,它无法检查数据是否成对完成。 例:

x <- rnorm(100)
y <- rexp(100)
y[1] <- NA
df <- data.frame(x = x, y = y)

所以我们有

df[seq(2), ]
           x         y
1  1.0879645        NA
2 -0.3919369 0.2191193

我们看到第二行是成对完成的(用于计算的所有列都不是NA),但第一行却不是。 但是,如果仅在单列上计算sd() ,则它不包含有关这些对的任何信息。 因此,在您的情况下, sd(df$x)将使用所有可用数据,尽管它应避免第一行。

cov(df$x, df$y, use = "complete.obs") / (sd(df$x)*sd(df$y, na.rm=TRUE))
[1] 0.09301583

cor(df$x, df$y, use = "pairwise.complete.obs")
[1] 0.09313766

但是,如果您从计算中删除第一行,则结果是相等的

df <- df[complete.cases(df), ]
cov(df$x, df$y, use = "complete.obs") / (sd(df$x)*sd(df$y, na.rm=TRUE))
[1] 0.09313766
cor(df$x, df$y, use = "pairwise.complete.obs")
[1] 0.09313766

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM