Nhóm 9.5: DID cổ điển & Nghiên cứu sự kiện (staggered_did_modern)
staggered_did_modern) là phân nhánh chuyên sâu thuộc Chương 09: Suy luận nhân quả và đánh giá tác động chính sách, quy tụ 8 phương pháp ước lượng (từ B142 đến B152). Phần tổng quan này giúp chúng ta so sánh trực diện điều kiện áp dụng, cấu trúc toán học và cú pháp thực thi trên Stata 18 MP, R 4.x và Python 3.11+ để chọn đúng mô hình cho bài toán nghiên cứu.1. Bản chất Học thuật & Vị trí của Nhóm 9.5 (DID cổ điển & Nghiên cứu sự kiện)
Khi triển khai nghiên cứu định lượng trong miền Suy luận nhân quả và đánh giá tác động chính sách, chúng ta thường đứng trước câu hỏi: giữa 8 mô hình cùng thuộc nhóm phương pháp con (econometric sub-group, staggered_did_modern), đâu là công cụ khớp nhất với quá trình sinh dữ liệu (DGP) của đề tài?
Mọi phương pháp trong Nhóm 9.5 đều xuất phát từ khung biểu diễn đại số cơ sở của chương như trình bày tại công thức (1):
$$text{ATT}(g, t) = text{E}[Y_{it}(g) – Y_{it}(infty) mid G_{ig} = 1] tag{1}$$
Sự khác biệt giữa các mô hình từ B142 (bacon_decomposition) đến B152 (synthetic_did) nằm ở cách chúng ta đặt giả định lên phân phối của sai số ngẫu nhiên, cấu trúc nội sinh và phương pháp tối ưu hóa hàm mục tiêu từ công thức (1).
2. Bảng So sánh Trực diện 8 Mô hình thuộc Nhóm 9.5
Bảng đối chiếu dưới đây giúp bạn nhìn tổng thể toàn bộ 8 bài học trong Nhóm 9.5 kèm câu lệnh cốt lõi trên cả ba phần mềm:
| Mã Bài | model_key |
Tên Mô hình (VI / EN) | Cấp độ | Lệnh Thực thi Chuẩn (Stata 18 · R 4.x · Python 3.11+) | Ý nghĩa Kinh tế lượng Trọng tâm |
|---|---|---|---|---|---|
| B142 | bacon_decomposition |
Định lý phân rã trọng số $2times 2$ và so sánh bị cấm của Goodman-Bacon (bacondecomp) Goodman-Bacon $2times 2$ TWFE Weight & Forbidden-Comparison Decomposition |
L3 | Stata: bacondecomp (ssc install bacondecomp: bacondecomp y treat, ddetail)R: bacondecomp (bacondecomp::bacon(y ~ treat, data = df, id_var = "id", time_var = "year") trên CRAN active)Python: Exact Goodman-Bacon Theorem 1 closed-form $2times 2$ DID variance-weight & within/between decomposition solver (numpy/pandas) |
Phân rã chính xác hệ số $hat{beta}_{text{TWFE}}$ trên dữ liệu bảng lệch pha thành trung bình có trọng số của mọi cặp so sánh $2times 2$: (1) Treated vs Never-Treated, (2) Earlier vs Later Treated (hợp lệ) và (3) **Later vs Already-Treated** (so sánh bị cấm gây trọng số âm và đảo dấu hệ số chính sách). |
| B144 | sun_abraham_did |
Nghiên cứu sự kiện trọng số tương tác đoàn hệ của Sun–Abraham (eventstudyinteract / sunab) Sun & Abraham Interaction-Weighted Event-Study DID |
L3 | Stata: eventstudyinteract (ssc install eventstudyinteract: eventstudyinteract y lead* lag*, cohort(first_treat) control_cohort(never) absorb(id time) vce(cluster id))R: fixest (fixest::feols(y ~ x1 + sunab(first_treat, year) | id + year, cluster = ~id))Python: pyfixest / Interaction-WeightedFE (saturated cohort x relative_time FE + Sun–Abraham cohort-share aggregation & delta-method cluster SE) |
Ước lượng riêng từng hiệu ứng đoàn hệ – thời gian tương đối $text{CATT}_{e,ell}$ bằng tương tác bão hòa rồi gộp theo tỷ phần đoàn hệ, loại bỏ hoàn toàn hiện tượng “ô nhiễm chéo giữa các kỳ dẫn–trễ” của Event-Study TWFE truyền thống. |
| B145 | borusyak_imputation_did |
Ước lượng DID suy diễn hiệu quả cao Borusyak–Jaravel–Spiess và Gardner (did_imputation / did2s) Borusyak–Jaravel–Spiess Imputation DID / Gardner Two-Stage DID |
L3 | Stata: did_imputation / did2s (ssc install did_imputation: did_imputation y id year first_treat, horizons(0/5) pretrends(4))R: didimputation / did2s (did2s::did2s(df, yname = "y", first_stage = ~ 0 | id + year, second_stage = ~ i(rel_time), treatment = "treat", cluster_var = "id"))Python: pyfixest (pyfixest.did2s(...) / BJS conservative cluster-robust leave-cohort-out imputation variance) |
Ước lượng hiệu ứng cố định đơn vị $hat{alpha}_i$, thời gian $hat{lambda}_t$ và biến kiểm soát **chỉ trên tập quan sát chưa chịu xử lý** ($Omega_0$), suy diễn kết quả phản thực tế $hat{Y}_{it}(0)$ cho nhóm xử lý rồi tính trung bình trọng số $hat{tau}_{it} = Y_{it} – hat{Y}_{it}(0)$ — đạt hiệu quả tiệm cận cao nhất (BLUE dưới Gauss–Markov). |
| B146 | dechaisemartin_did |
Ước lượng DID động cho xử lý bật–tắt đảo chiều De Chaisemartin–D’Haultfœuille (did_multiplegt_dyn) De Chaisemartin & D’Haultfœuille Dynamic Switching DID (DID_M) |
L4 | Stata: did_multiplegt_dyn (ssc install did_multiplegt_dyn: did_multiplegt_dyn y id time d, effects(5) placebo(3) cluster(id))R: DIDmultiplegtDYN (DIDmultiplegtDYN::did_multiplegt_dyn(df, "y", "id", "time", "d", effects = 5, placebo = 3))Python: Cohort-baseline switching DID_M & dynamic DID_l solver với cluster-level influence-function SE |
Ước lượng nhân quả không chệch cho thiết kế DID tổng quát nơi trạng thái xử lý **có thể bật rồi tắt (non-absorbing / reversible)** hoặc là biến xử lý không nhị phân/liên tục bằng cách so sánh các nhóm chuyển trạng thái với nhóm giữ nguyên mức xử lý ban đầu. |
| B147 | wooldridge_etwfe |
Mô hình hiệu ứng cố định hai chiều mở rộng bão hòa Mundlak của Wooldridge (ETWFE / jwdid) Wooldridge Extended Two-Way Fixed Effects (ETWFE) |
L3 | Stata: Stata 18 xthdidregress twfe / jwdid (xthdidregress twfe (y x1) (treat), group(id) hoặc ssc install jwdid)R: etwfe + marginaleffects (etwfe::etwfe(fml = y ~ x1, tvar = year, gvar = first_treat, data = df, vcov = ~id) + etwfe::emfx() trên CRAN active)Python: Saturated Mundlak Cohort $times$ Post-Period FE estimator (pyfixest/linearmodels + delta-method marginal aggregation ATT, cohort-ATT, event-ATT) |
Chứng minh rằng TWFE truyền thống chỉ sai do thiếu bão hòa tương tác: bằng cách đưa đầy đủ tương tác đoàn hệ × thời kỳ kèm biến kiểm soát khử tâm theo đoàn hệ $(X_{it} – bar{X}_g)$, ETWFE khôi phục ước lượng ATT không chệch và mở rộng tự nhiên sang **Poisson, Logit/Probit, Fractional DID**. |
| B148 | lp_did |
Phương pháp chiếu cục bộ kết hợp mẫu đối chứng sạch Dube–Girardi–Jordà–Taylor (LP-DID) Clean-Control Local Projections Difference-in-Differences (LP-DID) |
L4 | Stata: lpdid (ssc install lpdid: lpdid y, unit(id) time(year) treat(treat) pre_window(4) post_window(6))R: fixest clean-control LP loop (for (h in -K:H) fixest::feols(dy_h ~ d_treat | time, subset = clean_h, cluster = ~id))Python: pyfixest (pyfixest.did.lpdid(...) / Clean-control equally-weighted & variance-weighted LP-DID với cluster-robust SE & pooled post-treatment ATT) |
Kết hợp sự linh hoạt động học của Jordà Local Projections $Y_{i,t+h} – Y_{i,t-1}$ với điều kiện lọc mẫu đối chứng sạch (clean controls: chỉ giữ các đơn vị mới chuyển trạng thái xử lý tại $t$ và các đơn vị chưa chịu xử lý cho tới tận $t+h$), khử hoàn toàn chệch trọng số âm mà vẫn dễ dàng kiểm soát động học trễ của biến kết quả. |
| B149 | honest_did_sensitivity |
Phân tích độ nhạy vi phạm giả định xu hướng song song Rambachan–Roth (HonestDiD) Rambachan & Roth HonestDiD Parallel-Trends Sensitivity |
L3 | Stata: honestdid (ssc install honestdid: honestdid, pre(1/4) post(5/8) mvec(0.5(0.5)2))R: HonestDiD (HonestDiD::createSensitivityResults_relativeMagnitudes(betahat, sigma, numPrePeriods, numPostPeriods, Mbarvec))Python: ARP / Fixed-Length Confidence Interval (FLCI) & Conditional/Hybrid LP bounds solver trên $(hat{beta}_{text{event}}, hat{Sigma}_{text{event}})$ |
Thay vì giả định xu hướng song song sau can thiệp đúng tuyệt đối 100%, thiết lập khoảng nhận dạng từng phần (robust confidence sets) cho hiệu ứng chính sách khi vi phạm xu hướng sau xử lý tối đa bằng $bar{M}$ lần độ lệch tiền xu hướng lớn nhất ($Delta^{RM}(bar{M})$) hoặc bị chặn đạo hàm bậc hai ($Delta^{SD}(M)$). |
| B152 | synthetic_did |
Sai biệt trong sai biệt tổng hợp Arkhangelsky–Athey–Hirshberg–Imbens–Wager (SDID) Synthetic Difference-in-Differences (SDID) |
L3 | Stata: sdid (ssc install sdid: sdid y id time treat, vce(placebo) reps(200))R: fect / Synth + Frank–Wolfe SDID (Synth & fect CRAN active + Frank–Wolfe regularized $hat{omega}, hat{lambda}$ weighted fixest::feols & placebo/jackknife SE; tương thích synthdid)Python: pysyncon / Frank–Wolfe regularized unit $hat{omega}$ ($L_2$-penalized) + simplex time $hat{lambda}$ weighted TWFE + Placebo / Jackknife / Clustered Bootstrap SE |
Kết hợp tối ưu trọng số đơn vị đối chứng $hat{omega}_i$ của Synthetic Control với trọng số thời kỳ tiền xử lý $hat{lambda}_t$ và hiệu ứng cố định hai chiều của DID, vừa nới lỏng giả định xu hướng song song tự nhiên vừa bất biến với độ lệch mức cố định và giảm mạnh phương sai. |
3. Hướng dẫn Chọn nhanh Mô hình Phù hợp trong Nhóm 9.5
Dựa trên kinh nghiệm phản biện và hướng dẫn luận văn, luận án thực tế, chúng ta có thể áp dụng quy tắc chọn nhanh sau đây:
- Chọn B142 — Định lý phân rã trọng số $2times 2$ và so sánh bị cấm của Goodman-Bacon (bacondecomp) (
bacon_decomposition) khi: Bước chẩn đoán tiền kiểm bắt buộc số 1 trong mọi nghiên cứu Staggered DID để chứng minh *tại sao* TWFE truyền thống bị chệch trước khi chuyển sang Callaway–Sant’Anna / Sun–Abraham / BJS Imputation. (Kiểm định kèm theo: Tổng tỷ trọng và ước lượng DID trung bình theo 3 nhóm (Treated vs Untreated, Timing: Early vs Late, Forbidden: Late vs Early), tỷ phần trọng số bị ô nhiễm động học.). - Chọn B144 — Nghiên cứu sự kiện trọng số tương tác đoàn hệ của Sun–Abraham (eventstudyinteract / sunab) (
sun_abraham_did) khi: Thiết kế chính sách triển khai lệch pha (staggered rollout) trên dữ liệu bảng có nhóm chưa bao giờ chịu xử lý (never-treated) hoặc nhóm chịu xử lý muộn nhất (last-treated cohort). (Kiểm định kèm theo: Kiểm định Wald đồng thời các hệ số tiền xử lý $ell < -1$ ($H_0: text{parallel pre-trends}$), ATT gộp sau xử lý và chuỗi Event-Study động theo $ell$.). - Chọn B145 — Ước lượng DID suy diễn hiệu quả cao Borusyak–Jaravel–Spiess và Gardner (did_imputation / did2s) (
borusyak_imputation_did) khi: Staggered DID trên dữ liệu bảng cân bằng/không cân bằng; khắc phục triệt để vấn đề trọng số âm (negative weights) của TWFE và có phương sai nhỏ hơn đáng kể so với ước lượng bắt cặp từng kỳ. (Kiểm định kèm theo: Kiểm định $F$ tiền xu hướng tách biệt hoàn toàn với ước lượng ATT (tránh pre-test bias Roth 2022), kiểm định trọng số âm bằng 0, dynamic horizon ATTs.). - Chọn B146 — Ước lượng DID động cho xử lý bật–tắt đảo chiều De Chaisemartin–D’Haultfœuille (did_multiplegt_dyn) (
dechaisemartin_did) khi: Chính sách thuế quan, trợ cấp, thiên tai, phong tỏa hoặc lãi suất ưu đãi có thể áp dụng rồi gỡ bỏ nhiều lần (nơi Callaway–Sant’Anna và Sun–Abraham đòi hỏi xử lý một chiều không hoàn tác). (Kiểm định kèm theo: Kiểm định đồng thời các placebo tiền chuyển đổi $text{DID}_{ell}^{text{pl}} = 0$, hiệu ứng tích lũy chuẩn hóa trên mỗi đơn vị liều xử lý (normalized total effect).). - Chọn B147 — Mô hình hiệu ứng cố định hai chiều mở rộng bão hòa Mundlak của Wooldridge (ETWFE / jwdid) (
wooldridge_etwfe) khi: Dữ liệu bảng lệch pha có biến kiểm soát phụ thuộc thời gian hoặc biến kết quả phi tuyến (đếm, nhị phân, tỷ trọng thương mại $Y ge 0$). (Kiểm định kèm theo: Kiểm định Wald đồng nhất hiệu ứng giữa các đoàn hệ (kiểm tra xem TWFE đơn giản có bị chệch hay không), kiểm định pre-trend tương tác, gộp biên emfx.). - Chọn B148 — Phương pháp chiếu cục bộ kết hợp mẫu đối chứng sạch Dube–Girardi–Jordà–Taylor (LP-DID) (
lp_did) khi: Đánh giá chính sách vĩ mô – tài chính – lao động triển khai lệch pha có phụ thuộc động học quá khứ (pre-treatment outcome dynamics) hoặc xử lý lặp lại trên bảng dài. (Kiểm định kèm theo: Đường phản ứng Event-Study sạch theo chân trời $h in [-K, H]$, kiểm định Wald đồng thời các kỳ tiền xử lý $h < -1$, cỡ mẫu đối chứng sạch hiệu dụng tại từng chân trời $N_{text{clean}}(h)$.). - Chọn B149 — Phân tích độ nhạy vi phạm giả định xu hướng song song Rambachan–Roth (HonestDiD) (
honest_did_sensitivity) khi: Hậu kiểm bắt buộc trong các bài báo DID/Event-Study chuẩn xuất bản (2023–2026) để xác định ngưỡng gãy Breakdown Value $bar{M}^*$ mà tại đó kết luận có ý nghĩa thống kê bị đảo ngược. (Kiểm định kèm theo: Giá trị ngưỡng gãy Breakdown Value $bar{M}^*$, bảng khoảng tin cậy bền vững theo lưới $bar{M} in {0, 0.5, 1.0, 1.5, 2.0}$, so sánh Original CI vs Honest CI.). - Chọn B152 — Sai biệt trong sai biệt tổng hợp Arkhangelsky–Athey–Hirshberg–Imbens–Wager (SDID) (
synthetic_did) khi: Đánh giá chính sách cấp quốc gia, tỉnh thành hoặc ngành khi số đơn vị được xử lý ít ($N_{text{tr}} ge 1$) hoặc toàn khối cùng nhận chính sách tại $T_0$ hoặc lệch pha theo khối. (Kiểm định kèm theo: Sai số khớp tiền xử lý pre-treatment RMSE, độ tập trung trọng số hiệu dụng $N_{text{eff}} = 1/sum hat{omega}_i^2$, so sánh tam giác DID vs SC vs SDID.).
↑ Quay lại Tổng quan Chương 09: Chương 09 — Suy luận nhân quả và đánh giá tác động chính sách
→ Đi tới Bài học đầu tiên của Nhóm 9.5: Bài B142 — Định lý phân rã trọng số $2times 2$ và so sánh bị cấm của Goodman-Bacon (bacondecomp) (
bacon_decomposition)→ Thực hành trực tiếp trên EcoLab: Mở Phòng thí nghiệm Kinh tế lượng EcoLab (Tri-Engine)
Bài liên quan
- Bài B142: Định lý phân rã trọng số $2times 2$ và so sánh bị cấm của Goodman-Bacon (bacondecomp) (Goodman-Bacon $2times 2$ TWFE Weight & Forbidden-Comparison Decomposition — bacon_decomposition)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B144: Nghiên cứu sự kiện trọng số tương tác đoàn hệ của Sun–Abraham (eventstudyinteract / sunab) (Sun & Abraham Interaction-Weighted Event-Study DID — sun_abraham_did)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B145: Ước lượng DID suy diễn hiệu quả cao Borusyak–Jaravel–Spiess và Gardner (did_imputation / did2s) (Borusyak–Jaravel–Spiess Imputation DID / Gardner Two-Stage DID — borusyak_imputation_did)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B146: Ước lượng DID động cho xử lý bật–tắt đảo chiều De Chaisemartin–D’Haultfœuille (did_multiplegt_dyn) (De Chaisemartin & D’Haultfœuille Dynamic Switching DID (DID_M) — dechaisemartin_did)Cấp độ 4: Chuyên sâu (Specialized)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B147: Mô hình hiệu ứng cố định hai chiều mở rộng bão hòa Mundlak của Wooldridge (ETWFE / jwdid) (Wooldridge Extended Two-Way Fixed Effects (ETWFE) — wooldridge_etwfe)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B148: Phương pháp chiếu cục bộ kết hợp mẫu đối chứng sạch Dube–Girardi–Jordà–Taylor (LP-DID) (Clean-Control Local Projections Difference-in-Differences (LP-DID) — lp_did)Cấp độ 4: Chuyên sâu (Specialized)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B149: Phân tích độ nhạy vi phạm giả định xu hướng song song Rambachan–Roth (HonestDiD) (Rambachan & Roth HonestDiD Parallel-Trends Sensitivity — honest_did_sensitivity)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)
- Bài B152: Sai biệt trong sai biệt tổng hợp Arkhangelsky–Athey–Hirshberg–Imbens–Wager (SDID) (Synthetic Difference-in-Differences (SDID) — synthetic_did)Cấp độ 3: Nâng cao (Advanced)Dữ liệu Việt Nam (EcoData)Thực hành Trực tiếp (EcoLab)Tri-Engine Verified (Stata · R · Python)