處理不完整數據集

  • 推理方法

例如調研性別時,發生不少的姓名是男性,那麼當性別有缺失值,可是姓名是同樣的,就能夠將缺失值填補爲男性,等等這種生活中靠數學或者關係邏輯來填補缺失值的方法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)

多重插補(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值

 

R語言環境變量的設置 環境設置函數爲options() - holy_black_cat - 博客園 

相關文章
相關標籤/搜索