缺失值的处理——R语言
本文主要介紹VIM和mice包,使用數據集為VIM包提供的哺乳動物睡眠數據sleep,主要研究62種哺乳動物的睡眠、生態學變量和體質變量間的關系。
睡眠變量包含睡眠中做夢時(Dream)、不做夢的時長(NonD)以及它們的和(Sleep)。體質變量包含體重(BodyWgt,單位為千克)、腦重(BrainWgt,單位為克)、壽命(Span,單位為年)和妊娠期(Gest,單位為天)。生態學變量包含物種被捕食的程度(Pred)、睡眠時暴露的程度(Exp)和面臨的總危險度(Danger)。生態學變量以從1(低)到5(高)的5分制進行測量。
1 處理缺失值的步驟
一個完整的處理方法通常包含以下幾個步驟:
(1) 識別缺失數據;
(2) 檢查導致數據缺失的原因;
(3) 刪除包含缺失值的實例或用合理的數值代替(插補)缺失值。
缺失數據的分類:完全隨機缺失(MCAR)、隨機缺失(MAR)、非隨機缺失(NMAR)
2 識別缺失值
NA(不可得)代表缺失值,NaN(不是一個數)代表不可能的值。符合Inf和-Inf分別代表正無窮和負無窮。識別函數分別為is.na、is.nan()、is.infinite()。
VIM包函數中complete.cases()可用來識別矩陣或數據框中沒有缺失值的行。若每行都包含完整的實例,則返回TRUE的邏輯向量;若每行有一個或多個缺失值,則返回FALSE。
由于邏輯值TRUE和FALSE分別等價于數值1和0,可用sum()和mean()函數來獲取關于缺失數據的有用信息。
注:complete.cases()函數僅將NA和NaN識別為缺失值,無窮值(Inf和-Inf)被當做有效值。
3 探索缺失值模式
在決定如何處理缺失數據前,了解哪些變量有缺失值、數目有多少、是什么組合形式等信息非常有用。
1 列表顯示缺失值
mice包中的md.pattern()函數可生成一個以矩陣或數據框形式展示缺失值模式的表格。例:
library(VIM) library(mice) data(sleep,package = "VIM") md.pattern(sleep)
表中1和0顯示了缺失值模式,0表示變量的列中有缺失值,1則表示沒有缺失值。第一列表示各缺失值模式的實例個數,最后一列表示各模式中有缺失值的變量的個數。此處可以看到,有42個實例沒有缺失值,僅2個實例缺失了Span。數據集包含了總共 38個缺失值。最后一行給出了每個變量中缺失值的數目。
2 圖形探究缺失數據
VIM包提供了大量能可視化數據集中缺失值模式的函數,本節主要介紹其中幾個:aggr()、matrixplot()和scattMiss()。
aggr()函數不僅繪制每個變量的缺失值數,還繪制每個變量組合的缺失值數。
matrixplot()函數可生成展示每個實例數據的圖形。
marginplot()函數可生成一幅散點圖,在圖形邊界展示兩個變量的缺失值信息。
3 用相關性探索缺失值
指示變量替代數據集中的數據(1表示缺失,0表示存在),這樣生成的矩陣有時稱作影子矩陣。求這些指示變量間和它們與初始(可觀測)變量間的相關性,有助于觀察哪些變量常一起缺失,以及分析變量“缺失”與其他變量間的關系。
#以sleep數據集為例 x<-as.data.frame(abs(is.na(sleep))) #此時x為影子矩陣 y<-x[which(sd(x)>0)]#可提取含(但不全部是)缺失值的變量 cor(y)#可看出哪些變量常一起缺失 #缺失值變量與其他可觀察變量間的關系 cor(sleep,y,use="pairwise.complete.obs")4 理解缺失數據的來由和影響
識別缺失數據的數目、分布和模式有兩個目的:
(1)分析生成缺失數據的潛在機制;
(2)評價缺失數據對回答實質性問題的影響。
5 理性處理不完整數據
推理方法會根據變量間的數學或者邏輯關系來填補或恢復缺失值。
例:在sleep數據集中,變量Sleep是Dream和NonD變量的和。若知道了它們中任意兩個動物的得分,你便可以推導出第三個。
6 完整實例分析(行刪除)
在完整實例分析中,只有每個變量都包含了有效數據值的觀測才會保留下來做進一步的分析。實際上,這樣會導致包含一個或多個缺失值的任意一行都會被刪除,因此常稱作行刪除(listwise)、個案刪除(case-wise)或剔除。
#方法1 newdata<-mydata[complete.cases(mydata),] #方法2 newdata<-na.omit(mydata)7 多重插補
多重插補(MI)是一種基于重復模擬的處理缺失值的方法。R可利用Amelia、mice和mi包來執行插補。下面介紹mice包(利用鏈式方程的多遠插補)提供的方法,步驟為:
(1)函數mice()首先從一個包含缺失數據的數據框開始,然后返回一個包含多個(默認為5個)完整數據集的對象。每個完整數據集都是通過對原始數據框中的缺失數據進行插補而生成的。
(2)with()函數可依次對每個完整數據集應用統計模型(如線性模型或廣義線性模型)
(3)pool()函數將這些單獨的分析結果整合為一組結果
8 處理缺失值的其他方法
(1)成對刪除。觀測只是當它含缺失數據的變量涉及某個特定分析時才會被刪除。
(2)簡單(非隨機)插補。用某個值(如均值、中位數或眾數)來替換變量中的缺失值。
總結
以上是生活随笔為你收集整理的缺失值的处理——R语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s11杰斯一炮流出装 最强出装
- 下一篇: 联接与多张表的操作