《R语言实战》自学笔记72-处理缺失数据的高级方法

第15章 处理缺失数据的高级方法

15.1 处理缺失值的步骤

一个完整的处理方法通常包含以下几个步骤:
(1)识别缺失数据;
(2)检查导致数据缺失的原因;
(3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值。

数据缺失的分类
统计学家通常将缺失数据分为三类。它们都用概率术语进行描述,但思想都非常直观。我
们将用sleep研究中对做梦时长的测量(有12个动物有缺失值)来依次阐述三种类型。
(1)完全随机缺失 若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。若12个动物的做梦时长值缺失不是由于系统原因,那么可认为数据是MCAR。注意,如果每个有缺失值的变量都是MCAR,那么可以将数据完整的实例看做是对更大数据集的一个简单随机抽样。
(2)随机缺失 若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。例如,体重较小的动物更可能有做梦时长的缺失值(可能因为较小的动物较难观察),“缺失”与动物的做梦时长无关,那么该数据就可以认为是MAR。此时,一旦你控制了体重变量,做梦时长数据的缺失与出现将是随机的。
(3)非随机缺失 若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NMAR)。例如,做梦时长越短的动物也更可能有做梦数据的缺失(可能由于难以测量时长较短的事件),那么数据可认为是NMAR。大部分处理缺失数据的方法都假定数据是MCAR或MAR。此时,你可以忽略缺失数据的生成机制,并且(在替换或删除缺失数据后)可以直接对感兴趣的关系进行建模。当数据是NMAR时,想对它进行恰当地分析比较困难,你既要对感兴趣的关系进行建模,还要对缺失值的生成机制进行建模。(目前分析NMAR数据的方法有模型选择法和模式混合法。由于NMAR数据的分析十分复杂,超出了本书的范畴,我们将忽略对它的讨论。)

图15-1列出了一系列可用来处理不完整数据的方法,以及相应的R包。

image.png

15.2 识别缺失值

R使用NA(不可得)代表缺失值,NaN(不是一个数)代表不可能的值。另外,符号Inf和-Inf分别代表正无穷和负无穷。函数is.na()、is.nan()和is.infinite()可分别用来识别缺失值、不可能值和无穷值。每个返回结果都是TRUE或FALSE。

image.png

这些函数返回的对象与其自身参数的个数相同。若每个元素的类型检验通过,则由TRUE替换,否则用FALSE替换。

qsz <- c(1, 2, 3, NA) # 定义向量qsz,其中有一个缺失值。
is.na(qsz) # 识别向量中的缺失值。
## [1] FALSE FALSE FALSE  TRUE

函数complete.cases()可用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE。

