首页 > 解决方案 > 在 R 中计算相关系数时的问题

问题描述

我试图计算 R 中某些变量之间的相关系数。这里的问题是 R 可以读取数据但无法正确计算相关系数,如随附的屏幕截图所示。

R 代码和结果

以前我能够使用与图中所示相同的代码从其他 excel 文件数据中计算 R 中的相关系数。这里有什么问题?

标签: rexcel

解决方案


尽管您提供的数据/代码是图像,但我想我可以为这种情况提供解决方案。

首先说明问题的原因,您的相关矩阵看起来很奇怪的原因是在您的 和 中complete.obs执行相同的工作,每个变量中都只存在两行。na.omitdata_corNA

例如,让我们dummy如下定义数据并查看结果。

dummy <- data.frame(
  N0 = rnorm(10),
  N1 = runif(10),
  N2 = c(.3,.4,rep(NA,8)),
  N3 = rchisq(10,3)
)
dummy

            N0         N1  N2       N3
1  -1.38246690 0.38116217 0.3 5.144132
2   0.77977538 0.06383890 0.4 3.195502
3  -1.08709820 0.28024669  NA 3.890352
4   0.34685457 0.71857164  NA 2.816047
5  -1.58245449 0.39671123  NA 5.136402
6  -0.38614131 0.02491107  NA 3.103611
7  -1.38644384 0.86949460  NA 4.255433
8  -0.87290110 0.39692126  NA 1.454483
9   0.01181121 0.31394631  NA 2.802918
10 -0.97159797 0.05254728  NA 1.458610

cor(dummy, method = "pearson", use = "complete.obs")
   N0 N1 N2 N3
N0  1 -1  1 -1
N1 -1  1 -1  1
N2  1 -1  1 -1
N3 -1  1 -1  1

cor(na.omit(dummy))
   N0 N1 N2 N3
N0  1 -1  1 -1
N1 -1  1 -1  1
N2  1 -1  1 -1
N3 -1  1 -1  1

如您所知,相关系数是如何计算的,如果每个变量仅存在两个样本,则 ( x1,x2vs y1,y2) 是1-1(假设x1 != x2and y1 != y2)。

因此,在这种情况下,如果您的目的是使用具有完整观察的样本,则该结果可能正确。

它必须是1-1反对,N4但如果您需要其他人之间适当的相关系数,请尝试使用pairwise.complete.obs参数 for use =

cor(dummy, method = "pearson", use = "pairwise.complete.obs")

           N0         N1 N2         N3
N0  1.0000000 -0.2408998  1 -0.4259661
N1 -0.2408998  1.0000000 -1  0.3043064
N2  1.0000000 -1.0000000  1 -1.0000000
N3 -0.4259661  0.3043064 -1  1.0000000

在这种情况下,这将为其他变量提供正确的结果。

cor(dummy[,-3])

           N0         N1         N3
N0  1.0000000 -0.2408998 -0.4259661
N1 -0.2408998  1.0000000  0.3043064
N3 -0.4259661  0.3043064  1.0000000

推荐阅读