处理相关性计算的缺失值

Del*_*ine 30 r missing-data correlation na

我有一个巨大的矩阵,有很多缺失值.我想获得变量之间的相关性.

1.解决方案

cor(na.omit(matrix))
Run Code Online (Sandbox Code Playgroud)

比下面好吗?

cor(matrix, use = "pairwise.complete.obs")
Run Code Online (Sandbox Code Playgroud)

我已经选择了只有超过20%缺失值的变量.

2.哪种方法最有意义?

42-*_*42- 16

我会投票给第二个选项.听起来你有相当数量的缺失数据,所以你会寻找一个合理的多重插补策略来填补空间.请参阅Harrell的文章"回归建模策略",获取有关"如何正确执行此操作"的大量指导.


Iai*_*ain 12

我认为第二种选择更有意义,

您可以考虑在Hmisc包中使用rcorr功能.

它非常快,只包括成对完整的观察.返回的对象包含一个矩阵

  1. 相关分数
  2. 用于每个相关值的观察次数
  3. 每个相关的p值

这意味着您可以基于少量观察(无论该阈值适合您)或基于p值忽略相关值.

library(Hmisc)
x<-matrix(nrow=10,ncol=10,data=runif(100))
x[x>0.5]<-NA
result<-rcorr(x)
result$r[result$n<5]<-0 # ignore less than five observations
result$r
Run Code Online (Sandbox Code Playgroud)


Tri*_*mus 6

对于未来的读者,被认为是危险的成对完全相关可能是有价值的,认为这cor(matrix, use = "pairwise.complete.obs")被认为是危险的,并提出了诸如此类的替代方案use = "complete.obs").

  • 我完全不能推荐那篇文章。作者建议展示一个反例,说明成对相关显然没有直观意义,但甚至没有提到相关系数的数学定义。考虑这个例子,只是作者演示的一个扩展:如果 A 和 B 同意所有观察,但 A 有 99 个观察,B 只有 97,pairwise-cor 给出的相关性为 1 真的很荒谬,你会得出结论吗?作者认为NA的相关性更合理? (3认同)