data(sleep, package = "VIM") # 加载数据集。
sleep[complete.cases(sleep),] # 列出没有缺失值的行。
##     BodyWgt BrainWgt NonD Dream Sleep  Span  Gest Pred Exp Danger
## 2     1.000     6.60  6.3   2.0   8.3   4.5  42.0    3   1      3
## 5  2547.000  4603.00  2.1   1.8   3.9  69.0 624.0    3   5      4
## 6    10.550   179.50  9.1   0.7   9.8  27.0 180.0    4   4      4
## 7     0.023     0.30 15.8   3.9  19.7  19.0  35.0    1   1      1
## 8   160.000   169.00  5.2   1.0   6.2  30.4 392.0    4   5      4
## 9     3.300    25.60 10.9   3.6  14.5  28.0  63.0    1   2      1
## 10   52.160   440.00  8.3   1.4   9.7  50.0 230.0    1   1      1
## 11    0.425     6.40 11.0   1.5  12.5   7.0 112.0    5   4      4
## 12  465.000   423.00  3.2   0.7   3.9  30.0 281.0    5   5      5
## 15    0.075     1.20  6.3   2.1   8.4   3.5  42.0    1   1      1
## 16    3.000    25.00  8.6   0.0   8.6  50.0  28.0    2   2      2
## 17    0.785     3.50  6.6   4.1  10.7   6.0  42.0    2   2      2
## 18    0.200     5.00  9.5   1.2  10.7  10.4 120.0    2   2      2
## 22   27.660   115.00  3.3   0.5   3.8  20.0 148.0    5   5      5
## 23    0.120     1.00 11.0   3.4  14.4   3.9  16.0    3   1      2
## 25   85.000   325.00  4.7   1.5   6.2  41.0 310.0    1   3      1
## 27    0.101     4.00 10.4   3.4  13.8   9.0  28.0    5   1      3
## 28    1.040     5.50  7.4   0.8   8.2   7.6  68.0    5   3      4
## 29  521.000   655.00  2.1   0.8   2.9  46.0 336.0    5   5      5
## 32    0.005     0.14  7.7   1.4   9.1   2.6  21.5    5   2      4
## 33    0.010     0.25 17.9   2.0  19.9  24.0  50.0    1   1      1
## 34   62.000  1320.00  6.1   1.9   8.0 100.0 267.0    1   1      1
## 37    0.023     0.40 11.9   1.3  13.2   3.2  19.0    4   1      3
## 38    0.048     0.33 10.8   2.0  12.8   2.0  30.0    4   1      3
## 39    1.700     6.30 13.8   5.6  19.4   5.0  12.0    2   1      1
## 40    3.500    10.80 14.3   3.1  17.4   6.5 120.0    2   1      1
## 42    0.480    15.50 15.2   1.8  17.0  12.0 140.0    2   2      2
## 43   10.000   115.00 10.0   0.9  10.9  20.2 170.0    4   4      4
## 44    1.620    11.40 11.9   1.8  13.7  13.0  17.0    2   1      2
## 45  192.000   180.00  6.5   1.9   8.4  27.0 115.0    4   4      4
## 46    2.500    12.10  7.5   0.9   8.4  18.0  31.0    5   5      5
## 48    0.280     1.90 10.6   2.6  13.2   4.7  21.0    3   1      3
## 49    4.235    50.40  7.4   2.4   9.8   9.8  52.0    1   1      1
## 50    6.800   179.00  8.4   1.2   9.6  29.0 164.0    2   3      2
## 51    0.750    12.30  5.7   0.9   6.6   7.0 225.0    2   2      2
## 52    3.600    21.00  4.9   0.5   5.4   6.0 225.0    3   2      3
## 54   55.500   175.00  3.2   0.6   3.8  20.0 151.0    5   5      5
## 57    0.900     2.60 11.0   2.3  13.3   4.5  60.0    2   1      2
## 58    2.000    12.30  4.9   0.5   5.4   7.5 200.0    3   1      3
## 59    0.104     2.50 13.2   2.6  15.8   2.3  46.0    3   2      2
## 60    4.190    58.00  9.7   0.6  10.3  24.0 210.0    4   3      4
## 61    3.500     3.90 12.8   6.6  19.4   3.0  14.0    2   1      1
sleep[!complete.cases(sleep),] # 列出有1个或多个缺失值的行。
##     BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
## 1  6654.000   5712.0   NA    NA   3.3 38.6  645    3   5      3
## 3     3.385     44.5   NA    NA  12.5 14.0   60    1   1      1
## 4     0.920      5.7   NA    NA  16.5   NA   25    5   2      3
## 13    0.550      2.4  7.6   2.7  10.3   NA   NA    2   1      2
## 14  187.100    419.0   NA    NA   3.1 40.0  365    5   5      5
## 19    1.410     17.5  4.8   1.3   6.1 34.0   NA    1   2      1
## 20   60.000     81.0 12.0   6.1  18.1  7.0   NA    1   1      1
## 21  529.000    680.0   NA   0.3    NA 28.0  400    5   5      5
## 24  207.000    406.0   NA    NA  12.0 39.3  252    1   4      1
## 26   36.330    119.5   NA    NA  13.0 16.2   63    1   1      1
## 30  100.000    157.0   NA    NA  10.8 22.4  100    1   1      1
## 31   35.000     56.0   NA    NA    NA 16.3   33    3   5      4
## 35    0.122      3.0  8.2   2.4  10.6   NA   30    2   1      1
## 36    1.350      8.1  8.4   2.8  11.2   NA   45    3   1      3
## 41  250.000    490.0   NA   1.0    NA 23.6  440    5   5      5
## 47    4.288     39.2   NA    NA  12.5 13.7   63    2   2      2
## 53   14.830     98.2   NA    NA   2.6 17.0  150    5   5      5
## 55    1.400     12.5   NA    NA  11.0 12.7   90    2   2      2
## 56    0.060      1.0  8.1   2.2  10.3  3.5   NA    3   1      2
## 62    4.050     17.0   NA    NA    NA 13.0   38    3   1      1

