例如調研性別時,發生不少的姓名是男性,那麼當性別有缺失值,可是姓名是同樣的,就能夠將缺失值填補爲男性,等等這種生活中靠數學或者關係邏輯來填補缺失值的方法html
a、只要包含一個或多個缺失值的行會被輸出,這方法稱爲行刪除法(listwise)、個案刪除(case-wise)或剔除git
b、 行刪除法假定數據是MCAR(即完整的觀測只是全數據的一個隨機樣本)(也就是說數據是MCAR,可以使用行刪除,由於後續樣本量的減小對統計檢驗效力不會形成嚴重影響)dom
#如下兩個語句的結果都是同樣的:將缺失數據的行刪除,而後結果保存到newdata中 newdata <- mydata[complete.cases(mydata),] newdata <- na.omit(mydata)
案例函數
研究壽命和妊娠期對睡眠中作夢時長的影響,可應用行刪除法的線性迴歸spa
> fit <- lm(Dream ~ Span + Gest,data = na.omit(sleep)) #行刪除法時使用42個實例,注意代碼cor(sleep,use="complete.obs")可生成一樣的結果 > summary(fit) 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 #動物妊娠期越短,作夢時長越長(控制壽命不變),而控制妊娠期不變時,壽命與作夢時長不相關 > fit1 <- lm(Dream ~ Span + Gest,data = sleep) #不使用行刪除法有 44個實例,和許多的R函數同樣,lm()將使用有限的行刪除 > summary(fit1) #定義會用函數擬合、含缺失值的變量,本例(Dream、Span、Gest)對應的實例纔會被刪除 Call: lm(formula = Dream ~ Span + Gest, data = sleep) Residuals: Min 1Q Median 3Q Max -2.313 -0.858 -0.218 0.408 4.184 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.478748 0.290662 8.53 1.3e-10 *** Span -0.000887 0.012310 -0.07 0.943 Gest -0.004319 0.001756 -2.46 0.018 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1 on 41 degrees of freedom (18 observations deleted due to missingness) Multiple R-squared: 0.195, Adjusted R-squared: 0.156 F-statistic: 4.98 on 2 and 41 DF, p-value: 0.0116
多重插補(MI)是一種基於重複模擬的處理缺失值的方法,在面對複雜的缺失值問題是,經常使用該方法code
a、它將從一個包含缺失值的數據集中生成一組完整的數據集(一般用3到10個)orm
b、每一個模擬數據集中,缺失數據將用 蒙特卡洛方法來填補htm
c、此時,標準的統計方法即可應用到每一個模擬的數據集上,經過組合輸出結果給出估計的結果,以及引入缺失值時的置信區間。對象
R 中可利用 Amelia,mice和 mi 包來執行這些操做blog
基於mice包的分析一般符合如下過程
library(mice) imp <- mice(data,m) fit <- with(imp,analysis) pooled <- pool(fit) summary(pooled)
data:是一個包含缺失值的矩陣或者數據框
imp:是一個包含m個插補數據集的列表對象,同時還含有完成插補過程的信息。默認 m 爲 5
analysis:是一個表達式對象,用來設定應用於 m 個插補數據集的統計分析方法。方法包括線性迴歸模型的lm() 函數、作廣義線性模型的glm()函數、以及作負二項模型的 nbrm() 函數。表達式在函數的括號中,~ 的左邊是響應變量,右邊是預測變量(用 + 符號分隔開)
fit:是一個包含 m 個單獨統計分析平均結果的列表對象
pooled:是一個包含這 m 個統計分析平均結果的列表對象
實現原理 P394
> library(mice) > data(sleep,package = "VIM") > imp <- mice(sleep,seed=1234) iter imp variable 1 1 NonD Dream Sleep Span Gest 1 2 NonD Dream Sleep Span Gest #...結果過長,忽略不寫... > fit <- with(imp,lm(Dream~Span + Gest)) > pooled <- pool(fit) > summary(pooled) est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda (Intercept) 2.546 0.255 10.0 52 1e-13 2.035 3.057 NA 0.09 0.05 Span -0.005 0.012 -0.4 52 7e-01 -0.029 0.020 4 0.09 0.05 Gest -0.004 0.001 -2.7 56 1e-02 -0.007 -0.001 4 0.05 0.02
可看到Span的迴歸係數不顯著(p≈0.08),Gest的係數在p<0.01的水下很顯著,若將結果與上述行刪除的對比,會發現背離的結論相同,當控制壽命不變時,妊娠期與作夢時長有一個(統計)顯著、負相關的關係
fmi:表示因爲引入缺失數據而引發的變異所佔總體不肯定性的比例
軟件包 | 描述 |
mvnmle | 對多元正態分佈數據中缺失值的最大似然估計 |
cat | 對數線性模型中多元類別型變量的多重插補 |
arrryImpute、arrayMissPattern、SeqKnn | 處理僞陣列數據的使用函數 |
longitudinalData | 相關的函數列表,好比對時間序列缺失值進行插補的一系列函數 |
kmi | 處理生存分析缺失值的Kaplan-Meier多重插補 |
mix | 通常位置模型中混合類型和連續型數據的多重插補 |
pan | 多元面板數據或聚類數據的多重插補 |
對於成對刪除,觀測只是當它含缺失數據的變量涉及某個特定分析時纔會被刪除
> cor(sleep,use = "pairwise.complete.obs") BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger BodyWgt 1.00 0.93 -0.4 -0.1 -0.3 0.30 0.7 0.06 0.3 0.13 BrainWgt 0.93 1.00 -0.4 -0.1 -0.4 0.51 0.7 0.03 0.4 0.15 NonD -0.38 -0.37 1.0 0.5 1.0 -0.38 -0.6 -0.32 -0.5 -0.48 Dream -0.11 -0.11 0.5 1.0 0.7 -0.30 -0.5 -0.45 -0.5 -0.58 Sleep -0.31 -0.36 1.0 0.7 1.0 -0.41 -0.6 -0.40 -0.6 -0.59 Span 0.30 0.51 -0.4 -0.3 -0.4 1.00 0.6 -0.10 0.4 0.06 Gest 0.65 0.75 -0.6 -0.5 -0.6 0.61 1.0 0.20 0.6 0.38 Pred 0.06 0.03 -0.3 -0.4 -0.4 -0.10 0.2 1.00 0.6 0.92 Exp 0.34 0.37 -0.5 -0.5 -0.6 0.36 0.6 0.62 1.0 0.79 Danger 0.13 0.15 -0.5 -0.6 -0.6 0.06 0.4 0.92 0.8 1.00
此例中,任何兩個變量的相關係數只利用了僅這兩個變量可用的觀測(忽略其餘變量),好比BodyWgt 和 BrainWgt 基於62種(全部變量下的動物數)動物的數據,而 BodyWgt 和 NonD基於42種動物的數據,每次計算只用了不一樣的數據子集,這將會致使一些扭曲的、難以解釋的結果
所謂簡單插補,即用某個值(平均值、中位數、衆數)來替換變量中的缺失值。注意這話總替換是非隨機的,這意味着不會引入隨機偏差(與多重插補不一樣)
優勢:不會減小樣本量
缺點:對於非MCAR數據會產生有偏的結果,若缺失數據的數目很是大,那麼簡單插補極可能會低估標準差、曲解變量間的相關性,並會生成不正確的統計檢驗 p值