【问题标题】:cor shows only NA or 1 for correlations - Why?cor 仅显示 NA 或 1 的相关性 - 为什么?
【发布时间】:2011-04-17 11:21:38
【问题描述】:

我在 data.frame 上运行 cor() 并使用所有数值,结果如下:

       price exprice...
price      1      NA
exprice   NA       1
...

因此,结果表中的每个值都是 1NA。为什么出现 NAs 而不是有效的关联?

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    使用use 参数告诉相关性忽略NA,例如:

    cor(data$price, data$exprice, use = "complete.obs")
    

    【讨论】:

      【解决方案2】:

      1s 是因为一切都与自身完全相关,NAs 是因为您的变量中有 NAs。

      当存在缺失值时,您必须指定希望 R 如何计算相关性,因为默认情况下仅计算具有完整信息的系数。

      您可以通过将 use 参数更改为 cor 来更改此行为,有关详细信息,请参阅 ?cor

      【讨论】:

        【解决方案3】:

        如果存在方差为零的属性(所有元素相等),也会出现 NA;例如:

        cor(cbind(a=runif(10),b=rep(1,10)))
        

        返回:

           a  b
        a  1 NA
        b NA  1
        Warning message:
        In cor(cbind(a = runif(10), b = rep(1, 10))) :
          the standard deviation is zero
        

        【讨论】:

        • 我遇到了这个问题。这在数学上似乎是可以理解的,相关性是根据方差计算的,因此 NA 表示零方差。但从逻辑上讲,即使方差为零,这两个元素仍然相关。不?例如,我试图查看每天谁的商品销售与温度相关。对于某些商品,只有一次销售。因此零方差。但 NA 似乎在逻辑上是错误的。
        【解决方案4】:

        非常简单正确的答案

        使用 use 参数告诉相关性忽略 NA,例如:

        cor(data$price, data$exprice, use = "complete.obs")
        

        【讨论】:

          【解决方案5】:

          就我而言,我使用了两个以上的变量,这对我来说效果更好:

          cor(x = as.matrix(tbl), method = "pearson", use = "pairwise.complete.obs")
          

          但是:

          如果 use 的值为“pairwise.complete.obs”,则每对变量之间的相关性或协方差是使用对这些变量的所有完整观测值对计算的。这可能会导致协方差或相关矩阵不是半正定的,如果这对变量没有完整的对,则会导致 NA 条目。

          【讨论】:

            【解决方案6】:

            NA 实际上可能是由于两个原因。一是您的数据中有一个 NA。另一个是由于其中一个值是恒定的。这导致标准偏差等于 0,因此 cor 函数返回 NA。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-04
              • 1970-01-01
              • 2021-10-26
              • 1970-01-01
              • 2013-08-31
              • 2017-12-31
              相关资源
              最近更新 更多