由于逻辑值TRUE和FALSE分别等价于数值1和0,可用sum()和mean()函数来获取关于缺失数据的有用信息。

sum(is.na(sleep$Dream)) # 统计数据集sleep中Dream变量缺失值个数。
## [1] 12
mean(is.na(sleep$Dream)) # 统计数据集sleep中Dream变量缺失值平均值。
## [1] 0.1935484
mean(!complete.cases(sleep)) # 统计数据集sleep中Dream变量多少比例含一个或多个缺失值。
## [1] 0.3225806

15.3 探索缺失值模式

15.3.1 列表显示缺失值

mice包中的md.pattern()函数可生成一个以矩阵或数据框形式展示缺失值模式的表格.

library(mice) # 调用mice包。
data(sleep, package = "VIM") # 调用数据集sleep。
md.pattern(sleep) # 探索数据集sleep缺失值。
##    BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD   
## 42       1        1    1   1      1     1    1    1     1    1  0
## 9        1        1    1   1      1     1    1    1     0    0  2
## 3        1        1    1   1      1     1    1    0     1    1  1
## 2        1        1    1   1      1     1    0    1     1    1  1
## 1        1        1    1   1      1     1    0    1     0    0  3
## 1        1        1    1   1      1     1    0    0     1    1  2
## 2        1        1    1   1      1     0    1    1     1    0  2
## 2        1        1    1   1      1     0    1    1     0    0  3
##          0        0    0   0      0     4    4    4    12   14 38
image.png

表中1和0显示了缺失值模式,0表示变量的列中有缺失值,1则表示没有缺失值。

15.3.2 图形探究缺失数据

aggr()函数不仅绘制每个变量的缺失值数,还绘制每个变量组合的缺失值数。

library(VIM) # 调用VIM包。
aggr(sleep, prop = FALSE, numbers = TRUE) # 图形展示缺失值。选项prop=TRUE用比例作为y轴,选项numbers = FALSE(默认)删去数值型标签。
image.png

matrixplot()函数可生成展示每个实例数据的图形。数值型数据被重新转换到[0,1]区间,并用灰度来表示大小:浅色表示值小,深色表示值大。默认缺失值为红色。

matrixplot(sleep) # 展示每个实例图形。
image.png

marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。

marginplot(sleep[c("Gest", "Dream")], pch = c(20), col = c("darkgray", "red", "blue")) # 缺失值散点图。
image.png

图形的主体是Gest和Dream(两变量数据都完整)的散点图。左边界的箱线图展示的是包含(深灰色)与不包含(红色)Gest值的Dream变量分布。注意,在灰度图上红色是更深的阴影。
四个红色的点代表着缺失了Gest得分的Dream值。在底部边界上,Gest和Dream间的关系反过来了。可以看到,妊娠期和做梦时长呈负相关,缺失妊娠期数据时动物的做梦时长一般更长。两个变量均有缺失值的观测个数在两边界交叉处(左下角)用蓝色输出。

15.3.3 用相关性探索缺失值

你可用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。求这些指示变量间和它们与初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。

