轉載https://blog.csdn.net/yyykkklll123/article/details/83867076
步驟:
1.識別缺失值
2.分析缺失的原因
3.查看缺失值情況
4.處理缺失值
識別
判斷缺失值:is.na()
識別矩陣或數據框中的完整觀測:complete.cases()
any(is.na(data)):檢查是否存在缺失值
head(is.na(data $ col1),5):查看數據data中col1列前5個數據的缺失情況
sum(is.na(data $ col1)):計算col1列中的缺失值個數
sum(!is.na(data $ col1)):計算col1列中的非缺失值個數
mean(!complete.cases(data)):計算data中完整行的百分比
newdata=data[complete.cases(data),]:從data中提取出完整觀測
deldata=data[!complete.cases(data),]:從data中提取出非完整觀測
分析缺失的原因
MCAR:完全隨機缺失,即某變量缺失值與它所在變量其他觀測值無關,與其他變量也無關。
MAR:隨機缺失,即某變量出現缺失與其他變量相關,與自身未觀測值不相關(大多數情況下處理的都是這種數據)
MANR:非隨機缺失,即變量出現缺失與其觀測值有關,需要用專門的方法重新收集數據。
查看缺失值情況
1.列表顯示:
加載mice包(實現處理丟失數據方法的包)
md.pattern()函數:md.pattern(x, plot = TRUE)
生成一個顯示缺失值模式(0,1)的表格,0表示列中有缺失值,1表示沒有
2.圖形顯示:
加載VIM包(可視化缺失值、插補值)
aggr()函數:繪制變量缺失值個數
aggr(x, delimiter = NULL, plot = TRUE, …)
處理缺失值
刪除法
1.行刪除(個案刪除)
適用:缺失數據較少,且分散
缺點:造成數據浪費,估計參數可能會有偏
data[complete.cases(data),]
2.成對刪除
優點:用到了 所以可獲取的信息,在MCAR時可,參數估計無偏
缺點:相關系數矩陣可能不正定,難以選擇用哪個樣本量計算標準誤,用平均的可能造成低估
apply(data,2,mean,na.rm=T)
cor(data,use=‘pair’)
插補
1.用代表中心趨勢的值插補缺失
選擇中位數、平均數、眾數中哪一個由分布決定
近似正態分布:均值插補
偏態分布:中位數插補
例:使用內置數據集實現均值插補
2.回歸插補
方法:對缺失變量和已觀測變量建立回歸方程,用缺失變量的預測值對缺失值進行插補
例:
3.隨機回歸插補
在回歸預測值上增加隨機因素
(這種方法生成的插補值可能有負數,這是由于加入隨機因素引起的)
4.多重插補
基于重復模擬插補缺失值
5.K臨近法
根據樣本觀測值之間的相關性,利用歐氏距離尋找與缺失觀測最相似的k個樣本中的觀測,填補缺失值
DMwR包中knnInputation函數可以實現這種方法