Weight Truncation and Population Trimming
Distinct responses to limited support or unstable weighting: an explicit population restriction changes eligibility, while capping estimated analysis weights changes the estimator and can trade bias for precision.
On this page
Distinct responses to limited support or unstable weighting: an explicit population restriction changes eligibility, while capping estimated analysis weights changes the estimator and can trade bias for precision. Use for transparent diagnosis and prespecified sensitivity analysis of unstable inverse-probability estimators, or for a deliberately supported target population defined before outcome-driven choices.
Definition and scope
Distinct responses to limited support or unstable weighting: an explicit population restriction changes eligibility, while capping estimated analysis weights changes the estimator and can trade bias for precision. The target population, use, and analysis remain protocol decisions; this card explains the choices and their consequences rather than approving a study.
Operational specification
State the original estimand and population, propensity/observation model, overlap diagnostics, weight definition, normalization, and the proposed operation. A prespecified covariate or support restriction defines the analyzed population; a threshold on estimated weights may change the sample without naming a clinically coherent overlap population. Capping retains records but changes their contributions.
Analysis and diagnostics
Investigate data errors, treatment selection, model specification, structural versus practical positivity, influence, effective sample size, and balance before choosing a rule. If truncating, show the fraction and mass of weights affected, balance afterward, and sensitivity of estimates and uncertainty. If restricting, report the new eligibility/target and justify any re-estimation. Neither operation creates exchangeability.
When NOT to use and common errors
Do not label all capping as a new causal estimand, choose thresholds solely to obtain significance, treat an arbitrary maximum weight as a validity boundary, or call overlap weighting equivalent to ad hoc truncation. Capping costs is a separate outcome transformation.
Worked example and implementation boundary
Synthetic weights are 1, 1, 1, and 9. Calculate effective sample size as squared total weight divided by the sum of squared weights. The effective sample size is approximately 1.714 despite four records. It diagnoses concentration, not a proof that a particular cap or population is valid. The code performs that explicitly stated calculation with synthetic inputs. It is not a complete fitted analysis and does not demonstrate the identification assumptions, estimate sampling uncertainty, or certify application in another population.
Data-source and reporting requirements
Preserve the provenance, dates, units, and observation rule for each input. Claims capture services and transactions under observable benefits; absence of a record is not proof that an event or resource use did not occur. EHR and registry measurements depend on the collection process and may miss care outside the system. Linked sources add reconciliation and selection questions. Primary collection can improve a missing domain but still requires valid measurement and follow-up. Report which of these limitations affects the stated use, which evidence supports the chosen inputs, and what remains uncertain.
Worked example
Scenario
Synthetic weights are 1, 1, 1, and 9. Calculate effective sample size as squared total weight divided by the sum of squared weights.
Dataset
Synthetic inputs with units defined in the scenario; no patient data.
| input | value |
|---|---|
| total_weight | 12 |
| sum_squared_weights | 84 |
Steps
Result
The effective sample size is approximately 1.714 despite four records. It diagnoses concentration, not a proof that a particular cap or population is valid.
Trade-offs
Code example
Executed example · Python 3.11.15 · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
total_weight = 12
sum_squared_weights = 84
result = total_weight*total_weight/sum_squared_weights
assert abs(result - 1.7142857142857142) < 1e-9
print(result)
Executed example · Rscript (R) version 4.6.1 (2026-06-24) · 2026-11-01T02:04:28+00:00
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study.
total_weight <- 12
sum_squared_weights <- 84
result <- total_weight*total_weight/sum_squared_weights
stopifnot(abs(result - 1.7142857142857142) < 1e-9)
print(result)
Illustrative example · execution not verified
Self-contained synthetic calculation for the worked example only. Inputs and units are listed in the dataset; output is the displayed scalar. This does not fit the full study/model, estimate uncertainty, or select an analysis for a real study. SAS source is illustrative until executed in a compatible SAS runtime.
data worked_example;
total_weight = 12;
sum_squared_weights = 84;
result = total_weight*total_weight/sum_squared_weights;
put result=;
run;