x <- as.data.frame(abs(is.na(sleep))) # 将sleep数据集中缺失值赋值,若sleep的元素缺失,则数据框x对应的元素为1,否则为0。
head(sleep) # 查看数据集sleep前6行。
##    BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
## 1 6654.000   5712.0   NA    NA   3.3 38.6  645    3   5      3
## 2    1.000      6.6  6.3   2.0   8.3  4.5   42    3   1      3
## 3    3.385     44.5   NA    NA  12.5 14.0   60    1   1      1
## 4    0.920      5.7   NA    NA  16.5   NA   25    5   2      3
## 5 2547.000   4603.0  2.1   1.8   3.9 69.0  624    3   5      4
## 6   10.550    179.5  9.1   0.7   9.8 27.0  180    4   4      4
head(x) # 查看缺失值赋值后数据集的前6行。
##   BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
## 1       0        0    1     1     0    0    0    0   0      0
## 2       0        0    0     0     0    0    0    0   0      0
## 3       0        0    1     1     0    0    0    0   0      0
## 4       0        0    1     1     0    1    0    0   0      0
## 5       0        0    0     0     0    0    0    0   0      0
## 6       0        0    0     0     0    0    0    0   0      0
y <- x[which(apply(x,2,sum)>0)] # 提取含缺失值的变量。
cor(y) # 指示变量的相关系数。
##              NonD       Dream       Sleep        Span        Gest
## NonD   1.00000000  0.90711474  0.48626454  0.01519577 -0.14182716
## Dream  0.90711474  1.00000000  0.20370138  0.03752394 -0.12865350
## Sleep  0.48626454  0.20370138  1.00000000 -0.06896552 -0.06896552
## Span   0.01519577  0.03752394 -0.06896552  1.00000000  0.19827586
## Gest  -0.14182716 -0.12865350 -0.06896552  0.19827586  1.00000000
cor(sleep, y, use = "pairwise.complete.obs") # 缺失值变量与其他观测变量的关系。矩阵中行为可观测变量,列为表示缺失的指示变量。
##                 NonD       Dream        Sleep        Span        Gest
## BodyWgt   0.22682614  0.22259108  0.001684992 -0.05831706 -0.05396818
## BrainWgt  0.17945923  0.16321105  0.007859438 -0.07921370 -0.07332961
## NonD              NA          NA           NA -0.04314514 -0.04553485
## Dream    -0.18895206          NA -0.188952059  0.11699247  0.22774685
## Sleep    -0.08023157 -0.08023157           NA  0.09638044  0.03976464
## Span      0.08336361  0.05981377  0.005238852          NA -0.06527277
## Gest      0.20239201  0.05140232  0.159701523 -0.17495305          NA
## Pred      0.04758438 -0.06834378  0.202462711  0.02313860 -0.20101655
## Exp       0.24546836  0.12740768  0.260772984 -0.19291879 -0.19291879
## Danger    0.06528387 -0.06724755  0.208883617 -0.06666498 -0.20443928

15.4 理解缺失数据的来由和影响

识别缺失数据的数目、分布和模式有两个目的:(1)分析生成缺失数据的潜在机制;(2)评价缺失数据对回答实质性问题的影响。具体来讲,我们想弄清楚以下几个问题。
缺失数据的比例多大?
缺失数据是否集中在少数几个变量上,抑或广泛存在?
缺失是随机产生的吗?
缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?
回答这些问题将有助于判断哪种统计方法最适合用来分析你的数据。

假使已经知道了缺失数据的来源和影响,那么让我们看看如何转换标准的统计方法来适应缺失数据的分析。我们将重点学习三种非常流行的方法:恢复数据的推理方法、涉及删除缺失值的传统方法、涉及模拟的现代方法。

15.5 理性处理不完整数据

推理方法会根据变量间的数学或者逻辑关系来填补或恢复缺失值。推理研究法常常需要创造性和想法,同时还需要许多数据处理技巧,而且数据的恢复可能是准确的或者近似的。

15.6 完整实例分析(行删除)

只有每个变量都包含了有效数据值的观测才会保留下来做进一步的分析。实际上,这样会导致包含一个或多个缺失值的任意一行都会被删除,因此常称作行删除法(listwise)、个案删除(case-wise)或剔除。
newdata <- mydata[complete.cases(mydata),]
newdata <- na.omit(mydata)
两行代码表示的意思都是:mydata中所有包含缺失数据的行都被删除,然后结果才存储到newdata中。

