Rで解析:NA値の確認と検出にも便利です「naniar」パッケージ

RでGoogle Analytics
スポンサーリンク

NA値の確認と検出に大変便利なコマンドと複数のプロットコマンドが収録されている大変便利なパッケージの紹介です。 NA値の確認と検出に特化しているのでプロットをカラフルにする必要はないと思いますが、ggplot2のコマンドでプロットの体裁を調整することが可能です。

パッケージバージョンは0.6.1。実行コマンドはwindows 11のR version 4.1.2で確認しています。


スポンサーリンク

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

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

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

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("naniar")
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

###データ例の作成#####
set.seed(12345)
n <- 300
TestData <- tibble(Group = sample(paste0("Group", 1:2), n,
                                  replace = TRUE),
                   Data1 = sample(c(1:50, NA), n, replace = TRUE),
                   Data2 = sample(c(100:110, NA), n, replace = TRUE))
#&#12487;&#12540;&#12479;&#20869;&#23481;&#12398;&#30906;&#35469;
TestData
# A tibble: 300 x 3
  Group  Data1 Data2
  <chr>  <int> <int>
1 Group1    18   103
2 Group1    22   102
3 Group1    35   107
4 Group2    37   109
5 Group2    25   104
6 Group1    49   102
7 Group1    37   110
8 Group2    30   100
9 Group2     7   106
10 Group1    26    NA
# ... with 290 more rows

#&#27424;&#25613;&#20516;&#12398;&#25968;&#12434;&#25968;&#12360;&#12427;
TestData %>%
  count(is.na(.))
# A tibble: 4 x 2
# A tibble: 4 x 2
  `is.na(.)`[,"Group"] [,"Data1"] [,"Data2"]     n
  <lgl>                <lgl>      <lgl>      <int>
1 FALSE                FALSE      FALSE        267
2 FALSE                FALSE      TRUE          25
3 FALSE                TRUE       FALSE          7
4 FALSE                TRUE       TRUE           1
########

#&#27424;&#25613;&#20516;&#12398;&#25968;&#12434;&#25351;&#27161;&#12372;&#12392;&#12395;&#34920;&#31034;:miss_var_summary&#12467;&#12510;&#12531;&#12489;
miss_var_summary(TestData)
# A tibble: 3 x 3
  variable n_miss pct_miss
  <chr>     <int>    <dbl>
1 Data2        26     8.67
2 Data1         8     2.67
3 Group         0     0

#&#27424;&#25613;&#20516;&#12398;&#25968;&#12434;&#12465;&#12540;&#12473;&#12372;&#12392;&#12395;&#34920;&#31034;:miss_var_summary&#12467;&#12510;&#12531;&#12489;
miss_case_summary(TestData)
# A tibble: 300 x 3
    case n_miss pct_miss
    <int>  <int>    <dbl>
1    95      2     66.7
2    10      1     33.3
3    11      1     33.3
4    17      1     33.3
5    19      1     33.3
6    58      1     33.3
7    71      1     33.3
8    77      1     33.3
9    84      1     33.3
10    90      1     33.3
# ... with 290 more rows

#&#12487;&#12540;&#12479;&#12398;&#27424;&#25613;&#20516;&#12398;&#20301;&#32622;&#12434;&#34920;&#31034;:as_shadow&#12467;&#12510;&#12531;&#12489;
as_shadow(TestData)
# A tibble: 300 x 3
  Group_NA Data1_NA Data2_NA
  <fct>    <fct>    <fct>   
1 !NA      !NA      !NA     
2 !NA      !NA      !NA     
3 !NA      !NA      !NA     
4 !NA      !NA      !NA     
5 !NA      !NA      !NA     
6 !NA      !NA      !NA     
7 !NA      !NA      !NA     
8 !NA      !NA      !NA     
9 !NA      !NA      !NA     
10 !NA      !NA      NA      
# ... with 290 more rows

#&#12487;&#12540;&#12479;&#20869;&#23481;&#12392;&#21512;&#12431;&#12379;&#12390;&#27424;&#25613;&#20516;&#12398;&#20301;&#32622;&#12434;&#30906;&#35469;:nabular&#12467;&#12510;&#12531;&#12489;
nabular(TestData, only_miss = FALSE)
# A tibble: 300 x 6
  Group  Data1 Data2 Group_NA Data1_NA Data2_NA
  <chr>  <int> <int> <fct>    <fct>    <fct>   
