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