碧潭看月

徒然なる言葉の羅列が意味を成すように見える、兼好法師も読んで呆れる駄文の数々。

11/30の勉強会のまとめ(数式の試しがき)

Synthetic Difference in Differences (SDID)

内輪の勉強会で Arkhangelsky et al. (2021, AER) を眺めたので、はてなMarkdown記法に慣れるのも兼ねてブログを書こうと思った。

さて、簡単のためATT (QoI), intercept, fixed effectsをまとめて 
    \theta = (\tau, \mu, \alpha, \beta)
とおくと、SDID推定量は次の式で求められる。

 
\newcommand{\argmin}{\mathop{\rm argmin}\limits}

\begin{align*}
    \hat{\theta} = \argmin_{\theta} \sum_{t = 1}^{T} \sum_{i = 1}^{N} [Y_{it} - ( \mu + \alpha_{i} + \beta_{t} + W_{it} \tau ) ]^{2} \hat{\omega}_{i} \hat{\lambda}_{t}
\end{align*}

面倒なのでnotationの詳細は省く。ここで、 
    (\omega, \lambda)
とかいう重みの推定量がplug-inされているが、これらは


\newcommand{\argmin}{\mathop{\rm argmin}\limits}

\begin{align*}
    (\hat{\omega}_{0}, \hat{\omega}) 
&= \argmin_{(\omega_{0}, \omega)} \sum_{t = 1}^{T_{\text{pre}}} \left(
\omega_{0} + \sum_{i = 1}^{N_{\text{co}}} \omega_{i} Y_{it} - \frac{1}{N_{\text{tr}}}\sum_{i = N_{\text{co}} + 1}^{N} Y_{it} 
\right)^{2} 
+ \zeta^{2} T_{\text{pre}} \| \omega \|_{2}^{2}, \\
     (\hat{\lambda}_{0}, \hat{\lambda}) 
&= \argmin_{(\lambda_{0}, \lambda)} \sum_{i = 1}^{N_{\text{co}}} \left(
\lambda_{0} + \sum_{t = 1}^{T_{\text{pre}}} \lambda_{t} Y_{it} - \frac{1}{T_{\text{post}}} \sum_{t = T_{\text{pre}} + 1}^{T} Y_{it}
\right)^{2}
\end{align*}

のように推定される。意味としては、処置前の期間における処置群と統制群を(平均的に)balancingさせるのが 
\omega
、統制群における処置前と処置後をbalancingさせるのが 
\lambda
ってことだと思われる。ところで、 
\omega
の推定式にはL2正則化パラメータの 
\zeta
がくっついているが、元論文にはきちんと決め方が書いてあるものの、tex打ちが面倒なので書かない。どうやら 
\zeta
がobserved outcomeの時間による差分に依存する関数というのがポイントらしい。

実践しようと思ったら、著者たちがRで実装したsynthdidと、それを謎の日本人がPythonに移植したpysynthdidを利用できる。スクラッチでもできそうな気がするので暇なら書いてみたい。