
R語言處理缺失數據的高級方法
主要用到VIM和mice包
install.packages(c("VIM","mice"))
1.處理缺失值的步驟
步驟:
(1)識別缺失數據;
(2)檢查導致數據缺失的原因;
(3)刪除包含缺失值的實例或用合理的數值代替(插補)缺失值
缺失值數據的分類:
(1)完全隨機缺失:若某變量的缺失數據與其他任何觀測或未觀測變量都不相關,則數據為完全隨機缺失(MCAR)。
(2)隨機缺失:若某變量上的缺失數據與其他觀測變量相關,與它自己的未觀測值不相關,則數據為隨機缺失(MAR)。
(3)非隨機缺失:若缺失數據不屬于MCAR或MAR,則數據為非隨機缺失(NIMAR)。
2.識別缺失值
NA:代表缺失值;
NaN:代表不可能的值;
Inf:代表正無窮;
-Inf:代表負無窮。
is.na():識別缺失值;
is.nan():識別不可能值;
is.infinite():無窮值。
is.na()、is.nan()和is.infinte()函數的返回值示例
xis.na(x)is.nan(x)is.infinite(x)
x<-NATRUEFALSEFALSE
x<-0/0TRUETRUEFALSE
x<-1/0FALSEFALSETRUE
complete.cases()可用來識別矩陣或數據框中沒有缺失值的行,若每行都包含完整的實例,則返回TRUE的邏輯向量,若每行有一個或多個缺失值,則返回FALSE;
3.探索缺失值模式
(1)列表顯示缺失值
mice包中的md.pattern()函數可以生成一個以矩陣或數據框形式展示缺失值模式的表格
library(mice)
data(sleep,package="VIM")
md.pattern(sleep)
(2)圖形探究缺失數據
VIM包中提供大量能可視化數據集中缺失值模式的函數:aggr()、matrixplot()、scattMiss()
library("VIM")
aggr(sleep,prop=FALSE,numbers=TRUE)
library("VIM")
aggr(sleep,prop=TRUE,numbers=TRUE)#用比例代替了計數
matrixplot()函數可生成展示每個實例數據的圖形
matrixplot(sleep)
淺色表示值小,深色表示值大;默認缺失值為紅色。
marginplot()函數可生成一幅散點圖,在圖形邊界展示兩個變量的缺失值信息。
library("VIM")
marginplot(sleep[c("Gest","Dream")],pch=c(20),col=c("darkgray","red","blue"))
(3)用相關性探索缺失值
影子矩陣:指示變量替代數據集中的數據(1表示缺失,0表示存在),這樣生成的矩陣有時稱作影子矩陣。
求這些指示變量間和它們與初始(可觀測)變量間的相關性,有且于觀察哪些變量常一起缺失,以及分析變量“缺失”與其他變量間的關系。
head(sleep)
str(sleep)
x<-as.data.frame(abs(is.na(sleep)))
head(sleep,n=5)
head(x,n=5)
y<-x[which(sd(x)>0)]
cor(y)
cor(sleep,y,use="pairwise.complete.obs")
4.理解缺失值數據的來由和影響
識別缺失數據的數目、分布和模式有兩個目的:
(1)分析生成缺失數據的潛在機制;
(2)評價缺失數據對回答實質性問題的影響。
即:
(1)缺失數據的比例有多大?
(2)缺失數據是否集中在少數幾個變量上,抑或廣泛存在?
(3)缺失是隨機產生的嗎?
(4)缺失數據間的相關性或與可觀測數據間的相關性,是否可以表明產生缺失值的機制呢?
若缺失數據集中在幾個相對不太重要的變量上,則可以刪除這些變量,然后再進行正常的數據分析;
若有一小部分數據隨機分布在整個數據集中(MCAR),則可以分析數據完整的實例,這樣仍可得到可靠有效的結果;
若以假定數據是MCAR或MAR,則可以應用多重插補法來獲得有鏟的結論。
若數據是NMAR,則需要借助專門的方法,收集新數據,或加入一個相對更容易、更有收益的行業。
5.理性處理不完整數據
6.完整實例分析(行刪除)
函數complete.cases()、na.omit()可用來存儲沒有缺失值的數據框或矩陣形式的實例(行):
newdata<-mydata[complete.cases(mydata),]
newdata<-na.omit(mydata)
options(digits=1)
cor(na.omit(sleep))
cor(sleep,use="complete.obs")
fit<-lm(Dream~Span+Gest,data=na.omit(sleep))
summary(fit)
7.多重插補
多重插補(MI)是一種基于重復模擬的處理缺失值的方法。
MI從一個包含缺失值的數據集中生成一組完整的數據集。每個模擬數據集中,缺失數據將使用蒙特卡洛方法來填補。
此時,標準的統計方法便可應用到每個模擬的數據集上,通過組合輸出結果給出估計的結果,以及引入缺失值時的置信敬意。
可用到的包Amelia、mice和mi包
mice()函數首先從一個包含缺失數據的數據框開始,然后返回一個包含多個完整數據集的對象。每個完整數據集都是通過對原始數據框中的缺失數據進行插而生成的。
with()函數可依次對每個完整數據集應用統計模型
pool()函數將這些單獨的分析結果整合為一組結果。
最終模型的標準誤和p值都將準確地反映出由于缺失值和多重插補而產生的不確定性。
基于mice包的分析通常符合以下分析過程:
library(mice)
imp<-mice(mydata,m)
fit<-with(imp,analysis)
pooled<-pool(fit)
summary(pooled)
mydata是一個飲食缺失值的矩陣或數據框;imp是一個包含m個插補數據集的列表對象,同時還含有完成插補過程的信息,默認的m=5analysis是一個表達式對象,用來設定應用于m個插補的統計分析方法。方法包括做線回歸模型的lm()函數、做廣義線性模型的glm()函數、做廣義可加模型的gam()、及做負二項模型的nbrm()函數。fit是一個包含m個單獨統計分析結果的列表對象;pooled是一個包含這m個統計分析平均結果的列表對象。</pre><pre name="code" class="plain">library(mice)
data(sleep,package="VIM")
imp<-mice(sleep,seed=1234)
fit<-with(imp,lm(Dream~Span+Gest))
pooled<-pool(fit)
summary(pooled)
impimp$imp$Dream
利用complete()函數可觀察m個插補數據集中的任意一個,格式為:complete(imp,action=#)
eg:
dataset3<-complete(imp,action=3)
dataset3
8.處理缺失值的其他方法
(1)成對刪除
處理含缺失值的數據集時,成對刪除常作為行刪除的備選方法使用。對于成對刪除,觀測只是當它含缺失數據的變量涉及某個特定分析時才會被刪除。
cor(sleep,use="pairwise.complete.obs")
雖然成對刪除似乎利用了所有可用數據,但實際上每次計算只用了不同的數據集,這將會導致一些扭曲,故建議不要使用該方法。
(2)簡單(非隨機)插補
簡單插補,即用某個值(如均值、中位數或眾數)來替換變量中的缺失值。注意,替換是非隨機的,這意味著不會引入隨機誤差(與多重襯托不同)。
簡單插補的一個優點是,解決“缺失值問題”時不會減少分析過程中可用的樣本量。雖然 簡單插補用法簡單,但對于非MCAR的數據會產生有偏的結果。若缺失數據的數目非常大,那么簡單插補很可能會低估標準差、曲解變量間的相關性,并會生成不正確的統計檢驗的p值。應盡量避免使用該方法。
常用方法:Sweave和odfWeave。
Sweave包可將R代碼及輸出嵌入到LaTeX文檔中,從而得到 PDF、PostScript和DVI格式的高質量排版報告。
odfWeave包可將R代碼及輸出嵌入到ODF(Open Documents Format)的文檔中。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25