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



我正在使用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值似乎没有问题。我已经检查了矩阵维度是否正确,并且我对较小的数据运行了测试,这些测试工作正常。发生这种情况的可能原因是什么?

皮尔逊相关系数依赖于估计均值和(协)方差。无限值导致无限均值和无限方差,从而破坏计算。Spearman 和 Kendall 相关系数是基于秩的,因此可以很好地处理无限值的排序(但要注意样本中的捆绑值!

尝试:

> 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 情况。

最新更新