cor仅显示NA或1的相关性-为什么?

cor仅显示NA或1的相关性-为什么?,r,correlation,R,Correlation,我在一个data.frame上运行cor(),其中包含所有数值,结果如下: price exprice... price 1 NA exprice NA 1 ... 因此,结果表中的每个值都是1或NA。为什么显示的是NAs而不是有效的相关性?1s是因为一切都与自身完美相关,而NAs是因为变量中存在NAs 当缺少值时,您必须指定希望R如何计算相关性,因为默认情况下只计算具有完整信息的系数 您可以使用use参数将此行为更改为cor,有关详细信息,请

我在一个
data.frame
上运行
cor()
,其中包含所有数值,结果如下:

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

因此,结果表中的每个值都是
1
NA
。为什么显示的是
NA
s而不是有效的相关性?

1
s是因为一切都与自身完美相关,而
NA
s是因为变量中存在
NA
s

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


您可以使用
use
参数将此行为更改为
cor
,有关详细信息,请参见
?cor

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

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

告诉相关性忽略带有
use
参数的NAs,例如:

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

NA实际上有两个原因。一是你的数据中有NA。另一个原因是有一个值是常数。这导致标准偏差等于零,因此cor函数返回NA。

非常简单且正确的答案


告诉相关性忽略NAs with use参数,例如:

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

在我的例子中,我使用了两个以上的变量,这对我更有效:

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

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


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