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