options(digits = 1) # 有效数字保留1位。
cor(na.omit(sleep)) # 删除缺失值后计算sleep数据集相关系数。
##          BodyWgt BrainWgt NonD Dream Sleep  Span  Gest  Pred  Exp Danger
## BodyWgt     1.00     0.96 -0.4 -0.07  -0.3  0.47  0.71  0.10  0.4   0.26
## BrainWgt    0.96     1.00 -0.4 -0.07  -0.3  0.63  0.73 -0.02  0.3   0.15
## NonD       -0.39    -0.39  1.0  0.52   1.0 -0.37 -0.61 -0.35 -0.6  -0.53
## Dream      -0.07    -0.07  0.5  1.00   0.7 -0.27 -0.41 -0.40 -0.5  -0.57
## Sleep      -0.34    -0.34  1.0  0.72   1.0 -0.38 -0.61 -0.40 -0.6  -0.60
## Span        0.47     0.63 -0.4 -0.27  -0.4  1.00  0.65 -0.17  0.3   0.01
## Gest        0.71     0.73 -0.6 -0.41  -0.6  0.65  1.00  0.09  0.6   0.31
## Pred        0.10    -0.02 -0.4 -0.40  -0.4 -0.17  0.09  1.00  0.6   0.93
## Exp         0.41     0.32 -0.6 -0.50  -0.6  0.32  0.57  0.63  1.0   0.79
## Danger      0.26     0.15 -0.5 -0.57  -0.6  0.01  0.31  0.93  0.8   1.00
summary(lm(Dream ~ Span + Gest, data = na.omit(sleep))) # 按行删除缺失值后进行的回归分析。
## 
## Call:
## lm(formula = Dream ~ Span + Gest, data = na.omit(sleep))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -2.333 -0.915 -0.221  0.382  4.183 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.480122   0.298476    8.31  3.7e-10 ***
## Span        -0.000472   0.013130   -0.04    0.971    
## Gest        -0.004394   0.002081   -2.11    0.041 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1 on 39 degrees of freedom
## Multiple R-squared:  0.167,  Adjusted R-squared:  0.125 
## F-statistic: 3.92 on 2 and 39 DF,  p-value: 0.0282

15.7 多重插补

多重插补(MI)是一种基于重复模拟的处理缺失值的方法。在面对复杂的缺失值问题时,MI是最常选用的方法,它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。R中可利用Amelia、mice和mi包来执行这些操作。本节中,我们将重点学习mice包(利用链式方程的多元插补)提供的方法。

image.png

基于mice包的分析通常符合以下分析过程:
library(mice)
imp <- mice(data, m)
fit <- with(imp, analysis)
pooled <- pool(fit)
summary(pooled)
 mydata是一个包含缺失值的矩阵或数据框。
 imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认地,m为5。
 analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。方法包括做线性回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam(),以及做负二项模型的nbrm()函数。表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。
 fit是一个包含m个单独统计分析结果的列表对象。
 pooled是一个包含这m个统计分析平均结果的列表对象。

library(mice) # 调用mice包。
data(sleep, package="VIM") # 调用数据集sleep。
imp <- mice(sleep, seed=1234) # 对sleep缺失值进行插补。
## 
##  iter imp variable
##   1   1  NonD  Dream  Sleep  Span  Gest
##   1   2  NonD  Dream  Sleep  Span  Gest
##   1   3  NonD  Dream  Sleep  Span  Gest
##   1   4  NonD  Dream  Sleep  Span  Gest
##   1   5  NonD  Dream  Sleep  Span  Gest
##   2   1  NonD  Dream  Sleep  Span  Gest
##   2   2  NonD  Dream  Sleep  Span  Gest
##   2   3  NonD  Dream  Sleep  Span  Gest
##   2   4  NonD  Dream  Sleep  Span  Gest
##   2   5  NonD  Dream  Sleep  Span  Gest
##   3   1  NonD  Dream  Sleep  Span  Gest
##   3   2  NonD  Dream  Sleep  Span  Gest
##   3   3  NonD  Dream  Sleep  Span  Gest
##   3   4  NonD  Dream  Sleep  Span  Gest
##   3   5  NonD  Dream  Sleep  Span  Gest
##   4   1  NonD  Dream  Sleep  Span  Gest
##   4   2  NonD  Dream  Sleep  Span  Gest
##   4   3  NonD  Dream  Sleep  Span  Gest
##   4   4  NonD  Dream  Sleep  Span  Gest
##   4   5  NonD  Dream  Sleep  Span  Gest
##   5   1  NonD  Dream  Sleep  Span  Gest
##   5   2  NonD  Dream  Sleep  Span  Gest
##   5   3  NonD  Dream  Sleep  Span  Gest
##   5   4  NonD  Dream  Sleep  Span  Gest
##   5   5  NonD  Dream  Sleep  Span  Gest
fit25 <- with(imp, lm(Dream ~ Span + Gest)) # 对插补后数据集线性回归。
pooled <- pool(fit25) # 统计分析平均结果列表。
summary(pooled) # 返回结果。
##          term estimate std.error statistic df p.value
## 1 (Intercept)    2.597     0.249      10.4 52   2e-14
## 2        Span   -0.004     0.012      -0.3 56   7e-01
## 3        Gest   -0.004     0.001      -3.0 55   5e-03

