为什么 Pearson 相关输出是 NaN?
Why Pearson correlation output is NaN?
我正在尝试获取 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 的原因。有人可以提供任何关于这里可能发生的事情的线索吗?
感谢您的宝贵时间!
这似乎很奇怪。我的猜测是输入数据存在一些问题(您提到的检查没有揭示)。我建议你 运行:
any(!is.finite(results_summary$D_in))
any(!is.finite(results_summary$D_ex))
您也可以尝试手动计算 Pearson 相关系数,以了解问题出在哪里(在分子 and/or 分母中?):
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))
我正在尝试获取 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 的原因。有人可以提供任何关于这里可能发生的事情的线索吗?
感谢您的宝贵时间!
这似乎很奇怪。我的猜测是输入数据存在一些问题(您提到的检查没有揭示)。我建议你 运行:
any(!is.finite(results_summary$D_in))
any(!is.finite(results_summary$D_ex))
您也可以尝试手动计算 Pearson 相关系数,以了解问题出在哪里(在分子 and/or 分母中?):
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))