Arte SheetsLearn. Try. Understand.

Causal Inference & Machine Learning

Doubly Robust Augmented IPW (AIPW) Treatment Effect Formula

Build Robins-Rotnitzky-Zhao doubly robust AIPW pseudo-outcomes psi_i = (m_1 - m_0) + D*(Y - m_1)/e - (1 - D)*(Y - m_0)/(1 - e) and verify consistency when either nuisance model is misspecified.

Prove the Double-Robustness Theorem numerically on four spreadsheet rows

Outcome regression g-computation fails if conditional expectations (m_1(X), m_0(X)) are misspecified; pure IPW fails if propensity score e(X) is misspecified. Augmented Inverse Probability Weighting (AIPW; Robins, Rotnitzky, & Zhao, 1994) combines both into a Neyman-orthogonal pseudo-outcome: psi_i = (m_1_i - m_0_i) + D_i * (Y_i - m_1_i) / e_i - (1 - D_i) * (Y_i - m_0_i) / (1 - e_i), whose sample mean AVERAGE(psi) is consistent if EITHER (m_1, m_0) OR e(X) is correctly specified!

Verify both halves directly on a 4-subject table where true ATE = +10.0000: (1) under exact outcome predictions E2:F5 = {(20,10), (20,10), (30,20), (30,20)} and badly misspecified propensity scores C2:C5 = {0.25, 0.25, 0.80, 0.80}, residuals Y - m_D vanish so AIPW recovers exact +10.0000 (while pure HT IPW collapses to +1.0417!); (2) zero out all outcome predictions E2:F5 = 0 while restoring true propensity e = 0.50, and the IPW residual correction restores exact +10.0000!

Nuisance-Model SpecificationPure HT IPW EstimateDoubly Robust AIPW Estimate
Exact m_d(X), Misspecified e(X)+1.0417 (Biased)+10.0000 (Exact via Outcome Fit)
Misspecified m_d(X) = 0, Exact e(X) = 0.5+10.0000 (Exact)+10.0000 (Exact via IPW Correction)
Extreme Propensity e <= 0 or e >= 1Explodes / Div-by-ZeroBlocked by Positivity Guard

Row-Level Neyman-Orthogonal AIPW Pseudo-Outcome psi_i Formula

Compute psi_i per observation in G2:G5 with a strict positivity guard 0 < e_i < 1. Use a hint-first check if collaborating on double/debiased ML: "Why must nuisance models m_d(X) and e(X) be cross-fitted out-of-fold when flexible ML learners are used?"

=LET(d_tr, B2, e_ps, C2, y_ob, D2, m_1, E2, m_0, F2, IF(OR(e_ps <= 0, e_ps >= 1), "Positivity Violation: 0 < e < 1", ROUND((m_1 - m_0) + d_tr * (y_ob - m_1) / e_ps - (1 - d_tr) * (y_ob - m_0) / (1 - e_ps), 4)))

Doubly Robust Sample Average Treatment Effect AVERAGE(psi) Formula

Average the four orthogonal pseudo-outcomes once every row passes positivity.

=IF(OR(MIN(C2:C5) <= 0, MAX(C2:C5) >= 1), "Positivity Violation: 0 < e < 1", ROUND(AVERAGE(G2:G5), 4))

Try the example

Use the original values or change them to test your understanding.

Further reading