計量経済学の知見をより深めるべく
を基に因果推論と計量経済学を学んでいく。
3. 介入効果を測るための回帰分析
選択バイアスの影響を取り除きつつ介入効果を推測できる基本的な方法が回帰分析である。目的変数に対して
で表す。回帰切片および回帰係数は母集団の特性値の推定量である。母集団においておよびその条件付期待値と回帰式の関係性は
を満たす。
3.1 効果分析のための回帰分析
前節で学んだように、介入効果は施策を行った場合と行わなかった場合の各結果の期待値の差分で表される。効果分析のための回帰分析ではデータに存在する選択バイアスの影響を可能な限り減らし、その差分を推定する。
効果分析のための回帰分析では
(1) | 目的変数 | 介入による効果を測定する対象となる変数 | |
(2) | 介入変数 | 施策の有無を表す変数(ダミー変数) | |
(3) | 共変量 | 選択バイアスの発生源と分析者が想定する変数 |
と各変数を呼ぶ。*1。
具体的には
とモデル化する。
3.1.1 回帰分析による効果の推定
この回帰モデルを前提とすれば介入効果は、
を踏まえれば
が成り立つ。すなわち母数の推定値が介入効果の値を示すことになり、それ以外は攪乱母数である。
3.1.2 回帰分析における有意差検定
の推定値が介入効果の推定値である以上、その有意性について検定を行う必要がある。古典的回帰モデルであれば、検定を施せばよい*2。
########################################## ### 重回帰分析により介入効果を推定する ### ########################################## ### 推定実施 # バイアスのあるデータを利用 biased_reg <- lm(data = biased_data,formula = formula(spend ~ treatment + history)) summary(biased_reg) # RのVerが異なるので乱数を用いたサンプルではテキストと結果が違うのかも summary(biased_reg)$coefficients # β^ = 0.835711808, p-value = 7.820525e-08 なので恐らく効果あり
3.2 回帰分析におけるバイアス
回帰分析で選択バイアスの影響を可能な限り避けて推定を行うには、共変量を正しく選択する必要がある。
実データを用いて検討してみる。
### 回帰分析におけるバイアスを検討する ## RCTデータでの回帰とバイアスデータでの回帰を比較する # (1) 単回帰の場合 rct_reg <- lm(data = male_df, formula = spend ~ treatment) nonrct_reg <- lm(data = biased_data, formula = spend ~ treatment) rct_reg_coef <- summary(rct_reg) %>% tidy() nonrct_reg_coef <- summary(nonrct_reg) %>% tidy() nonrct_reg_coef[2,2] - rct_reg_coef[2,2] # この差分0.105が選択バイアス # (2) 重回帰:共変量recency, channel, historyを加える rct_mreg <- lm(data = male_df, formula = formula(spend ~ treatment + recency + channel + history)) nonrct_mreg <- lm(data = biased_data, formula = formula(spend ~ treatment + recency + channel + history)) rct_mreg_coef <- rct_mreg %>% tidy() nonrct_mreg_coef <- nonrct_mreg %>% tidy() print(paste0("RCTデータによる介入効果推定値は",round(rct_reg_coef[2,2],4),"であった。")) print(paste0("バイアスデータによる介入効果推定値は",round(nonrct_reg_coef[2,2],4),"であった。")) print(paste0("バイアスデータによる共変量を加えた介入効果推定値は",round(nonrct_mreg_coef[2,2],4),"であった。")) # RCTデータによる介入効果の推定値は0.7698であった。 # バイアスデータによる介入効果の推定値は0.875であった。 # バイアスデータによる共変量を加えた介入効果の推定値は0.8058であった。
3.2.1 脱落変数バイアス
選択バイアスの影響をより小さくするには「目的変数と介入変数に対して相関の有る変数を加えるべき」である。
共変量の有無で相違するつのモデル
を考える。なお後者は選択バイアスが除外されたものとする。
このとき
であり、が選択バイアスに相当することが分かる。このように本来は必要であるもののモデルに欠落している変数を脱落変数という。
このときモデルにおいて介入効果を示すは
で表されることが知られている。はモデルにて推定される効果を示しており、他方でこのは脱落変数バイアスと呼ばれる。
はモデルにおいて推定されたとの相関に相当するもの(感応度)であり、はにを回帰させた回帰係数であり、これらの相関に相当するもの(感応度)と言える。すなわち
と書ける。
3.2.2 脱落変数バイアスのシミュレーション
######################## ### 脱落変数バイアス ### ######################## library(broom) # モデル式をベクトルとして生成 formula_vc <- c(spend ~ treatment + recency + channel, spend ~ treatment + recency + channel + history, history ~ treatment + recency + channel) names(formula_vc) <- paste("reg",LETTERS[1:3],sep = "_") # LETTERはアルファベットとして内部で定義されている # モデル式をデータフレーム化 models <- formula_vc %>% enframe(name = "model_index", value = "formula") # 回帰分析を一括で実行 df_models <- models %>% mutate(model = map(.x = formula, .f = lm, data = biased_data)) %>% mutate(lm_result = map(.x = model, .f = tidy)) df_results <- df_models %>% mutate(formula = as.character(formula)) %>% select(formula, model_index, lm_result) %>% unnest(cols = c(lm_result)) # モデルA,B,cにおけるtreatment項の回帰係数の推定値を抽出 treatment_coef <- df_results %>% filter(term == "treatment") %>% pull(estimate) history_coef <- df_results %>% filter(model_index == "reg_B", term == "history") %>% pull(estimate) # 脱落変数バイアスを計算 OVB <- history_coef * treatment_coef[3] coef_gap <- treatment_coef[1] - treatment_coef[2] OVB # beta_2 + gamma_1 coef_gap # alpha_1 - beta_1 # 0.01842479で両者は一致
3.2.3 脱落変数バイアスから読み取れること
の両方に関係のあるような変数を交絡因子といい、バイアスの少ない効果推定を行うには交絡因子を喰わることが重要である。
脱落変数バイアスが小さいという状態には、
- (1)が本来関係が薄い場合、
- (2)既にモデルに含まれている変数の影響によって小さくなっている場合
がある。バイアスを発生し得る変数がデータとして得られないとしても常識的に考えてそれととそれぞれ正・負のどちらの相関があり得るかを考えるだけでもバイアスの方向性を検討できる。
3.2.4 CIA
効果検証のための回帰分析における理想的な共変量の選択はモデルに含まれていない変数による脱落変数バイアスがすべてになるような状態である。このような状態では共変量がと条件付き独立になる。これをという。
3.2.5 変数の選び方とモデル評価
モデルの構築方法は以下の手順で行われる:
(1) | 介入の割り当てがどのように決定されるかを想定する。 | |
(2) | 想定を表現できるような共変量を選択する。 | |
(3) | 選択した共変量ととの関係性を考慮して関数形を決定する。 |
推定された効果の妥当性を主張するためには、作ったモデルの共変量がを満たしていると考える必要がある。しかし問題点が2点ある:
(1) | バイアス評価が出来ない | 得られた効果の推定値がどの程度バイアスを有しているかを評価する方法が無い。 | |
(2) | 必要な共変量がデータ内に存在しない場合がある | 手持ちのデータセット内に存在する変数の実ではバイアスを十分に減らせない可能性がある。 |
これらについてはより高度な分析手法を用いない限り、分析者の初見で判断するしかない。
手持データに含まれない変数が選択バイアスを起こしているかを判断する方法の1つにがある。分析者が重要だと認識している共変量以外の共変量をモデルから除いて推定したときに効果の推定値が大きく変動しないかを確認するというものである。変動が小さければ回帰の結果が他の変数による影響を受けにくく、仮にデータセットに含まれていないような偏巣を含めても大きく変化しないことを示唆する。
3.2.6 Post Treatment Bias
選択バイアスを減らす可能性があるからといって共変量を増やし過ぎて介入の影響を受け得る変数をモデルに含めると、回帰分析の結果がゆがむ可能性がある。これは介入の影響を受けた変数(=介入変数と高い相関を持つ共変量)を加えることで介入の効果がその変数の推定値に吸着されてしまうことで発生する。このような介入によって影響を受けた変数を分析に加えることで発生するバイアスをという。
3.3 回帰分析における諸論点
3.3.1 予測と効果推定
予測能力が低いために回帰分析を利用すべきでないとの議論がある。しかし「モデルのデータに対する説明能力や未知の標本に対する予測能力を高めることと“効果検証について有用である”という保証はない」ため、予測能力と効果検証は別問題である。
3.3.2 制限被説明変数
やなど目的変数(被説明変数)の取る値に制約がある場合、制限被説明変数という。このときには線形回帰以外を利用することも一考の余地がある。
3.3.3 対数を用いた線形回帰
説明変数および目的変数としてそれらの(原指標の)対数階差を用いて回帰することも考えられる。これは対数の差分が両者の変化率に近似し得ることが背景にある。介入効果が比率で表されるときや、共変量と目的変数の関係が比率で扱われる場合に対数変換は使い得る。
今回のまとめ
*1:回帰分析の文脈では介入変数及び共変量を総称して説明変数と呼ぶ。
*2:検定についてはたとえばpower-of-awareness.comを参照。