先了解一下相关性计算公式:
相关性系数R=协方差/两个变量标准差的乘积
R中公式 cor(x,y) = cov(x,y)/(sd(x)*sd(y))
R语言计算相关系数时出现NA的原因一般有两个:
- 数据中有NA值
> > x <- c(1,2,3)
> y <- c(4,NA,4)
> cor(x,y)
[1] NA
> cov(x,y)/(sd(x)*sd(y))
[1] NA
- 用于计算相关性的两个向量中至少有一个标准差为0(向量中元素均为同样值时sd=0),导致计算相关系数R时分母为0,进而导致R计算为NA。
#正常情况
> x <- c(1,2,3)
> y <- c(5,5,6)
> sd(x)
[1] 1
> sd(y)
[1] 0.5773503
> cor(x,y)
[1] 0.8660254
> cov(x,y)/(sd(x)*sd(y))
[1] 0.8660254
#有一个标准差为0的情况
> x <- c(1,2,3)
> y <- c(4,4,4)
> sd(x)
[1] 1
> sd(y)
[1] 0
> cor(x,y)
[1] NA
Warning message:
In cor(x, y) : 标准差为零
> cov(x,y)/(sd(x)*sd(y))
[1] NaN