Interference, Spillover, and Contamination
A violation of the no-interference part of SUTVA in which one person's, provider's, site's, or plan's exposure changes another unit's outcome or observed care pathway; in RWE this can appear as vaccine herd effects, provider learning, formulary spillover, care-team contamination, or cross-over of clinical behavior between treated and comparison groups.
On this page
Interference means patients are not isolated islands. One person's treatment, one clinician's training, or one clinic's policy can change outcomes for other patients who are supposed to be untreated controls. Spillover is the useful or harmful effect that crosses that boundary; contamination is the study problem created when the comparison group receives part of the intervention. In RWE, the fix starts by asking what the real unit of action is: patient, clinician, clinic, hospital, payer, school, household, or geography.
Interference, spillover, and contamination
are the failure modes that appear when the observation unit is not causally isolated. Standard individual-level causal analyses assume that one person's potential outcome depends only on that person's own treatment. In RWE that is often false: vaccination changes transmission risk for unvaccinated contacts; a clinician trained to use a new pathway may apply it to comparator patients; a hospital's sepsis protocol can alter nursing surveillance for everyone on the ward; a payer formulary change can shift prescribing across the whole network. The exposure has moved from an individual attribute to a social, clinical, or organizational field.
The operational distinction matters. Interference is the general causal structure: unit i's outcome depends on unit j's exposure. Spillover is the estimand-relevant effect transmitted from exposed units to unexposed or differently exposed units, such as the indirect protection of unvaccinated neighbors. Contamination is the study-design problem in which control units receive enough of the active intervention, or are affected by it through shared staff, protocols, patients, or sites, that the intended comparison is diluted. These are not mere nuisance terms. They determine whether the observed contrast estimates a direct individual effect, a total policy effect, an indirect spillover effect, or an attenuated mixture that no decision-maker asked for.
Mechanisms in pharmacoepidemiology and health-services RWE
Interference is clearest in infectious disease, but it is not confined to transmission. In vaccine effectiveness studies, untreated patients living in highly vaccinated areas may benefit from lower exposure pressure, so a naive vaccinated-versus-unvaccinated contrast can understate the total program effect and misstate the direct effect if community coverage is ignored. In provider-level interventions, the unit of treatment may be the prescriber or clinic, not the patient: once a clinician receives an opioid stewardship alert or heart-failure pathway training, all subsequent patients can be affected regardless of whether their record triggered the alert. In payer studies, utilization management for one product can alter substitution, prior-authorization behavior, coding, and monitoring for clinically adjacent products. In oncology and rare disease registries, early adopters of a molecular testing program can diffuse testing norms into the comparator period or comparator sites, creating secular spillover that resembles calendar-time confounding.
Pros, cons, and trade-offs
The analytic choice is not "adjust for interference" as a single covariate. The first choice is the causal unit. Individual-level analysis is efficient and familiar when interference is negligible or local and measured, but it is biased when exposure flows through shared clinicians, households, facilities, or geography. Cluster-level analysis aligns the unit of assignment and interference, and often protects against contamination, but it sacrifices power, requires enough clusters, and can introduce cluster-level confounding if early-adopting sites are systematically different. Network or partial-interference estimators preserve individual-level detail and can estimate direct and spillover effects, but they require a defensible exposure mapping: who can affect whom, over what time window, and through what dose metric. A pragmatic middle ground in many RWE studies is to define exposure at the provider/site/plan level, include cluster-robust inference, and report sensitivity analyses that vary the assumed spillover radius.
When NOT to use — and when it is actively misleading
Do not invoke interference as a vague explanation for every small or null effect. If units are independent by design and there is no plausible transmission, workflow, market, or information pathway, standard individual-level methods are adequate. Do not solve contamination by simply adding a cluster fixed effect when the exposure itself spreads within that cluster; the fixed effect can remove baseline site differences but it does not reconstruct the counterfactual untreated cluster. Do not treat cluster randomization or site-level matching as automatically sufficient: if patients move across sites, clinicians practice in multiple clinics, or policy exposure crosses geographic borders, contamination persists. Do not estimate an "individual treatment effect" from a rollout whose intervention changed background care for everyone; the estimand has become a policy effect.
Data-source operational depth
- Claims: Household identifiers are usually absent, but plan, employer, geography, prescriber, pharmacy, facility, and network identifiers can define plausible interference sets. Claims capture service use and prescriptions but not informal clinical advice, infection exposure, or provider training. For formulary and policy studies, build plan-month or employer-month exposure measures and carry them to members; do not treat a member's fill as independent of the plan-level rule that shaped all fills.
- EHR: Shared providers, care teams, order sets, EHR alerts, wards, and practice sites are often observable and are the dominant interference channels. The same EHR implementation can affect both treated and comparator patients through documentation intensity and ordering behavior. Build provider-site-time exposure histories and check whether comparator patients' processes changed after the intervention went live.
- Registry: Registry participation can itself standardize testing and follow-up, creating contamination between intervention and comparator pathways inside participating sites. Multi-site registries need site adoption dates, referral patterns, and whether clinicians contributed patients to both arms.
- Linked data: Claims-EHR-geography linkage enables the strongest diagnostics: provider network overlap, area-level coverage, patient movement across sites, and household or neighborhood exposure proxies. Linkage also raises privacy constraints, so interference sets should be pre-specified at the coarsest level that captures the plausible pathway.
Decision diagram
flowchart LR A["Patient A exposed"] B["Patient B unexposed"] P["Shared provider/site/household/plan"] YB["Patient B outcome"] YA["Patient A outcome"] A --> YA A --> P P --> YB B --> YB
Worked example
Scenario
A health system turns on a prescribing alert for opioid-naive surgical patients at Clinic A in April 2024. Clinic B is intended to be the comparator. Several surgeons practice in both clinics. The question is whether the alert reduced high-dose opioid starts. A patient-level treated-versus- comparator analysis ignores the fact that cross-practicing surgeons may apply the alert's lesson to Clinic B patients.
Dataset
Minimal clinic-month table showing direct adoption and clinician overlap.
| clinic_month | clinic | alert_on | shared_surgeon_share | high_dose_start_rate |
|---|---|---|---|---|
| 2024-03 | Clinic A | 0 | 0.0 | 0.18 |
| 2024-04 | Clinic A | 1 | 0.0 | 0.1 |
| 2024-03 | Clinic B | 0 | 0.45 | 0.17 |
| 2024-04 | Clinic B | 0 | 0.45 | 0.13 |
Steps
Result
The observed Clinic A versus Clinic B post-period difference is 10% versus 13%, but the comparator rate also improved after the alert because clinicians crossed sites. The analyst should estimate the direct clinic effect alongside a spillover diagnostic or redefine the unit as surgeon-site-month.
Trade-offs
Runnable example
Build a simple partial-interference diagnostic. Each patient-month has own_exposed plus a cluster_id (clinic, prescriber, plan, household, or geography). The code constructs the cluster exposure fraction excluding the index patient, then estimates separate associations for own exposure and spillover exposure.
import pandas as pd
import statsmodels.formula.api as smf
def add_spillover_fraction(df: pd.DataFrame) -> pd.DataFrame:
keys = ["cluster_id", "month"]
g = df.groupby(keys)["own_exposed"].agg(["sum", "count"]).reset_index()
out = df.merge(g, on=keys, how="left")
denom = (out["count"] - 1).clip(lower=1)
out["spillover_exposure"] = (out["sum"] - out["own_exposed"]) / denom
out.loc[out["count"] <= 1, "spillover_exposure"] = 0.0
return out.drop(columns=["sum", "count"])
analytic = add_spillover_fraction(patient_month)
# Outcome could be infection, high-dose opioid start, screening, or another event indicator.
# Add calendar month fixed effects so secular shocks are not mistaken for spillover.
model = smf.glm(
"outcome ~ own_exposed + spillover_exposure + C(month)",
data=analytic,
family=smf.families.Binomial()
).fit(cov_type="cluster", cov_kwds={"groups": analytic["cluster_id"]})
print(model.summary())Constructs a leave-one-out cluster exposure fraction and fits a binomial model with cluster-robust standard errors. Replace clinic/month with the relevant interference set for the study.
library(data.table)
library(sandwich)
library(lmtest)
setDT(patient_month)
patient_month[, cluster_sum := sum(own_exposed), by = .(cluster_id, month)]
patient_month[, cluster_n := .N, by = .(cluster_id, month)]
patient_month[, spillover_exposure :=
fifelse(cluster_n > 1, (cluster_sum - own_exposed) / (cluster_n - 1), 0)]
fit <- glm(outcome ~ own_exposed + spillover_exposure + factor(month),
data = patient_month, family = binomial())
vc <- vcovCL(fit, cluster = patient_month$cluster_id)
coeftest(fit, vcov. = vc)SAS pattern for a cluster-level spillover diagnostic. The exposure fraction excludes the index patient, and PROC GENMOD clusters standard errors by the interference unit.
proc summary data=work.patient_month nway;
class cluster_id month;
var own_exposed;
output out=cluster_exp(drop=_type_ _freq_) sum=cluster_sum n=cluster_n;
run;
proc sql;
create table analytic as
select a.*,
case when b.cluster_n > 1
then (b.cluster_sum - a.own_exposed) / (b.cluster_n - 1)
else 0 end as spillover_exposure
from work.patient_month as a
left join cluster_exp as b
on a.cluster_id = b.cluster_id and a.month = b.month;
quit;
proc genmod data=analytic descending;
class cluster_id month;
model outcome = own_exposed spillover_exposure month / dist=binomial link=logit;
repeated subject=cluster_id / type=ind;
run;Citations
- [1]Hudgens MG, Halloran ME. Toward causal inference with interference. Journal of the American Statistical Association. 2008;103(482):832-842.
- [2]Tchetgen Tchetgen EJ, VanderWeele TJ. On causal inference in the presence of interference. Statistical Methods in Medical Research. 2012;21(1):55-75.