# 2 R语言相关分析中的缺失值处理原理

• pairwise：使用成对样本计算。
• complete/complete.obs：必须选择完整的样本计算，目前没发现这两个有什么区别。
• pairwise.complete.obs：通过在成对的基础上省略具有缺失值的行而形成的向量为每对列计算相关性。
• everything：不对缺失值做任何处理，因此缺失值结果会直接传递给相关系数矩阵与p值计算。也就是说含有缺失值NA的变量无法计算出相关系数与p值。

If use is “everything”, NAs will propagate conceptually, i.e., a resulting value will be NA whenever one of its contributing observations is NA. If use is “all.obs”, then the presence of missing observations will produce an error. If use is “complete.obs” then missing values are handled by casewise deletion (and if there are no complete cases, that gives an error).  “na.or.complete” is the same unless there are no complete cases, that gives NA. Finally, if use has the value “pairwise.complete.obs” then the correlation or covariance between each pair of variables is computed using all complete pairs of observations on those variables. This can result in covariance or correlation matrices which are not positive semi-definite, as well as NA entries if there are no complete pairs for that pair of variables. For cov and var, “pairwise.complete.obs” only works with the “pearson” method. Note that (the equivalent of) var(double(0), use = *) gives NA for use = “everything” and “na.or.complete”, and gives an error in the other cases.

# 3 “Pairwise-complete correlation considered dangerous”案例

x <- matrix(c(-2,-1,0,1,2,1.5,2,0,1,2,NA,NA,0,1,2),5)

#数据转换xu <- data.frame(x)
colnames(xu) <- c("a", "b", "c")#计算对应的相关系数矩阵corr.test(xu, use = "everything", , adjust = 'none')
corr.test(xu, use = "pairwise", adjust = 'none')
corr.test(xu, use = "complete.obs", adjust = 'none')
corr.test(xu, use = "pairwise.complete.obs", adjust = 'none')

use等于everything时候的输出结果。所谓的传播就是，含有NA的第三列与第一列和第二列的相关系数只能为NA，只要数据有NA就无法计算像相关系数。

use等于pairwise时候的输出结果，可以发现a和b的相关系数为0，a，b和c的相关系数为1。那么我们来解析下具体的计算。



plot(xu[,1], xu[,2], xlab = "a", ylab = "b", col = 'red', pch = 16)
cov(xu[,1], xu[,2])

pairwise计算的方式如下：由于a和b是没有任何缺失值，5个值可以完全配对，所以在计算的时候a和b的相关系数是基于这5对数据计算，而对于a和c以及b和c的相关系数计算，由于c有缺失数据，可以完全配对的数据仅有三对，仅仅基于这三对配对样本计算相关系数。这样子对应计算出来的相关系数就是1了，因为这些数据完全一致。因此就像Lewis先生说的一样，由于在计算相关系数的时候，样本不统一（在本案例中a和b的相关系数计算是5对配对样本，a和c以及b和c的相关系数计算是3对配对样本），事实上这样计算的相关系数不具备可比性，也可能混淆原来数据的关系。

complete.obs的计算方式：由于c有缺失数据，在计算前必须去除掉所有NA的行，也就是去除掉第一行和第二行的所有数据再进行相关系数的计算。这样子所有a，b，c三个变量都仅有3个数据。而且是全部一致的变量。因此这就是完美的完全相关（r=1）。

Note-of-Applied-Statistics-with-R

Pairwise-complete correlation considered dangerous

http://blog.sciencenet.cn/blog-3247241-1226067.html

## 相关博文

GMT+8, 2021-4-23 15:18