處理缺失值--處理步驟、識別缺失值


處理缺失數據的高級方法

缺失數據的傳統方法和現代方法,主要使用VIMmice。使用VIM包提供的哺乳動物睡眠數據(sleep,注意不要將其與基礎安裝中描述葯效的sleep數據集混淆)。數據來源於AllisonChichetti1976)的研究,他們研究了62種哺乳動物的睡眠、生態學變量和體質變量間的關系。他們對動物的睡眠需求為什么會隨着物種變化很感興趣。睡眠數據是因變量,生態學變量和體質變量是自變量或預測變量。

睡眠變量包含睡眠中做夢時長(Dream)、不做夢時長(NonD)以及它們的和(Sleep體質變量包含體重(BodyWgt,單位為千克)、腦重(BrainWgt,單位為克)、壽命(Span,單位為年)和妊娠期(Gest,單位為天)。生態學變量包含物種被捕食的程度(Pred)、睡眠時的暴露程度(Exp)和面臨的總危險度(Danger)。生態學變量以從1(低)到5(高)的5分制進行測量。

1 處理缺失值的步驟

(1) 識別缺失數據;

(2) 檢查導致數據缺失的原因;

(3) 刪除包含缺失值的實例或用合理的數值代替(插補)缺失值。

缺失數據的分類

(1) 完全隨機缺失 若某變量的缺失數據與其他任何觀測或未觀測變量都不相關,則數據

為完全隨機缺失(MCAR

(2) 隨機缺失 若某變量上的缺失數據與其他觀測變量相關,與它自己的未觀測值不相關,

則數據為隨機缺失(MAR)。

(3) 非隨機缺失 若缺失數據不屬於MCARMAR,則數據為非隨機缺失(NMAR)。

處理缺失數據的方法有很多,但不能保證都生成一樣的結果。下圖列出了一系列可用來處理不完整數據的方法,以及相應的R包:

 

2 識別缺失值

R使用NA(不可得)代表缺失值,NaN(不是一個數)代表不可能值。另外,符號Inf-Inf分別代表正無窮和負無窮。函數is.na()is.nan()is.infinite()可分別用來識別缺失值、不可能值和無窮值。每個返回結果都是TRUEFALSE。 下表給出了一些示例:

is.na()is.nan()is.infinite()函數的返回值示例

 

注:這些函數返回的對象與其自身參數的個數相同。

函數complete.cases()可以用來識別矩陣或數據框中沒有缺失值的行。若每行都包含完整的實例,則返回TRUE的邏輯向量;若每行有一個或多個缺失值,則返回FALSE

以睡眠數據集為例:

data(sleep, package="VIM")

sleep[complete.cases(sleep),]

 

結果分析:輸出結果顯示42個實例為完整數據(截圖未完整)。

sleep[!complete.cases(sleep),]

 

結果分析:輸出結果顯示20個實例含一個或多個缺失值(截圖完整)。

由於邏輯值TRUEFALSE分別等價於數值10,可用sum()mean()函數來獲取關於缺失數據的有用信息。如:

sum(is.na(sleep$Dream))

 

mean(is.na(sleep$Dream))

 

mean(!complete.cases(sleep))

 

結果分析:結果表明變量Dream12個缺失值,19%的實例在此變量上有缺失值。另外,數據集中32%的實例包含一個或多個缺失值。

對於識別缺失值,有兩點需要牢記。第一,complete.cases()函數僅將NANaN識別為缺失值,無窮值(Inf-Inf)被當作有效值。第二,必須使用與上述中類似的缺失值函數來識別R數據對象中的缺失值,像myvar == NA這樣的邏輯比較無法實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM