Hi SAS Community,
I’m working on a propensity score (PS) model and have a specific query regarding the use of weight truncation to handle imbalance in covariates. Here's what we have so far:
Current Context
-
Variables and SMDs
- Seven variables were included in the PS model based on a literature review.
- Only one variable (age) has an SMD > 0.1, specifically 0.15.
-
Why SMD > 0.1 is Not Ideal
- A standardized mean difference (SMD) > 0.1 suggests covariate imbalance between treatment groups. This imbalance can indicate that the propensity score model has not adequately controlled for confounding, potentially biasing the results. Ideally, SMDs should be as close to 0 as possible to ensure balance.
-
Proposed Methodology
- Weight Truncation: If a weight > 10 is reported, we truncate all weights to the 99th percentile.
- After truncation, SMDs are recalculated manually using the truncated dataset.
-
Iterative Addition of Interactions:
- If any variable in the base case model still has an SMD > 0.1:
- Add interactions one at a time (e.g., Age × Variable 1, Age × Variable 2, etc.).
- Sort models by the maximum variable SMD and select the one with the lowest maximum SMD.
- If balance is still not achieved, repeat the process with additional interactions iteratively until all possible interactions are added or the SMD criterion is relaxed.
Questions
- Is truncating weights to the 99th percentile the best way to handle extreme weights and recalibrate SMDs?
- Are there alternative methods to address covariate imbalance more efficiently or robustly (e.g., trimming weights or alternative balance measures,)?
- Any suggestions for streamlining the iterative process of adding interactions systematically?
Here’s the current code for the PS model setup in SAS:
proc psmatch data=ac_padsl region=allobs;
class PSTUDYID PECOGBL PCDK46 PHER2 PRACE PSTAGE PSTYESYN PSTNOYN PSTUNKYN PRASIAYN PRAFRYN PRWHTYN PROTHYN PRUNKYN;
psmodel PSTUDYID (Treated='study') = PAGE PECOGBL PCDK46 PLINES PRACE PSTAGE PHER2;
psweight weight=attwgt nlargestwgt=6;
assess lps var=(PAGE PECOGBL PCDK46 PLINES PSTYESYN PSTNOYN PSTUNKYN PRASIAYN PRAFRYN PRWHTYN PROTHYN PRUNKYN PHER2)
/ varinfo plots=(barchart boxplot(display=(lps PAGE)) wgtcloud);
id PAGE PLINES PECOGBL PCDK46 PHER2;
output out(obs=all)=ac_OutEx1 weight=_ATTWgt_;
ods output StdDiff=ac_myStdDiff;
run;