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))
#データ内容の確認
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

#欠損値の数を数える
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
########

#欠損値の数を指標ごとに表示:miss_var_summaryコマンド
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

#欠損値の数をケースごとに表示:miss_var_summaryコマンド
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

#データの欠損値の位置を表示:as_shadowコマンド
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

#データ内容と合わせて欠損値の位置を確認:nabularコマンド
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

###例えばnabularコマンドとggplot2の組み合わせ#####
TestData %>%
  bind_shadow() %>%
  ggplot(aes(x = Data1,
             fill = Data2_NA)) + 
  geom_density(alpha = 0.2) +
  scale_fill_manual(values = c("#a87963", "red"))
########

#欠損値をプロットで表示:vis_missコマンド
#ggplot2のコマンドが適応可能です。
vis_miss(TestData)

#upset形式で欠損値を表示:gg_miss_upsetコマンド
#「UpSetR」パッケージ:https://www.karada-good.net/analyticsr/r-152/
gg_miss_upset(TestData, sets.bar.color = c("#a87963", "red"))

#欠損値をバーで表示:gg_miss_varコマンド
#紹介バージョンでは凡例表示に関するWarning messageが表示されます
#非表示にするためにthemeコマンドで凡例を非表示にしています
gg_miss_var(TestData, facet = Group) +
  theme(legend.position = "none")

#欠損値のデータを表示してプロット:geom_miss_pointコマンド
ggplot(TestData, aes(x = Data1, y = Data2)) +
  geom_miss_point() +
  facet_grid(~Group)

#欠損値をヒートマップで表示:gg_miss_fctコマンド
#表示する変数を指定:fctオプション
gg_miss_fct(TestData, fct = Group)

#どのデータが欠損値を含むか表示:gg_miss_whichコマンド
gg_miss_which(TestData) +
  scale_fill_manual(values = c("#a87963", "red"))

出力例

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

・vis_missコマンド

・gg_miss_upsetコマンド

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


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

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