1 Group1    18   103 !NA      !NA      !NA     
2 Group1    22   102 !NA      !NA      !NA     
3 Group1    35   107 !NA      !NA      !NA     
4 Group2    37   109 !NA      !NA      !NA     
5 Group2    25   104 !NA      !NA      !NA     
6 Group1    49   102 !NA      !NA      !NA     
7 Group1    37   110 !NA      !NA      !NA     
8 Group2    30   100 !NA      !NA      !NA     
9 Group2     7   106 !NA      !NA      !NA     
10 Group1    26    NA !NA      !NA      NA      
# ... with 290 more rows

###&#20363;&#12360;&#12400;nabular&#12467;&#12510;&#12531;&#12489;&#12392;ggplot2&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;#####
TestData %>%
  bind_shadow() %>%
  ggplot(aes(x = Data1,
             fill = Data2_NA)) + 
  geom_density(alpha = 0.2) +
  scale_fill_manual(values = c("#a87963", "red"))
########

#&#27424;&#25613;&#20516;&#12434;&#12503;&#12525;&#12483;&#12488;&#12391;&#34920;&#31034;:vis_miss&#12467;&#12510;&#12531;&#12489;
#ggplot2&#12398;&#12467;&#12510;&#12531;&#12489;&#12364;&#36969;&#24540;&#21487;&#33021;&#12391;&#12377;&#12290;
vis_miss(TestData)

#upset&#24418;&#24335;&#12391;&#27424;&#25613;&#20516;&#12434;&#34920;&#31034;:gg_miss_upset&#12467;&#12510;&#12531;&#12489;
#&#12300;UpSetR&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;:https://www.karada-good.net/analyticsr/r-152/
gg_miss_upset(TestData, sets.bar.color = c("#a87963", "red"))

#&#27424;&#25613;&#20516;&#12434;&#12496;&#12540;&#12391;&#34920;&#31034;:gg_miss_var&#12467;&#12510;&#12531;&#12489;
#&#32057;&#20171;&#12496;&#12540;&#12472;&#12519;&#12531;&#12391;&#12399;&#20961;&#20363;&#34920;&#31034;&#12395;&#38306;&#12377;&#12427;Warning message&#12364;&#34920;&#31034;&#12373;&#12428;&#12414;&#12377;
#&#38750;&#34920;&#31034;&#12395;&#12377;&#12427;&#12383;&#12417;&#12395;theme&#12467;&#12510;&#12531;&#12489;&#12391;&#20961;&#20363;&#12434;&#38750;&#34920;&#31034;&#12395;&#12375;&#12390;&#12356;&#12414;&#12377;
gg_miss_var(TestData, facet = Group) +
  theme(legend.position = "none")

#&#27424;&#25613;&#20516;&#12398;&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;&#12375;&#12390;&#12503;&#12525;&#12483;&#12488;:geom_miss_point&#12467;&#12510;&#12531;&#12489;
ggplot(TestData, aes(x = Data1, y = Data2)) +
  geom_miss_point() +
  facet_grid(~Group)

#&#27424;&#25613;&#20516;&#12434;&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12391;&#34920;&#31034;:gg_miss_fct&#12467;&#12510;&#12531;&#12489;
#&#34920;&#31034;&#12377;&#12427;&#22793;&#25968;&#12434;&#25351;&#23450;:fct&#12458;&#12503;&#12471;&#12519;&#12531;
gg_miss_fct(TestData, fct = Group)

#&#12393;&#12398;&#12487;&#12540;&#12479;&#12364;&#27424;&#25613;&#20516;&#12434;&#21547;&#12416;&#12363;&#34920;&#31034;:gg_miss_which&#12467;&#12510;&#12531;&#12489;
gg_miss_which(TestData) +
  scale_fill_manual(values = c("#a87963", "red"))

出力例

・例えばnabularコマンドとggplot2の組み合わせ

・vis_missコマンド

・gg_miss_upsetコマンド

・その他、 実行コマンドで出力可能なプロット


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

タイトルとURLをコピーしました