你可以通过检查分析过程所创建的对象来获取更多的插补信息。

imp # 查看对象imp。
## Class: mids
## Number of multiple imputations:  5 
## Imputation methods:
##  BodyWgt BrainWgt     NonD    Dream    Sleep     Span     Gest     Pred 
##       ""       ""    "pmm"    "pmm"    "pmm"    "pmm"    "pmm"       "" 
##      Exp   Danger 
##       ""       "" 
## PredictorMatrix:
##          BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
## BodyWgt        0        1    1     1     1    1    1    1   1      1
## BrainWgt       1        0    1     1     1    1    1    1   1      1
## NonD           1        1    0     1     1    1    1    1   1      1
## Dream          1        1    1     0     1    1    1    1   1      1
## Sleep          1        1    1     1     0    1    1    1   1      1
## Span           1        1    1     1     1    0    1    1   1      1
## Number of logged events:  5 
##   it im  dep meth   out
## 1  3  2 Span  pmm Sleep
## 2  3  2 Gest  pmm Sleep
## 3  4  2 Span  pmm Sleep
## 4  4  2 Gest  pmm Sleep
## 5  4  4 Span  pmm Sleep

通过提取imp对象的子成分,可以观测到实际的插补值。

imp$imp$Dream # 提取子成分Dream。
##      1   2   3   4   5
## 1  0.0 0.5 0.5 0.5 0.3
## 3  0.5 1.4 1.5 1.5 1.3
## 4  3.6 4.1 3.1 4.1 2.7
## 14 0.3 1.0 0.5 0.0 0.0
## 24 3.6 0.8 1.4 1.4 0.9
## 26 2.4 0.5 3.9 3.4 1.2
## 30 2.6 0.8 2.4 2.2 3.1
## 31 0.6 1.3 1.2 1.8 2.1
## 47 1.3 1.8 1.8 1.8 3.9
## 53 0.5 0.5 0.6 0.5 0.3
## 55 2.6 3.6 2.4 1.8 0.5
## 62 1.5 3.4 3.9 3.4 2.2

