This version: 2025-07-01


1 はじめに

  • この課題では、fixestパッケージを使用して、処置のタイミングに時差がある場合の差の差(Difference in Differences, DiD)推定を実行し、処置効果を推定する。
  • fixestパッケージのインストールは完了していることを前提とする。完了していない場合は、以下のコードをコンソールに入力してインストールすること。
install.packages("fixest")
  • 各自でRマークダウンを作成し、以下のRコードを実行して、結果を再現し、knitして生成されるWordファイルを提出すること。

2 データ

パッケージを読み込む。

library(fixest)

次に、サンプル・データbase_didを読み込む。

data(base_stagg)

head(base_stagg)
##   id year year_treated time_to_treatment treated treatment_effect_true
## 2 90    1            2                -1       1                     0
## 3 89    1            3                -2       1                     0
## 4 88    1            4                -3       1                     0
## 5 87    1            5                -4       1                     0
## 6 86    1            6                -5       1                     0
## 7 85    1            7                -6       1                     0
##           x1           y
## 2 -1.0947021  0.01722971
## 3 -3.7100676 -4.58084528
## 4  2.5274402  2.73817174
## 5 -0.7204263 -0.65103066
## 6 -3.6711678 -5.33381664
## 7 -0.3152137  0.49562631

このデータには、以下の変数が含まれている。

  • id: 個人識別子
  • year: 年
  • year_treated: 処置を受けた年
  • time_to_treatment: 処置までの年数
  • treated: 処置群(1: 処置群、0: 対照群)
  • y: アウトカム変数
  • x1: コントロール変数

3 期間構造

3.1 年次

  • 年次の変数yearを確認する。
  • 1〜10までの年が含まれていることを確認する。
table(base_stagg$year)
## 
##  1  2  3  4  5  6  7  8  9 10 
## 95 95 95 95 95 95 95 95 95 95

3.2 処置のタイミング

  • 処置を受けた年を確認する

  • 10000は、処置を受けていないことを示す。

table(base_stagg$year_treated)
## 
##     2     3     4     5     6     7     8     9    10 10000 
##    50    50    50    50    50    50    50    50    50   500

4 時差ありDiD

4.1 Sun and Abraham (2020)の概要

処置のタイミングに時差がある場合、通常の二元固定効果モデル(Two-Way Fixed Effects, TWFE)では、処置効果の推定がバイアスされる可能性がある。これを解決するために、Sun and Abraham (2020)は、時差のある処置効果を正確に推定する方法を提案した。そこで、Sun and Abraham (2020)の方法を使用して、処置効果を推定する。

4.2 モデルの推定

時差ありDiD分析のために、fixestは、Sun and Abraham (2020)を実装するためのsunab関数を提供している。この方法は、各期間の平均処置効果(ATT)を得るために、処置コホート×処置までの時間ダミーの推定を行う。

res_sa20 = feols(y ~ x1 + sunab(year_treated, year) 
                 | id + year, base_stagg)

etable(res_sa20)
##                           res_sa20
## Dependent Var.:                  y
##                                   
## x1              0.9947*** (0.0184)
## year = -9          0.3518 (0.3591)
## year = -8         -0.0790 (0.2975)
## year = -7          0.1010 (0.3670)
## year = -6         -0.0564 (0.3089)
## year = -5         -0.2953 (0.2940)
## year = -4         -0.3037 (0.2491)
## year = -3         -0.0884 (0.2558)
## year = -2          0.0847 (0.2443)
## year = 0        -5.188*** (0.2211)
## year = 1        -3.540*** (0.2128)
## year = 2        -2.155*** (0.2258)
## year = 3        -0.7750** (0.2771)
## year = 4         1.069*** (0.3104)
## year = 5         2.118*** (0.4481)
## year = 6         4.631*** (0.4604)
## year = 7         4.890*** (0.3394)
## year = 8         6.244*** (0.2976)
## Fixed-Effects:  ------------------
## id                             Yes
## year                           Yes
## _______________ __________________
## S.E.: Clustered             by: id
## Observations                   950
## R2                         0.90982
## Within R2                  0.87641
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4.3 処置効果のグラフ表示

処置効果をグラフに表示するには、iplot関数を使用することができる。iplot関数 は、i() で作成された変数の係数を表示し、その係数のみを表示する。

iplot(res_sa20)

5 参考文献