README.md

BalanceR 0.8.0

R package for balance checking using standardized biases.

CRAN status

Author/Maintainer: Jaehyun Song (https://www.jaysong.net / tintstyle@gmail.com)

更新履歴

Standardized Biasについて

実験群として統制群 (Control)と処置群 (Treat)がある場合、共変量Xの標準化差分は以下のように計算できます。

Xバーは平均値、s二乗は分散を意味します。ちなみにダミー変数の場合、以下のようになります。({BalanceR}では変数が0/1のみで構成されている場合、この式で標準化差分を計算します。)

分野によって基準は変わりうると思いますが、標準化差分の絶対値が3, 5, 10, 25未満ならバランスが取れていると判断します。社会科学では見る例だと10か25が多いような気がします。

インストール

devtools::install_github("JaehyunSong/BalanceR")
# または
remotes::install_github("JaehyunSong/BalanceR")

使い方

バランスチェック

Input

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

# ダミーデータの読み込み
data(BlcDF)

# 回答者の性別 (Sex)、年齢 (Age)、教育水準 (Educ)、結婚有無 (Marriae)のバランスチェック
# 実験群を示す変数はGroup
BlcChk <- BalanceR(data = BlcDF, group = Group,
                   cov  = c(Sex, Age, Educ, Marriage))

print(BlcChk, digits = 3)

Output

  Covariate Mean:Control SD:Control Mean:Treat1 SD:Treat1 Mean:Treat2
1       Sex        0.391      0.488       0.403     0.491       0.408
2       Age       41.941      9.863      41.062     9.952      41.688
3      Educ        3.213      0.902       3.245     0.888       3.226
4  Marriage        0.438      0.496       0.411     0.492       0.402
  SD:Treat2 SB:Control-Treat1 SB:Control-Treat2 SB:Treat1-Treat2
1     0.492            -2.507            -3.527           -1.021
2     9.366             8.912             2.561           -6.295
3     0.901            -3.587            -1.466            2.154
4     0.491             5.458             7.243            1.783

{magrittr}パッケージやその他パイプ演算子(%>%)を用いるパッケージ ({tidyverse}、{dplyr}、{ggplot2}など)が読み込まれているなら、パイプ演算子も使えます。

Input

library(tidyverse)

BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage))

共変量名を指定することも可能です。一部のみの指定も可能です。

Input

BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Gender = Sex, Age, Education = Educ, Marriage))

Output

   Covariate Mean:Control SD:Control Mean:Treat1 SD:Treat1 Mean:Treat2
1     Gender        0.391      0.488       0.403     0.491       0.408
2        Age       41.941      9.863      41.062     9.952      41.688
3  Education        3.213      0.902       3.245     0.888       3.226
4   Marriage        0.438      0.496       0.411     0.492       0.402
  SD:Treat2 SB:Control-Treat1 SB:Control-Treat2 SB:Treat1-Treat2
1     0.492            -2.507            -3.527           -1.021
2     9.366             8.912             2.561           -6.295
3     0.901            -3.587            -1.466            2.154
4     0.491             5.458             7.243            1.783

結果画面のカスタマイズは現在のところ、小数点の桁数 (digits)と標準化差分のみ表示 (only.SB)です。

デフォルトはdigits = 3only.SB = FALSEとなります。

Input

## 結果を小数点2桁まで表示させる
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    print(digits = 2)

Output

  Covariate Mean:Control SD:Control Mean:Treat1 SD:Treat1 Mean:Treat2 SD:Treat2 SB:Control-Treat1 SB:Control-Treat2 SB:Treat1-Treat2
1       Sex         0.39       0.49        0.40      0.49        0.41      0.49             -2.51             -3.53            -1.02
2       Age        41.94       9.86       41.06      9.95       41.69      9.37              8.87              2.63            -6.48
3      Educ         3.21       0.90        3.25      0.89        3.23      0.90             -3.61             -1.47             2.14
4  Marriage         0.44       0.50        0.41      0.49        0.40      0.49              5.46              7.24             1.78

各共変量の平均値・標準偏差が必要ない場合、only.SB = TRUEを指定すると以下のように結果が返ってきます。

Input

## Standardized biasのみ表示させる
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    print(only.SB = TRUE)

Output

  Covariate SB:Control-Treat1 SB:Control-Treat2 SB:Treat1-Treat2
1       Sex            -2.507            -3.527           -1.021
2       Age             8.912             2.561           -6.295
3      Educ            -3.587            -1.466            2.154
4  Marriage             5.458             7.243            1.783

標準化バイアスは符号が重要ではないため絶対値に変換し、グループのペアごとの標準化バイアスの中で最大値を確認するにはabssimplify引数をTRUEにしてください。グループが多くなると標準化バイアスが計算されるペア数は急増します。この場合、図表にするのが非常に困難であるため、simplify = TRUEの指定をオススメします。

Input

BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>% 
    print(abs = TRUE, simplify = TRUE)

Output

  Covariate Mean:Control SD:Control Mean:Treat1 SD:Treat1 Mean:Treat2 SD:Treat2 Maximum_SB
1       Sex        0.391      0.488       0.403     0.491       0.408     0.492      3.527
2       Age       41.941      9.863      41.062     9.952      41.688     9.366      8.872
3      Educ        3.213      0.902       3.245     0.888       3.226     0.901      3.614
4  Marriage        0.438      0.496       0.411     0.492       0.402     0.491      7.243

記述統計なし、絶対値変換、最大標準化バイアスのみ出力する場合、summary()関数が便利です。print(only.SB = TRUE, abs = TRUE, simplify = TRUE)と同じ機能です。

BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>% 
    summary(digits = 5)

Output

  Covariate Abs_Maximum_SB
1       Sex        3.52742
2       Age        8.87234
3      Educ        3.61407
4  Marriage        7.24323

可視化

可視化も可能です。カスタマイズ可能な部分は垂直線の位置 (vline)、点の大きさ (point.size)、文字の大きさ (text.size)のみです。

デフォルトはvline = c(3, 5, 10)point.size = 2.5text.size = 12です。

## プロットのみ表示
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    plot()

## 垂直線を引く
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    plot(vline = c(10))

## 点と文字の大きさを変更
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    plot(point.size = 5, text.size = 18)

## 絶対値変換、標準化バイアスの最大値のみ出力
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    plot(point.size = 5, text.size = 18, abs = TRUE, simplify = TRUE)

白黒に出力する場合、color = FALSEを指定してください。

## 白黒に変更
BlcDF %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage)) %>%
    plot(point.size = 5, text.size = 18, color = FALSE)

図はggplot2で作成されているので、+で繋げれば、自由にカスタマイズできます。

## もっともっとカスタマイズしたい
BlcDF %>% 
    BalanceR(group = Group, 
             cov   = c(Sex, Age, Educ, Marriage)) %>% 
    plot(point.size = 5, text.size = 18) +
    labs(x = "標準化差分", y = "共変量") +
    theme_bw(base_family = "HiraKakuProN-W3") +
    theme(legend.position = "bottom",
          text = element_text(size = 18))

2つのBalanceRオブジェクトを同時に可視化することもできます。

BlcChk1 <- BlcDF[1:1000, ] %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage))

BlcChk2 <- BlcDF[1001:2000, ] %>%
    BalanceR(group = Group,
             cov   = c(Sex, Age, Educ, Marriage))

plot(BlcChk1, compare = BlcChk2, 
     names = c("First 1000 Samples", "Second 1000 Samples"),
     abs = TRUE)

今後の予定



JaehyunSong/BalanceR documentation built on March 12, 2023, 4:51 p.m.