《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閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容