为啥 Pearson 相关输出为 NaN?

Posted

技术标签:

【中文标题】为啥 Pearson 相关输出为 NaN?【英文标题】:Why Pearson correlation output is NaN?为什么 Pearson 相关输出为 NaN? 【发布时间】:2015-10-29 12:33:00 【问题描述】:

我正在尝试获取 R 中变量之间的 Pearson 相关系数。这是变量的散点图:

ggplot(results_summary, aes(x =D_in, y = D_ex)) + geom_point(col=ifelse(results_summary$FDR < 0.05, ifelse(results_summary$logF>0, "red", "green" ), "black"))

如您所见,变量之间的相关性非常好,因此我期望相关系数很高。但是,当我尝试获取 Pearson 相关系数时,我得到的是 NaN!

> cor(results_summary$D_in, results_summary$D_ex, method="spearman")
[1] 0.868079
> cor(results_summary$D_in, results_summary$D_ex, method="kendall")
[1] 0.6973086
> cor(results_summary$D_in, results_summary$D_ex, method="pearson")
[1] NaN

我检查了我的数据是否包含任何 NaN:

> nrow(subset(results_summary, is.nan(results_summary$D_ex)==TRUE)) 
[1] 0
> nrow(subset(results_summary, is.nan(results_summary$D_in)==TRUE)) 
[1] 0
> cor(results_summary$D_in, results_summary$D_ex, method="pearson", use="complete.obs")
[1] NaN

但这似乎不是导致 NaN 的原因。有人可以就这里可能发生的事情提供任何线索吗?

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

这似乎很奇怪。我的猜测是输入数据有问题(你提到的检查没有发现)。我建议你跑步:

任何(!is.finite(results_summary$D_in))

任何(!is.finite(results_summary$D_ex))

您也可以尝试手动计算 Pearson 相关性,以尝试了解问题出在哪里(在分子和/或分母中?):

pearson_num = cov(results_summary$D_in, results_summary$D_ex, use="complete.obs")

pearson_den = c(sd(results_summary$D_in), sd(results_summary$D_ex))

【讨论】:

&gt; any(!is.finite(results_summary$D_in)) [1] TRUE &gt; any(!is.finite(results_summary$D_ex)) [1] TRUE pearson_num [1] NaN pearson_den [1] NaN NaN 看来您在这里发现了问题。我有“无限”的价值观吗?这就是问题吧?如果是这样,有什么建议可以解决吗? 简单地摆脱这些值,并基本上使用您在开始时提供的命令:with(subset(results_summary, (is.finite(D_in)) &amp; (is.finite(D_ex))), cor(D_in, D_ex, method = "pearson", use = "complete.obs")) 完美运行!谢谢!!

以上是关于为啥 Pearson 相关输出为 NaN?的主要内容,如果未能解决你的问题,请参考以下文章

初学python,怎样用python做pearson相关系数的检验呢,求指导啊

SPSS中pearson(皮尔逊相关系数)看r值还是P值,确定相关性

请问spss在pearson相关性分析中r值的负值与正值代表啥意思?

皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)

如何在正确视图中创建 pearson 相关矩阵

数据框 Pandas 中所有行的 Pearson 相关性