Treatment Effect Analysis for Pairs with Endogenous Treatment Takeup


Joint work with Robert P. Lieli.

PDF

Load PDF

Abstract

We study causal inference in a setting in which units consisting ofpairsof individuals(such as married couples) are assigned randomly to one of four categories: treatment for pairmemberAalone, a potentially different treatment for pair memberBalone, joint treatment, orno treatment. Allowing for endogenous non-compliance, coordinated treatment take-up, as wellas interference across pair members, we derive the causal interpretation of various instrumentalvariable estimands. While the local average treatment effect (LATE) parameters associatedwith applying the two treatments in isolation are identified under appropriate monotonicityconditions, coordinated treatment takeup makes it difficult to separate the interaction betweenthe two treatments from treatment effect heterogeneity. The stated identification results extendthe literature on causal inference in settings where the stable unit treatment value assumption(SUTVA) does not hold.

Code

Assume that pim_data.csv is an experimental data set to which the estimator can be applied. You can use the Julia package TreatmentEffects.jl in the following way to compute the LATE estimates.

In a Julia REPL step into the Pkg by pressing ]. Run add https://github.com/kmmate/TreatmentEffects.jl. Press backspace to quit Pkg. In the REPL:

using TreatmentEffects, CSV
data = read_csv("pim_data.csv")
y = data[:outcome]
d_a = data[:treatment_takeup_a]  # d_a_i=1 iff i'th member-A is treated
d_b = data[:treatment_takeup_b]  # d_b_i=1 iff i'th member-B is treated
z_a = data[:treatment_assignment_a]  # z_a_i=1 iff i'th member-A is assigned to treated
z_b = data[:treatment_assignment_b]  # z_b_i=1 iff i'th member-B is assigned to treated
m = PairedInterferenceModel(y, d_a, d_b, z_a, z_b)
late_estimates = late_estimator(m) # -> [baseline, late_for_treatmentA_compliers, late_for_treatmentB_compliers, noise]