利用 complete() 函数可以观察m个插补数据集中的任意一个。格式为:complete(imp, action=#),其中 # 指定m个完整数据集中的一个来展示。

dataset3 <- complete(imp, action=3)
dataset3
##    BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
## 1    7e+03    6e+03    3   0.5     3   39  645    3   5      3
## 2    1e+00    7e+00    6   2.0     8    4   42    3   1      3
## 3    3e+00    4e+01   11   1.5    12   14   60    1   1      1
## 4    9e-01    6e+00   13   3.1    16    7   25    5   2      3
## 5    3e+03    5e+03    2   1.8     4   69  624    3   5      4
## 6    1e+01    2e+02    9   0.7    10   27  180    4   4      4
## 7    2e-02    3e-01   16   3.9    20   19   35    1   1      1
## 8    2e+02    2e+02    5   1.0     6   30  392    4   5      4
## 9    3e+00    3e+01   11   3.6    14   28   63    1   2      1
## 10   5e+01    4e+02    8   1.4    10   50  230    1   1      1
## 11   4e-01    6e+00   11   1.5    12    7  112    5   4      4
## 12   5e+02    4e+02    3   0.7     4   30  281    5   5      5
## 13   6e-01    2e+00    8   2.7    10    4   42    2   1      2
## 14   2e+02    4e+02    3   0.5     3   40  365    5   5      5
## 15   7e-02    1e+00    6   2.1     8    4   42    1   1      1
## 16   3e+00    2e+01    9   0.0     9   50   28    2   2      2
## 17   8e-01    4e+00    7   4.1    11    6   42    2   2      2
## 18   2e-01    5e+00   10   1.2    11   10  120    2   2      2
## 19   1e+00    2e+01    5   1.3     6   34  210    1   2      1
## 20   6e+01    8e+01   12   6.1    18    7   14    1   1      1
## 21   5e+02    7e+02   12   0.3    12   28  400    5   5      5
## 22   3e+01    1e+02    3   0.5     4   20  148    5   5      5
## 23   1e-01    1e+00   11   3.4    14    4   16    3   1      2
## 24   2e+02    4e+02   11   1.4    12   39  252    1   4      1
## 25   8e+01    3e+02    5   1.5     6   41  310    1   3      1
## 26   4e+01    1e+02   10   3.9    13   16   63    1   1      1
## 27   1e-01    4e+00   10   3.4    14    9   28    5   1      3
## 28   1e+00    6e+00    7   0.8     8    8   68    5   3      4
## 29   5e+02    7e+02    2   0.8     3   46  336    5   5      5
## 30   1e+02    2e+02    8   2.4    11   22  100    1   1      1
## 31   4e+01    6e+01    7   1.2     8   16   33    3   5      4
## 32   5e-03    1e-01    8   1.4     9    3   22    5   2      4
## 33   1e-02    2e-01   18   2.0    20   24   50    1   1      1
## 34   6e+01    1e+03    6   1.9     8  100  267    1   1      1
## 35   1e-01    3e+00    8   2.4    11    2   30    2   1      1
## 36   1e+00    8e+00    8   2.8    11    5   45    3   1      3
## 37   2e-02    4e-01   12   1.3    13    3   19    4   1      3
## 38   5e-02    3e-01   11   2.0    13    2   30    4   1      3
## 39   2e+00    6e+00   14   5.6    19    5   12    2   1      1
## 40   4e+00    1e+01   14   3.1    17    6  120    2   1      1
## 41   2e+02    5e+02   12   1.0    12   24  440    5   5      5
## 42   5e-01    2e+01   15   1.8    17   12  140    2   2      2
## 43   1e+01    1e+02   10   0.9    11   20  170    4   4      4
## 44   2e+00    1e+01   12   1.8    14   13   17    2   1      2
## 45   2e+02    2e+02    6   1.9     8   27  115    4   4      4
## 46   2e+00    1e+01    8   0.9     8   18   31    5   5      5
## 47   4e+00    4e+01   11   1.8    12   14   63    2   2      2
## 48   3e-01    2e+00   11   2.6    13    5   21    3   1      3
## 49   4e+00    5e+01    7   2.4    10   10   52    1   1      1
## 50   7e+00    2e+02    8   1.2    10   29  164    2   3      2
## 51   8e-01    1e+01    6   0.9     7    7  225    2   2      2
## 52   4e+00    2e+01    5   0.5     5    6  225    3   2      3
## 53   1e+01    1e+02    3   0.6     3   17  150    5   5      5
## 54   6e+01    2e+02    3   0.6     4   20  151    5   5      5
## 55   1e+00    1e+01    8   2.4    11   13   90    2   2      2
## 56   6e-02    1e+00    8   2.2    10    4   30    3   1      2
## 57   9e-01    3e+00   11   2.3    13    4   60    2   1      2
## 58   2e+00    1e+01    5   0.5     5    8  200    3   1      3
## 59   1e-01    2e+00   13   2.6    16    2   46    3   2      2
## 60   4e+00    6e+01   10   0.6    10   24  210    4   3      4
## 61   4e+00    4e+00   13   6.6    19    3   14    2   1      1
## 62   4e+00    2e+01    8   3.9    11   13   38    3   1      1

15.8 处理缺失值的其他方法

image.png

15.8.1 成对删除

处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。

15.8.2 简单(非随机)插补

所谓简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。若使用均值替换,Dream变量中的缺失值可用1.97来替换,NonD中的缺失值可用8.67来替换(两个值分别是Dream和NonD的均值)。注意这些替换是非随机的,这意味着不会引入随机误差(与多重插补不同)。
简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然简单插补用法很简单,但是对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。与成对删除一样,我建议在解决缺失数据的问题时尽量避免使用该方法。

15.9 小结

参考资料:

  1. 《R语言实战》(中文版),人民邮电出版社,2013.
  2. 如何理解主成分分析法 (PCA),https://zhuanlan.zhihu.com/p/170398464
  3. 主成分分析法,https://blog.csdn.net/weixin_43914260/article/details/99585202
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容