Stata分析機能例題集
差分の差分モデル

差分の差分(difference in differences: DID)モデルは、新しい治療法や政策・施策等、その効果を測定するような様々な場面で用いることができます。
例えば、ある国の政府が国民の所得を上げるための政策を実施し、一定期間後に国民の所得が5%上昇したとします。
しかし、本当にこの政策が直接的に5%の上昇をもたらしたのでしょうか?
景気回復や為替・原油価格の変動等様々な外部要因も影響したかもしれません。
または、政府が政策を実施しなくても5%上昇していたかもしれません。
そこで差分の差分モデルを使い、政府が政策を実施していた場合(処置群)の上昇率と、実施しなかった場合(対照群)の上昇率の差を比較することで、実際に政策を実施した時の純粋な政策効果を図ることができます。

差分の差分ってどんな場合に利用できるの?

Stataで施策の効果測定をしよう!「差分の差分モデル」ウェビナーのご案内

ライトストーンでは、どなたでも無料でご視聴いただけるウェビナーを開催中です。
「差分の差分モデル」ウェビナーでは、実際にStataを一緒に操作しながら差分の差分モデルの機能をコンパクトに紹介します。
詳しくはStataウェビナーページをご覧ください。

この例題でできること

Stataにおける処置効果の推定では、teffectsコマンドを利用いただけますが、新たに差分の差分(difference in differences:DID)モデルを推定するdidregressコマンドと三重差分(difference-in-difference-in-differences:DDD)モデルを推定するxtdidregressコマンドが実装されました。
これらのコマンドは、未観測グループと時間の影響をコントロールし処置の前後において、処置群と対照群のアウトカムの差を取り、更にその差分について差分をとることで処置効果を推定します。

差分の差分モデルイメージ図 1
差分の差分モデルイメージ図 2

Stata評価版

最新バージョンのStataをお持ちでない場合は、無料の体験版でお試しいただけます。

doファイルのダウンロード

今回使用するコマンドをまとめたdoファイルです。zipファイルをダウンロード後に展開(解凍)してください。
doファイルは、Stataのメニューの「ファイル > 開く」で開いて使用します。

PDFファイルのダウンロード

このページの内容はPDFでも配布しております。

差分の差分モデルについて

データの準備

ある病院で、入院手続きの変更による入院患者の満足度の調査を行いました。
4月から調査対象の46の病院のうち、18の病院で入院手続きの変更を実施しました。
1月から7月までの入院患者の月次データを元に、病院はDIDモデルを使用して、変更後の入院手続きの満足度への効果を分析します。

アウトカムは病院における患者の顧客満足度 : 変数satisです。
これは、患者への4項目の質問に対する平均です。

変数satisは0から10の間に値を取ります。
ここで、10は満足度が最も高く、0は最も低いことを示しています。

変数procedureは、処置を受けた観測値を示しています。
調査対象が3月以降に新しい手続きを使用して病院に入院した場合は1、それ以外の場合は0です。
これによる変数satisの変化をdidregressコマンドを使い推定してみましょう。

データの確認

下記のコマンドを入力してデータをダウンロードし、内容を確認します。

. webuse hospdd
. didregress (satis) (procedure), group(hospital) time(month)

最初の(satis)でアウトカムを指定し、続けてモデルの共変量を指定します。(今回は共変量はありません。)
次の(procedure)は、処置変数であるバイナリ変数を指定しています。
group(hospital)オプションとtime(month)オプションで、モデルに含まれるグループと時間の固定効果を構築します。
group()で指定した変数はクラスタリングのレベルを定義します。
デフォルト設定では、クラスターロバスト標準誤差です。
この例では、病院レベルでクラスター化します。

以下のように推定結果が表示されます。

差分の差分モデル データの確認

最初の表には、コントロール群と実験群についての情報と、実験のタイミングが表示されています。
28の病院が古い入院手続きを継続し、18の病院が新しい入院手続きに移行しています。
実験群のすべての病院が、4番目の期間に新しい入院手続きを取り入れました。
もしいくつかの病院が後に新しい手続きを採用した場合は、最初の実験の最小時間と最大時間が異なります。

2番目の表には、ATETの推定0.85 (95% CI [0.78,0.91])が出力されています。
実験群の病院は、新しい入院手続きを導入しなかった場合に比べて、患者の満足度が0.85ポイント増加しました。

平行トレンドの推定

ATETの推定後は、処置群と対照群の処置が行われる直前まで同じ条件であるかを確認する必要があります。
これは、平行トレンドまたは、共通トレンドと呼ばれる仮定の検定です。
このモデルが立てる仮説のひとつは、新しい手続き導入前は、satis(患者の満足度)の推移がコントロール群と実験群で平行であるということです。
この推移を視覚的に確認するには、両群のアウトカムの平均の時間推移をプロットするか、線形トレンドモデルの結果をグラフ化します。
estat trendplotsを使って、この両方の診断を実行します。

