减少数据集与NA的相关性

时间:2016-03-15 11:05:32

标签: r correlation

考虑下面的示例数据:

a=c(NA,1,NA)
b=c(1,2,4)
c=c(0,1,0)
d=c(1,2,4)
df=data.frame(a,b,c,d)

目标是找出NA应减少相关性的2列之间的相关性。 NA表示事件未发生。

有没有办法在相关性中使用NA,以便降低相关值?

> cor(df$a, df$b)
[1] NA 

或者我应该看一些其他的数学函数?

3 个答案:

答案 0 :(得分:2)

  

有没有办法在相关性中使用NA,以便下拉相关值?

这是一种使用NA值来降低相关性的方法。为了演示,我使用了一些良好大小的不同数据。

a <- sort(ruinf(10))
b <- sort(ruinf(10))
## Sorting so that there is some good correlation between them.
## Now making some values NA deliberately
a[c(9,10)] <- NA
cor(a[1:8],b[1:8])
## [1] 0.890465    #correlation value is high

## Lets assign a to c and Fill NA values with something
c <- a
## using mean causes no change to numerator but increases denominator.
c[is.na(a)] <- mean(a, na.rm=T)     cor(c,b)
## [1] 0.6733387

请注意,当您用均值替换所有NA项时,分子没有变化,因为在附加项中乘以零。然而,分母为b添加了更多值,以便相关值降低。此外,数据中的NA越多,相关性就越低。

答案 1 :(得分:2)

这个问题没有数学意义,因为没有发生的事件之间没有相关性。没有事件发生就无法减少相关性。除了转换数据之外,没有任何功能可以做到这一点。

您可以用Kuj建议的@Ujjwal替换NA值,但这只是数据操作而不是预定义函数

查看cor ?cor的帮助文件,并使用cor(df$a,df$b,use="pairwise.complete.obs"这样的函数,您可以看到NA值通常应该如何处理它们被删除的位置,并且对相关性没有影响本身

?cor output

  

如果使用&#34;所有&#34;,NAs将在概念上传播,即,只要其贡献的观察值之一为NA,结果值就是NA。

     

如果使用&#34; all.obs&#34;,则缺少观察的存在将产生错误。如果使用的是&#34; complete.obs&#34;然后通过逐个删除来处理缺失值(如果没有完整的情况,则会产生错误)。

     

&#34; na.or.complete&#34;除非没有完整的案例,否则给出NA。最后,如果使用具有值

     

&#34; pairwise.complete.obs&#34;然后,使用对这些变量的所有完整观察对来计算每对变量之间的相关性或协方差。这可以导致不是半正定的协方差或相关矩阵,以及如果该变量对没有完整的对,则导致NA条目。对于cov和var,&#34; pairwise.complete.obs&#34;只适用于&#34; pearson&#34;方法。注意(相当于)var(double(0),use = *)给出NA使用=&#34;所有&#34;和&#34; na.or.complete&#34;,并在其他情况下给出错误。

答案 2 :(得分:0)

我想,没有简单的解释。 。您必须删除NA中的数据,以及列b,c,d中的相应数据。然后计算相关性。您可以检查每个数据集中是否有相应的NA(a,b,c,d)

在您的示例中,您可以使用b,c,d的所有组合计算核心化,但是如果您想要cor(a,b)的计算cor,则必须仅选择a和b中没有NA的行。也许当你计算这个cor(a,b)乘以(a和b中NA的行数)除以数据集中所有行的数量

a=c(NA,1,NA)
b=c(1,2,4)
c=c(0,1,0)
d=c(1,2,4)
df=data.frame(a,b,c,d)