Paired 2x2 Factorial Design for Treatment Effect Identification and Estimation in the Presence of Paired Interference and Noncompliance
I propose an experimental design, the Paired 2x2 Factorial Design, together with two strategies for treatment effect identification and estimation from a large sample of pairs, comprised of distinguishable members (e.g. couples with a healthy and an ill member), when (i) there is interference: the potential outcomes of a pair member do not only depend on the member’s own treatment participation but on his/her partner’s participation too; (ii) there is (endogenous) noncompliance: the units may not comply perfectly with their treatment encouragement; (iii) the experimenter can have two different binary treatments and two different outcomes of interest for the different members in a pair; (iv) units within a pair are allowed to coordinate their treatment participation based on their encouragement. The latter, number (iv), is my main contribution, as this has not been addressed by previous studies.
The first strategy uses only half of the sample to identify the effects of both treatments on both pair members, in certain complier subpopulations, under the usual instrumental variables assumptions. The second strategy, the main theoretical result, uses the whole sample to identify the same treatment effects, relying on the same set of assumptions.
The use of the design is illustrated, in theory, on a sample of married couples where one member suffers from depression. The treatment is an antidepressant for the depressed member and an educational program for the healthy partner.
In a Julia REPL step into the
Pkg by pressing
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]