causal-inference-mixtape について
Scott Cunninghamの『Causal Inference: The Mixtape』を基にした、実践者向けの因果推論スキルです。10種類の識別戦略について、Python、R、Stataのコード例と手法選択・頑健性検証の指針を提供します。
主な機能
- 0110種類の識別戦略のテンプレート
- 02Python・R・Stataのコード例
- 03言語間の手法比較
- 04手法選択のガイダンス
- 05手法別の頑健性検証
- 06再利用可能な実装・検証プロンプト
活用シーン
- 01使用言語に応じた因果デザインの実装
- 02言語間で等価な推定手法の比較
- 03DiD・IV・RDD分析の検証項目の選定
- 04研究データに合わせたテンプレートの調整
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ brycewang-stanford/ auto-empirical-research-skills --skill causal-inference-mixtapeインストール後、Claude Code で/causal-inference-mixtapeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README-original.mdprompts/01-implement-method.md02-robustness-checks.mdreferences/method-patterns.mdr-stata-comparison.md詳細
Causal Inference: The Mixtape — コードスキル
Scott Cunningham の Causal Inference: The Mixtape リポジトリを基にした、実務者向けの因果推論スキルです。すぐに実行できる Python、R、Stata のコードテンプレートを使って、10 種類の識別戦略を扱います。
対応する手法
| 手法 | Python | R | Stata | 参照 |
|---|---|---|---|---|
| OLS / 回帰 | statsmodels | estimatr | reg/reghdfe | references/method-patterns.md §1 |
| 差の差法 | statsmodels + C() | lfe/fixest | xtreg/reghdfe | references/method-patterns.md §2 |
| イベントスタディ(動学的 DiD) | 手動のリード/ラグ | estimatr | reghdfe | references/method-patterns.md §3 |
| 段階的 DiD / TWFE | statsmodels | bacondecomp | bacondecomp | references/method-patterns.md §4 |
| 回帰不連続デザイン | statsmodels 多項式 | rdrobust | rdplot/rdrobust | references/method-patterns.md §5 |
| 操作変数法 | linearmodels IV2SLS | AER/ivreg | ivregress 2sls | references/method-patterns.md §6 |
| 合成コントロール法 | rpy2 → R Synth | Synth + SCtools | synth | references/method-patterns.md §7 |
| マッチング / PSM / IPW | 手動の logit + 重み | MatchIt + Zelig | teffects/cem | references/method-patterns.md §8 |
| DAG / コライダーバイアス | dagitty(概念的) | dagitty/ggdag | — | references/method-patterns.md §9 |
| ランダム化推論 | 置換ループ | ri2 | ritest | references/method-patterns.md §10 |
基本的なワークフロー
因果推論手法を実装する
- 上の表から手法を特定します
references/method-patterns.mdから適切なテンプレートを読み込みます- 変数名、固定効果、クラスター化をユーザーのデータに合わせて調整します
- ロバスト性チェックを追加します(DiD では平行トレンド、RDD では McCrary 検定、IV では第 1 段階の F 検定)
適切な言語を選択する
| シナリオ | 推奨 |
|---|---|
| ML パイプラインとの統合 | Python(statsmodels + linearmodels) |
| 合成コントロール法 | R(Synth パッケージ)または Stata(synth)— Python には成熟した実装がありません |
| Bacon 分解 | R(bacondecomp)または Stata — Python に相当するものはありません |
| 論文掲載用の表 | Stata(outreg2/esttab)または R(stargazer/modelsummary) |
| 粗化完全マッチング | Stata(cem)または R(MatchIt)— Python に相当するものはありません |
| 素早いプロトタイピング | statsmodels を使った Python |
言語間の対応関係
| タスク | Python | R | Stata |
|---|---|---|---|
| ロバスト標準誤差を用いた OLS | smf.ols().fit(cov_type='HC1') | lm_robust() | reg y x, robust |
| クラスター標準誤差 | fit(cov_type='cluster', cov_kwds={'groups': g}) | `felm(y ~ x | 0 |
| 双方向固定効果 | 数式中の C(id) + C(time) | `felm(y ~ x | id + time)` |
| IV / 2SLS | IV2SLS.from_formula('y ~ 1 + exog + [endog ~ inst]') | `ivreg(y ~ exog | inst)` |
| DiD | C(treat)*C(post) | 数式中の treat:post | did_multiplegt または交互作用 |
主要な Python パターン
クラスター頑健標準誤差を用いた DiD
import statsmodels.formula.api as smf
model = smf.ols('y ~ C(treated)*C(post) + controls', data=df)
results = model.fit(cov_type='cluster', cov_kwds={'groups': df['firm_id']})
イベントスタディ(リード/ラグ)
# Create relative time dummies
for k in range(-4, 5):
col = f'rel_{k}' if k >= 0 else f'rel_m{abs(k)}'
df[col] = (df['relative_time'] == k).astype(int)
# Drop t=-1 as reference
formula = 'y ~ ' + ' + '.join([c for c in rel_cols if c != 'rel_m1']) + ' + C(id) + C(year)'
IV / 2SLS
from linearmodels.iv import IV2SLS
model = IV2SLS.from_formula('y ~ 1 + exog + [endog ~ instrument]', data=df)
results = model.fit(cov_type='clustered', clusters=df['cluster_var'])
ロバスト性チェックのパターン
| 手法 | 必須のチェック |
|---|---|
| DiD | 平行トレンド(イベントスタディのプロット)、プラセボの処置時点 |
| RDD | McCrary 密度検定、バンド幅のロバスト性(IK 最適バンド幅の半分/2 倍)、多項式のロバスト性 |
| IV | 第 1 段階の F > 10、除外制約の論拠、過剰識別検定 |
| 合成コントロール法 | 処置前の RMSPE、プラセボ分布、1 単位ずつ除外した分析 |
| マッチング | 共変量バランス表、キャリパー感度分析 |
よくある落とし穴
- 段階的処置におけるTWFE — 標準的な二元固定効果は、処置のタイミングにばらつきがある場合、バイアスが生じます。Bacon 分解または Sun & Abraham / Callaway & Sant'Anna 推定量を使用してください。
- 処置群が多数ある場合の合成コントロール法 — Synth パッケージは、処置群が1つの場合に対応しています。複数ある場合は、拡張合成コントロール法またはスタック法を使用してください。
- McCrary 検定を行わないRDD — 推定の前に、必ずカットオフでの操作の有無を検定してください。
- IVの弱い操作変数 — 第1段階のF統計量を報告してください。10を下回る場合は、弱い操作変数によるバイアスが示唆されます。
- Python版Synthの不足 — 成熟したPython版Synthパッケージはありません。
rpy2を使ってPythonからRのSynthを呼び出してください。
追加リソース
リファレンスファイル
references/method-patterns.md— 10種類すべての手法について、完全な例を含む詳細なコードテンプレートreferences/r-stata-comparison.md— 言語間のパッケージ比較と、手法の対応範囲に関するギャップ
プロンプトファイル
prompts/01-implement-method.md— あらゆる因果推論手法の実装に使えるコピー&ペースト用プロンプトprompts/02-robustness-checks.md— 頑健性検定のコード生成に使えるコピー&ペースト用プロンプト
コメント
Markdown 対応