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.
In plain language
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 to use
Diagnose interference whenever treatment, policy, information, infection, clinical workflow, or coding practice can cross the nominal unit boundary. High-risk designs include vaccine and antimicrobial studies, provider or site interventions, learning-health-system rollouts, formulary or coverage-policy studies, telehealth adoption, diagnostic stewardship, EHR alert implementation, shared-care networks, household or school studies, and any analysis where treated and comparator patients share clinicians or facilities during follow-up. The protocol should state the causal unit, the interference set, the exposure mapping, the estimand (direct, indirect, total, or overall effect), and the diagnostics used to detect contamination.
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.
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.18 | ||
| 2024-04 | Clinic A | 1 | 0.1 | |
| 2024-03 | Clinic B | 0.45 | 0.17 | |
| 2024-04 | Clinic B | 0.45 | 0.13 |
Steps
Define the intended direct exposure: alert_on = 1 for Clinic A after April 2024.
Define a spillover exposure for comparator patients: shared_surgeon_share = 45% at Clinic B, meaning many comparator encounters are handled by surgeons exposed to the alert workflow.
Compare pre-post changes: Clinic A falls from 18% to 10%, while Clinic B also falls from 17% to 13%. The comparator changed even though alert_on remains 0.
Interpret the naive direct contrast cautiously: Clinic B is not a clean untreated counterfactual; it is partially contaminated through shared clinicians.
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.
Runnable example
python implementation
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...
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())r implementation
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)