Rで解析:欠損値を制するモノは解析も制す?「VIM」パッケージの紹介

データ内に潜む欠損値を把握することは重要な作業です。データが揃うとすぐに解析したくなりますが、まずは冷静に欠損値を把握してデータの傾向を改めて見つめてはいかがでしょうか。

本パッケージでは欠損値に関する情報を多くの表現で示すことができます。その中から、8つの表現方法とコマンドを紹介します。その他のコマンドはパッケージヘルプを参考ください。

パッケージバージョンは6.2.2。windows11のR version 4.2.2で確認しています。

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("VIM")

実行コマンドの紹介

パッケージから役に立ちそうな”aggr”と8つの出力コマンドを紹介します。詳細はコメントならびにパッケージヘルプを確認してください。

#パッケージの読み込み
library("VIM")

###データ例の作成#####
set.seed(1234)
n <- 50
TestData <- data.frame(Group = sample(paste0("Group", formatC(1:n, width = 2, flag = "0")),
                                      n, replace = TRUE),
                       Data1 = sample(c(NA, 1:10), n, replace = TRUE),
                       Data2 = sample(NA, n, replace = TRUE),
                       Data3 = sample(c(NA, 5:10), n, replace = TRUE),
                       Data4 = sample(c(NA, 7:10), n, replace = TRUE))

#&#33394;&#12398;&#35373;&#23450;
#&#33394;&#12398;&#36879;&#26126;&#24230;&#12434;&#35519;&#25972;:alphablend
DrowCol <- c("#4b61ba", alphablend("#a87963", 0.6))
########

#&#21508;&#12487;&#12540;&#12479;&#12398;&#27424;&#25613;&#20516;&#25968;&#12392;&#27424;&#25613;&#20516;&#12434;&#21547;&#12416;&#34892;&#12392;&#12487;&#12540;&#12479;&#12398;&#38306;&#20418;&#12434;&#34920;&#31034;:aggr&#12467;&#12510;&#12531;&#12489;
a <- aggr(TestData, col = DrowCol)
#&#32080;&#26524;&#12398;&#34920;&#31034;
a
Missings in variables:
Variable Count
Data1     6
Data2    50
Data3     3
Data4    15

#summary&#12467;&#12510;&#12531;&#12489;&#12391;&#24773;&#22577;&#12434;&#34920;&#31034;
summary(a)
Missings per variable: 
Variable Count
Group     0
Data1     6
Data2    50
Data3     3
Data4    15

Missings in combinations of variables: 
Combinations Count Percent
0:0:1:0:0    32      64
0:0:1:0:1     9      18
0:0:1:1:1     3       6
0:1:1:0:0     3       6
0:1:1:0:1     3       6

#&#38917;&#30446;&#12398;&#20986;&#29694;&#25968;&#12395;&#23550;&#12377;&#12427;&#27424;&#25613;&#20516;&#12434;&#21547;&#12416;&#38917;&#30446;&#25968;&#12434;&#26834;&#12464;&#12521;&#12501;&#12391;&#34920;&#31034;:barMiss&#12467;&#12510;&#12531;&#12489;
#&#20363;&#12360;&#12400;&#19979;&#35352;&#12398;&#12487;&#12540;&#12479;&#12391;&#12399;
#&#38917;&#30446;  Data1 Data2
#&#38917;&#30446;1   1     2
#&#38917;&#30446;1   1     NA
#&#20986;&#29694;&#25968;(&#38738;&#12398;&#12496;&#12540;)2&#12391;&#27424;&#25613;&#20516;(&#12464;&#12524;&#12540;&#12398;&#12496;&#12540;)1&#12395;&#12394;&#12426;&#12414;&#12377;
barMiss(TestData[, c(1, 4, 5)], only.miss = FALSE, xlab ="", col = DrowCol)

#&#27424;&#25613;&#20516;&#12434;&#21547;&#12417;&#12390;&#25955;&#24067;&#22259;&#12391;&#34920;&#31034;:marginmatrix&#12467;&#12510;&#12531;&#12489;
#&#27424;&#25613;&#20516;&#12398;&#33394;&#12399;col&#12458;&#12503;&#12471;&#12519;&#12531;&#12398;2&#30058;&#30446;&#12395;&#25351;&#23450;&#12375;&#12383;&#33394;
marginmatrix(TestData[, c(2, 4)], col = c("#4b61ba", alphablend("#a87963", 0.6)), pch = c(17, 16))

#2&#35201;&#32032;&#12434;&#27424;&#25613;&#20516;&#12398;&#24773;&#22577;&#12434;&#21547;&#12417;&#12390;&#25955;&#24067;&#22259;&#12391;&#34920;&#31034;:marginplot&#12467;&#12510;&#12531;&#12489;
#&#27424;&#25613;&#20516;&#12398;&#33394;&#12399;col&#12458;&#12503;&#12471;&#12519;&#12531;&#12398;2&#30058;&#30446;&#12395;&#25351;&#23450;&#12375;&#12383;&#33394;
marginplot(TestData[, c(2, 4)], col = c("#4b61ba", alphablend("#a87963", 0.6)), pch = c(17, 16))

#&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:matrixplot&#12467;&#12510;&#12531;&#12489;
matrixplot(TestData, sortby = colnames(TestData[1]),
           col = "#4b61ba", fixup = FALSE)

#&#12514;&#12470;&#12452;&#12463;&#12503;&#12525;&#12483;&#12488;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:mosaicMiss&#12467;&#12510;&#12531;&#12489;
#&#27424;&#25613;&#20516;&#12398;&#33394;&#12399;col&#12458;&#12503;&#12471;&#12519;&#12531;&#12398;2&#30058;&#30446;&#12395;&#25351;&#23450;&#12375;&#12383;&#33394;
mosaicMiss(TestData[, 1:2], col = c("#4b61ba", alphablend("#a87963", 0.6)))

#&#24179;&#34892;&#32218;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:parcoordMiss&#12467;&#12510;&#12531;&#12489;
#&#27424;&#25613;&#20516;&#12398;&#33394;&#12399;col&#12458;&#12503;&#12471;&#12519;&#12531;&#12398;2&#30058;&#30446;&#12395;&#25351;&#23450;&#12375;&#12383;&#33394;
parcoordMiss(TestData[, 1:2], col = c("#4b61ba", alphablend("#a87963", 0.6)))

#&#31665;&#12402;&#12370;&#22259;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:pbox&#12467;&#12510;&#12531;&#12489;
pbox(TestData, col = DrowCol)

#&#23494;&#24230;&#20998;&#24067;&#12434;&#21547;&#12417;&#12383;&#25955;&#24067;&#22259;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:scattmatrixMiss&#12467;&#12510;&#12531;&#12489;
#&#27604;&#36611;&#23550;&#35937;&#12399;highlight&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#25351;&#23450;
scattmatrixMiss(TestData, col = DrowCol,
                highlight = colnames(TestData[4]))

出力例

・項目の出現数に対する欠損値を含む項目数を棒グラフで表示

VIM_fig1

・欠損値を含めて散布図で表示

VIM_fig2

・2要素を欠損値の情報を含めて散布図で表示

VIM_fig3

・ヒートマップで欠損値を表示

VIM_fig4

・モザイクプロットで欠損値を表示

VIM_fig5

・平行線で欠損値を表示

VIM_fig6

・箱ひげ図で欠損値を表示

VIM_fig7

・密度分布を含めた散布図で欠損値を表示

VIM_fig8

少しでも、あなたの解析が楽になりますように!!

Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.
タイトルとURLをコピーしました