. estat trendplots
平行トレンドの推定 1

コマンドを実行すると2つのプロットが表示されます。
グラフは処置群と対照群におけるアウトカムの変化を時系列で表しています。
赤色の基準線は処置を示しています。両方のグラフから、処置前における両群の軌跡はほぼ共通であり、平行トレンド仮定は満たされているように見えます。
新しい手続きを始める前は、コントロール群と実験群のどちらの病院も、satisは平行に推移しています。

モデルにトレンド項を追加して、検定することもできます。
線形トレンドモデルは、線形トレンドの係数の処置前後の差を推定し、この係数が0であればトレンドが平行であると判断できます。
実際に平行トレンド検定のコマンドestat ptrendsを使って、この仮定をさらに詳しく評価しましょう。

. estat ptrends

結果は下記のようになります。

平行トレンドの推定 2

P値は0.46なので、トレンドは平行であるという帰無仮説を棄却できません。
この検定結果と前述のグラフの解析が、平行トレンドの仮説を支持します。

グレンジャー因果性検定

もうひとつの検定では、コントロール群または実験群を使って、もう一方の群の動向の変化を推定できるかどうかを評価します。
これをグレンジャー因果性検定といいます。

. estat granger

結果は下記のようになります。

グレンジャー因果性検定 1

実験前に動向が変化しないという帰無仮説を棄却する十分な証拠がありません。
これまでの診断結果とも併せると、ATET推定の妥当性は信頼してよいことが示唆されます。
しかし、もし15の病院のデータしかない場合は、他の方法を検討する必要があります。
Bell and McCaffrey (2002)の自由度調整でバイアス補正された標準誤差を使用するためには、didregressコマンドにvce(hc2)オプションを使用します。

. didregress (satis) (procedure), group(hospital) time(month) vce(hc2)

Donald and Lang (2007)による集計方法を使用するには、aggregate(dlang)オプションを使用します。

. didregress (satis) (procedure), group(hospital) time(month) //aggregate(dlang)

いくつかの係数をグループ間で変化させる場合は、varyingオプションを追加します。

. didregress (satis) (procedure), group(hospital) time(month) //aggregate(dlang, varying)

p値と信頼区間を計算するために、wild-clusterブートストラップ法を使うこともできます。
すべてのブートストラップ法で共通する事項として、結果を複製できるようにシードを設定する必要があります。

. didregress (satis) (procedure), group(hospital) time(month) // wildbootstrap(rseed(111))
グレンジャー因果性検定 2

以上の分析から、改めて結果を整理すると、新しい入院手続きの導入により顧客満足度が約1ポイント上昇し、根拠となる差分の差分モデルにおいて平行トレンドの仮定を満たしていることが確認できました。

ワイルドブートストラップ

データの確認

これまでの例では豊富なデータがあることを前提としたものでしたが、多くの研究においては、グループ内の標本の数はごく小さいものです。
didregressコマンドとxtdidregressコマンドではこのような分散不均一が存在する場合に、標準誤差を調整する必要があります。
そこで、より精度の高い推定・検定を行うことができる「ワイルドブートストラップ」を用います。
また、Bell and McCaffrey(2002)の提案した自由度調整済みを伴うバイアス修正クラスタ標準誤差を使用する方法もあります。
通常のブートストラップ法とは異なり、ワイルドブートストラップ方では、選択分布を利用するリサンプリングを行います。

ある週の6つの郡のデータ(セット)を使い説明します。
処置群は群1と2のみ、それ以外は対照群です。ATETの真の値は1.0です。
まずは、デフォルトの標準誤差を使用して推定しましょう。

. use https://www.stata-press.com/data/r17/smallg, clear
. didregress (outcome x i.b)(treated),group(country)time(year)
ワイルドブートストラップ 1

最初の表から、グループを構成する要素が小さいことが分かります。
この結果からは、点推定の結果の値-1.0に近く、区間推定においても真の値が区間推定ないに収まっており、理想的な結果であることが分かります。
冒頭でも説明したように、このようなグループ数が少ないときに用いる有効な方法がワイルドブートストラップです。

それでは推定してみます

. didregress (outcome x i.b)(treated),group(country)time(year)///wildbootstrap(rseed(123) errorweight(webb))
ワイルドブートストラップ 2

この結果では、信頼区間は95%ではなく、95.10%となりました。
推定結果はデフォルトの物よりp値が大きくなり、信頼区間も広くなっています。
しかし、このように標準誤差を調整しても依然として、有意な効果があることが分かります。
ワイルドブートストラップはグループ数が10より小さいときに、特に威力を発揮します。

テクニカルサポート

ご不明な点がございましたら、お気軽にお問合せフォームよりテクニカルサポートまでご連絡ください。

その際、必ず「製品名」「バージョン」「シリアル番号」をご連絡ください。

Stata is a registered trademark of StataCorp LLC, College Station, TX, USA, and the Stata logo is used with the permission of StataCorp.

page_top_icon