【发布时间】:2011-04-17 11:21:38
【问题描述】:
我在 data.frame 上运行 cor() 并使用所有数值,结果如下:
price exprice...
price 1 NA
exprice NA 1
...
因此,结果表中的每个值都是 1 或 NA。为什么出现 NAs 而不是有效的关联?
【问题讨论】:
标签: r correlation
我在 data.frame 上运行 cor() 并使用所有数值,结果如下:
price exprice...
price 1 NA
exprice NA 1
...
因此,结果表中的每个值都是 1 或 NA。为什么出现 NAs 而不是有效的关联?
【问题讨论】:
标签: r correlation
使用use 参数告诉相关性忽略NA,例如:
cor(data$price, data$exprice, use = "complete.obs")
【讨论】:
1s 是因为一切都与自身完全相关,NAs 是因为您的变量中有 NAs。
当存在缺失值时,您必须指定希望 R 如何计算相关性,因为默认情况下仅计算具有完整信息的系数。
您可以通过将 use 参数更改为 cor 来更改此行为,有关详细信息,请参阅 ?cor。
【讨论】:
如果存在方差为零的属性(所有元素相等),也会出现 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
【讨论】:
非常简单正确的答案
使用 use 参数告诉相关性忽略 NA,例如:
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 实际上可能是由于两个原因。一是您的数据中有一个 NA。另一个是由于其中一个值是恒定的。这导致标准偏差等于 0,因此 cor 函数返回 NA。
【讨论】: