R cor(),method =“pearson”返回NA,但method =“spearman”返回值。为什么?

时间:2014-11-20 19:10:46

标签: r correlation

我正在使用R在非常大的数据矩阵上运行相关,其大小尺寸为10,000 x 15,000(事件x样本)。该数据集包含范围为-15:15,NA,NaN,inf和-inf的浮点值。为了简化问题,我选择一次使用两行矩阵,称之为vector1,vector2。命令如下:

CorrelationSpearman = cor(vector1,vector2, method="spearman",use="pairwise.complete.obs")
CorrelationPearson = cor(vector1,vector2,method="pearson",use="pairwise.complete.obs")

对于矩阵中的大多数但不是所有行向量,我得到CorrelationPearson = NA。 CorrelationSpearman值似乎没有问题。我已经检查过矩阵尺寸是否正确,并且我已经对较小的数据运行测试,这些数据工作正常。出现这种情况的可能原因是什么?

1 个答案:

答案 0 :(得分:1)

Pearson correlation coefficient依赖于估算均值和(共)方差。 无限的值导致无限的手段和无限的方差,这会破坏计算。 SpearmanKendall相关系数是基于排名的,因此可以使用无限值​​处理排序(但请注意样本中的绑定值!)。

尝试:

> lix <- is.infinite(vector1) | is.infinite(vector2)
> cor(vector1[!lix], vector2[!lix], method = "pearson", use = "pairwise.complete.obs")

这只会删除任何具有无限值的对。 更常见的是,这样的函数很有用:

> inf2NA <- function(x) { x[is.infinite(x)] <- NA; x }
> cor(inf2NA(vector1), inf2NA(vector2), ...)

只是将无限值转换为NA,然后您的use参数可以根据需要处理这些NA情况。