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

2023-11-30

我正在使用 R 在尺寸近似为 10,000 x 15,000(事件 x 样本)的非常大的数据矩阵上运行相关性。该数据集包含范围为 -15:15、NA、NaN、inf 和 -inf 的浮点值。为了简化问题,我选择一次处理矩阵的两行,将它们称为向量1、向量2。命令写如下:

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

对于矩阵中的大多数(但不是全部)行向量,我得到 CorrelationPearson=NA。 CorrelationSpearman 值似乎没有问题。我已经检查了矩阵尺寸是否正确,并且我已经对较小的数据进行了测试,效果很好。出现这种情况的可能原因有哪些?


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

Try:

> 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,然后你的useargument 可以按照您认为合适的方式处理那些不适用的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