R cor(),method=";皮尔逊";返回NA,但方法=";“斯皮尔曼”;返回值。为什么?

R cor(),method=";皮尔逊";返回NA,但方法=";“斯皮尔曼”;返回值。为什么?,r,correlation,R,Correlation,我使用R在一个非常大的数据矩阵上运行关联,该矩阵的维数约为10000 x 15000(事件x样本)。此数据集包含范围为-15:15、NA、NaN、inf和-inf的浮点值。为了简化问题,我选择一次处理矩阵的两行,将它们称为vector1、vector2。命令写在下面: CorrelationSpearman = cor(vector1,vector2, method="spearman",use="pairwise.complete.obs") CorrelationPearson = cor(

我使用R在一个非常大的数据矩阵上运行关联,该矩阵的维数约为10000 x 15000(事件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。皮尔曼值的相关性似乎没有问题。我已经检查了矩阵维度是否正确,并且对较小的数据进行了测试,测试结果良好。发生这种情况的一些可能原因是什么?

依赖于估计均值和(co)方差。 无穷大的值会导致无穷大的均值和无穷大的方差,从而破坏计算。 而且相关系数是基于等级的,因此可以很好地处理无限值的排序(但要注意样本中的绑定值!)

尝试:

>lix 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), ...)

>inf2NA
Inf
将导致
Pearson's
出现问题。检查cor(c(1:3,Inf),1:4,method=“pearson”);cor(c(1:3,Inf),1:4,method=“spearman”)
。我假设斯皮尔曼的是可以的,因为可以对Inf进行排名
> inf2NA <- function(x) { x[is.infinite(x)] <- NA; x }
> cor(inf2NA(vector1), inf2NA(vector2), ...)