處理缺失值--探索缺失值模式(列表顯示、圖形探究、用相關性探究)
處理缺失值的高階方法--探索缺失值模式
在決定如何處理缺失資料前,瞭解哪些變數有缺失值、數目有多少、是什麼組合形式等資訊非常有用,要知道資料為何缺失。
1列表顯示缺失值
mice包中的md.pattern()函式可生成一個以矩陣或資料框形式展示缺失值模式的表格。將函式應用到sleep資料集,可得到:
library(mice)
data(sleep, package="VIM")
md.pattern(sleep)
結果分析:表中的1和0顯示了缺失值模式:0表示變數的列中有缺失值,1則表示沒有缺失值。第一行表述了“無缺失值”的模式(所有元素都為1)。第二行表述了“除了Span之外無缺失值”的模式。第一列表示各缺失值模式的例項個數,最後一列表示各模式中有缺失值的變數的個數。此處可以看到,有
2圖形探究缺失資料
雖然md.pattern()函式的表格輸出非常簡潔,但我通常覺得用圖形展示模式更為清晰。VIM包提供了大量能視覺化資料集中缺失值模式的函式,比如其中幾個:aggr()、matrixplot()和scattMiss()等。
(1)aggr()函式不僅繪製每個變數的缺失值數,還繪製每個變數組合的缺失值數。例如:
library("VIM")
aggr(sleep, prop=FALSE, numbers=TRUE)
結果分析:可以看到,變數NonD有最大的缺失值數(14),有2種哺乳動物缺失了NonD、Dream和Sleep的評分。42種動物沒有缺失值。
(2)matrixplot()函式可生成展示每個例項資料的圖形。matrixplot(sleep)的圖形如下圖所示。此處,數值型資料被重新轉換到[0, 1]區間,並用灰度來表示大小:淺色表示值小,深色表示值大。預設缺失值為紅色。注意,在圖中,紅色經過手工陰影化處理,因此相對於灰
色缺失值非常顯眼。
matrixplot(sleep)
結果分析:該圖形可以互動,單擊一列會按其對應的變數重排矩陣。圖中的行按BodyWgt降序排列。通過矩陣圖,你可以看出某些變數的缺失值模式是否與其他變數的真實值有關聯。此圖中可以看到,無缺失值的睡眠變數(
(3)marginplot()函式可生成一幅散點圖,在圖形邊界展示兩個變數的缺失值資訊。以做夢時
長與哺乳動物妊娠期時長的關係為例,來看下列程式碼:
marginplot(sleep[c("Gest","Dream")], pch=c(20),
col=c("darkgray", "red", "blue"))
結果分析:圖形的主體是Gest和Dream(兩變數資料都完整)的散點圖。左邊界的箱線圖展示的是包含(深灰色)與不包含(紅色)Gest值的Dream變數分佈。注意,在灰度圖上紅色是更深的陰影。四個紅色的點代表缺失了Gest得分的Dream值。在底部邊界上,Gest和Dream間的關係反過來了。可以看到,妊娠期和做夢時長呈負相關,缺失妊娠期資料時動物的做夢時長一般更長。兩個變數均有缺失值的觀測個數在兩邊界交叉處用藍色輸出(左下角的0)。
3 用相關性探索缺失值
在繼續下文之前,還有些方法值得注意。你可用指示變數替代資料集中的資料(1表示缺失,0表示存在),這樣生成的矩陣有時被稱作影子矩陣。求這些指示變數之間和它們與初始(可觀測)變數之間的相關性,有助於觀察哪些變數常一起缺失,以及分析變數“缺失”與其他變數間的關係。
請看如下程式碼:
x <- as.data.frame(abs(is.na(sleep)))
若sleep的元素缺失,則資料框x對應的元素為1,否則為0。你可以觀察以下資料的前幾行:
head(sleep, n=5)
head(x, n=5)
以下程式碼,可提取含(但不全部是)缺失值的變數:
y <- x[which(apply(x,2,sum)>0)]
而cor(y) 可列出這些指示變數間的相關係數:
cor(y)
結果分析:此時,你可以看到Dream和NonD常常一起缺失(r=0.91)。相對可能性較小的是Sleep和NonD一起缺失(r=0.49),以及Sleep和Dream(r=0.20)。
含缺失值變數與其他可觀測變數間的關係:
cor(sleep, y, use="pairwise.complete.obs")
結果分析:在這個相關係數矩陣中,行為可觀測變數,列為表示缺失的指示變數。從相關係數矩陣的第一列可以看到,體重BodyWgt越大(r=0.227)、妊娠期Gest越長(r=0.202)、睡眠暴露度Exp越大(r=0.245)的動物無夢睡眠的評分更可能缺失。其他列的資訊也可以按類似方式得出。
注意,表中的相關係數並不特別大,表明資料是MCAR的可能性比較小,更可能為MAR。
本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15153092.html