?? ggmice | 用這只可愛的小老鼠來填補你的缺失值吧!~

寫在前面

我們在處理數(shù)據(jù)的時候常常會遇到存在缺失值(NA)的情況,如何處理就仁者見仁,智者見智了。??
簡單粗暴的方法可能就是行刪除法(listwise)或者個案刪除法(case-wise)了,這種方法在缺失值比較少的情況下比較適用,但在NA較多的情況下可能就會丟失過多信息導(dǎo)致無法繼續(xù)分析。??
本期我們介紹一下mice包ggmice包這兩只可愛的小老鼠,全名Multivariate Imputation by Chained Equations, mice,即鏈?zhǔn)椒匠潭嘀靥钛a。??

一張圖總結(jié)基本原理,嘿嘿。??

用到的包

rm(list = ls())
library(tidyverse)
library(mice) 
library(ggmice)

示例數(shù)據(jù)

這里我們使用一下示例數(shù)據(jù)airquality,再在其中添加一些缺失值。

dat <- airquality
dat[4:9,3] <- rep(NA,6)
dat[1:4,4] <- NA

數(shù)據(jù)概覽

4.1 缺失值查看

這里面我們一共有6個變量,其中4個存在缺失值。??

summary(dat)

4.2 缺失值可視化

Note! ggmice提供了一種NA值的可視化方法,一目了然,nice! ??

plot_pattern(dat,
             square = F,
             rotate = F)

4.3 influx-outflux plot

這里和大家簡單介紹一下這個influx-outflux plot,總的來說評估了缺失數(shù)據(jù)其他變量聯(lián)系程度。??
一般來說,在建模時,influx以及outflux越大越好。??

plot_flux(dat,
          label = F,
          caption = F)

可視化一下吧

5.1 連續(xù)變量

這里我們對連續(xù)變量缺失值進行一下可視化,可以看到紅色的為缺失值。??

ggmice(dat, aes(Ozone, Solar.R))+
  geom_point()

5.2 分類變量

接著我們對分類變量缺失值進行一下可視化,紅色的為缺失值。??

ggmice(dat, aes(Month, Solar.R)) +
  geom_point()

5.3 分面展示

ggmice(dat, aes(Month, Solar.R)) +
  geom_point() +
  facet_wrap(~ Month == 5,
             # labeller = label_both
             )

mice包填補缺失值

6.1 填補缺失值

在這里我們生成幾個填補缺失值后的數(shù)據(jù),m默認是5,為了減小計算量,這里我設(shè)置成3。??
Note! 可選method包括:??

? pmm,
? logreg,
? polyreg,
? polr

imp <- mice(dat, m = 3, method = "pmm")

6.2 連續(xù)變量缺失值填補后可視化

我們再看一下填補缺失值后的散點圖吧,紅色的為缺失值填補后。??

ggmice(imp, aes(Ozone, Solar.R))+
  geom_point()

6.3 分類變量缺失值填補后可視化

ggmice(imp, aes(Month, Solar.R)) +
  geom_point()

6.4 分面展示

ggmice(dat, aes(Month, Solar.R)) +
  geom_point() +
  facet_wrap(~ Month == 5,
             # labeller = label_both
             )

填補數(shù)據(jù)集的可視化

7.1 dotplot

我們之前設(shè)置了m = 3,這里我們看一下3個數(shù)據(jù)集的NA填補情況。??

ggmice(imp, aes(x = .imp, y = Temp)) +
  geom_jitter(height = 0, width = 0.25) +
  labs(x = "Imputation number")

7.2 boxplot

ggmice(imp, aes(x = .imp, y = Temp)) + 
  geom_jitter(height = 0, width = 0.25) +
  geom_boxplot(width = 0.5, size = 1, alpha = 0.75, outlier.shape = NA) +
  labs(x = "Imputation number")

算法收斂

看來default = 5是有原因的,哈哈哈哈哈哈!??

plot_trace(imp,
#           "Temp"
           )

<img src="https://upload-images.jianshu.io/upload_images/24475539-a2d7dc19002b363b.png" alt="甜筒" style="zoom:25%;" />

<center>最后祝大家早日不卷!~</center>


點個在看吧各位~ ?.???? ??? ?

<center> <b>?? 往期精彩 <b> </center>

?? <font size=1>?? ComplexHeatmap | 顏狗寫的高顏值熱圖代碼!</font>
?? <font size=1>?? ComplexHeatmap | 你的熱圖注釋還擠在一起看不清嗎!?</font>
?? <font size=1>?? Google | 谷歌翻譯崩了我們怎么辦?。浚ǜ酵昝澜鉀Q方案)</font>
?? <font size=1>?? scRNA-seq | 吐血整理的單細胞入門教程</font>
?? <font size=1>?? NetworkD3 | 讓我們一起畫個動態(tài)的?;鶊D吧~</font>
?? <font size=1>?? RColorBrewer | 再多的配色也能輕松搞定!~</font>
?? <font size=1>?? rms | 批量完成你的線性回歸</font>
?? <font size=1>?? CMplot | 完美復(fù)刻Nature上的曼哈頓圖</font>
?? <font size=1>?? Network | 高顏值動態(tài)網(wǎng)絡(luò)可視化工具</font>
?? <font size=1>?? boxjitter | 完美復(fù)刻Nature上的高顏值統(tǒng)計圖</font>
?? <font size=1>?? linkET | 完美解決ggcor安裝失敗方案(附教程)</font>
?? <font size=1>......</font>

本文由mdnice多平臺發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容