本文對應《R語言實戰》第15章:處理缺失數據的高級方法
本文僅在書的基礎上進行簡單闡述,更加詳細的缺失數據問題研究將會單獨寫一篇文章。
處理缺失值的一般步驟:
- 識別缺失數據;
- 檢查導致數據缺失的原因;
- 刪除包含缺失值的實例或用合理的數值代替(插補)缺失值。
缺失數據的分類:
完全隨機缺失(MCAR):某變量的缺失數據與其他任何觀測或未觀測的變量都不相關;
隨機缺失(MAR):某變量上的缺失數據與其他觀測變量相關,與它自己的未觀測值不相關;
非隨機缺失(NMAR):不屬於MCAR或MAR的變量。
一般情況下為MCAR或MAR,NMAR處理太過復雜,暫時不考慮。
識別缺失值:
#某變量缺失值數量 sum(is.na(sleep$Dream)) #某變量上缺失值的比例 mean(is.na(sleep$Dream)) #含有缺失值的實例的比例 mean(!complete.cases(sleep)) #生成一個以矩陣或數據框形式展示缺失值模式的表格 library(mice) md.pattern(sleep)
md.pattern()結果解釋:
矩陣中,0表示有缺失值,1表示沒有缺失值。第一行表述了無缺失值的模式,第二行以后表述了除標記變量外無缺失值的模式。。第一列表示各缺失值模式的實例個數,最后一列表示各模式中有缺失值的變量的個數。最后一行給出了每個變量中缺失值的數目。
圖形探究缺失數據(package: VIM)
三個函數:
aggr()函數不僅繪制每個變量的缺失值數,還繪制每個變量組合的缺失值數;
matrixplot()函數可生成展示每個實例數據的圖形;
marginplot()函數可生成一幅散點圖,在圖形邊界展示兩個變量的缺失值信息。
用相關性探索缺失值:
影子矩陣:用指示變量替代數據集中的數據(1表示缺失,2表示存在)
求這些指示變量間和它們與初始(可觀測)變量間的相關性,有助於觀察哪些變量常一起缺失,以及分析變量“缺失”與其他變量間的關系。
x <- as.data.frame(abs(is.na(sleep))) y <- x[which(sd(x) > 0)] cor(y)
相關系數大,表明兩個變量間常常一起缺失。
理解缺失數據的來由和影響:
識別缺失數據的數目、分布和模式有兩個目的:1. 分析生成缺失數據的潛在機制;2. 評價缺失數據對回答實質性問題的影響。
用統計方法進行缺失數據的分析:恢復數據的推理方法、涉及刪除缺失值的傳統方法、涉及模擬的現代方法。
所有工作的目的都是相同的:在沒有完整信息的情況下,盡可能精確地回答收集數據所要解決的實質性問題。
理性處理不完整數據:
采用推理的方法,根據變量間的數學或邏輯關系來填補或恢復缺失值。
常見處理方法:
行刪除:將包含一個或多個缺失值的任意一行刪除;
#以下兩行代碼的功能等價 newdata <- mydata[complete.cases(mydata), ] newdata <- na.omit(mydata)
多重插補(MI):是一種基於重復模擬的處理缺失值的方法,每個模擬數據集中,缺失數據將用蒙特卡洛方法來填補。R中可利用Amelia, mice 和mi包實現。
mice包:利用鏈式方程的多元插補。具體過程:首先從一個包含缺失數據的數據框開始,返回一個包含多個(默認5個)完整數據集的對象;然后,with()函數可依次對每個完整數據集應用統計模型;最后,pool()函數將這些單獨的分析結果整合為一組結果。最終模型的標准誤和p值都將准確地反映出由於缺失值和多重插補而產生的不確定性。
mice如何插補缺失值:通過Gibbs抽樣完成。每個缺失值由數據集中其他預測變量預測得來,該過程不斷迭代,直到所有預測值收斂。
通常過程:
library(mice) imp <- mice(mydata, m) fit <- with(imp, analysis) pooled <- pool(fit) summary(pooled) #mydata是待插補的數據框,m默認5,imp里含有m個插補數據集 #analysis是一個表達式對象,設定應用於m個插補數據集的統計分析方法 #fit包含了m個單獨統計分析結果 #pooled包含m個統計分析平均結果
處理缺失值的其他方法:
Hmisc |
包含多種函數,支持簡單插補、多重插補和典型變量插補 |
mvnmle |
對多元正態分布數據中缺失值的最大似然估計 |
cat |
對數線性模型中多元類別型變量的多重插補 |
arrayImpute/arrayMissPattern/SeqKnn |
處理微陣列缺失數據的實用函數 |
longitudinalData |
相關的函數列表,比如對時間序列缺失值進行插補的一系列函數 |
kmi |
處理生存分析缺失值的Kaplan-Meier多重插補 |
mix |
一般位置模型中混合類別型和連續型數據的多重插補 |
pan |
多元面板數據或聚類數據的多重插補 |