【问题标题】:What is the difference between cor and cor.test in RR中的cor和cor.test有什么区别
【发布时间】:2013-01-17 15:17:55
【问题描述】:

我有一个数据框,它的列是实验的不同样本。我想找到这些样本之间的相关性。所以样本 v2 和 v3 之间的相关性,样本 v2 和 v4 之间的相关性,...... 这是数据框:

> head(t1)
      V2          V3          V4         V5         V6
1 0.12725011 0.051021886 0.106049328 0.09378767 0.17799444
2 0.86096784 1.263327211 3.073650624 0.75607466 0.92244361
3 0.45791031 0.520207274 1.526476608 0.67499102 0.49817761
4 0.00000000 0.001139721 0.003158557 0.00000000 0.00000000
5 0.13383965 0.098943019 0.099922146 0.13871867 0.09750611
6 0.01016334 0.010187671 0.025410170 0.00000000 0.02369374
> nrow(t1)
[1] 23367

如果我为此数据帧运行 cor 函数以获取样本(列)之间的相关性,我得到所有样本的 NA:

> cor(t1, method= "spearman")
V2 V3 V4 V5 V6
V2  1 NA NA NA NA
V3 NA  1 NA NA NA
V4 NA NA  1 NA NA
V5 NA NA NA  1 NA
V6 NA NA NA NA  1

但是如果我运行这个:

> cor.test(t1[,1],t1[,2], method="spearman")$estimate
rho 
0.92394 

这是不同的。为什么会这样?获得这些样本之间相关性的正确方法是什么? 提前谢谢你。

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    您的数据包含NA 值。

    来自?cor

    如果 use 是“一切”,则 NA 将在概念上传播,即 每当其贡献之一时,结果值将是 NA 观察结果是 NA。

    来自?cor.test

    na.action 一个函数,它指示当数据发生时应该发生什么 包含 NA。默认为 getOption("na.action")。

    在我的系统上:

    getOption("na.action")
    [1] "na.omit"
    

    使用which(!is.finite(t1)) 搜索有问题的值,使用which(is.na(t1)) 搜索NA 值。如果您的数据中有 Inf 值,cor 将返回 NaN

    【讨论】:

    • 如何检查我的数据框是否包含 NA?我认为它也包含大量 Inf 值。也会有影响吗?另一个问题是我认为 cor.test 是成对相关的,它需要两个参数来计算。我认为我应该使用的是 cor 而不是 cor.test,但我仍然不确定它是否是找到数据帧样本(列)之间相关性的正确函数。
    • @hora 查看我对答案的编辑并阅读帮助页面。您可以使用*apply 函数与cor.test 进行成对比较。
    • 感谢@Roland。现在我检查我的数据框,实际上只有一行有 NA,我认为只有与该行相关的值应该是 NA 但不是全部。我还替换了 Inf 值,但结果仍然是 NA。实际上我的问题是,为什么当我使用 cor.test 和相同的数据集只比较两个样本时,结果不是 NA。但是当我对整个数据框使用这个“cor”时,我得到了 NA。 :(
    • @hora 我们可以整天猜测这个。通过一个简单的可重现示例向我们展示数据或重现您的问题。
    • @hora 您关联的不是行,而是列。请尝试理解我写的内容并仔细阅读帮助页面。
    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 2011-08-12
    • 2021-02-23
    • 2010-11-19
    • 1970-01-01
    • 2020-08-23
    • 2021-10-21
    相关资源
    最近更新 更多