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