BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
amin1234
Obsidian | Level 7

Error: A feasible optimal fixed ratio matching that has the specified parameters does not exist. 

 

I am trying to do propensity score matching but I keep getting an error saying "A feasible optimal fixed ratio matching that has the specified parameters does not exist". When I change the keyword OPTIMAL to GREEDY everything works fine. 

 

Below is my code; 

 

PROC PSMATCH DATA = dataset REGION = CS;
CLASS drug_group gender age_cat;
PS MODEL drug_group(TREATED = 'Medication') = gender age_cat education health_index;
MATCH METHOD = OPTIMAL(K=1) EXACT = (gender age_cat) STAT = LPS CALIPER = 0.2;
ASSESS LPS VAR = (age_cat education health_index) / WEIGHT = NONE PLOTS =(BOXPLOT BARCHART);
OUTPUT OUT(OBS=ALL) = match_data LPS = _lps MATCHID = _matchid;
RUN;

I have more patients in the 'Medication' group than the control group.  I've tried changing the caliper but that didn't help. 

Any help is appreciated. Thank you!

1 ACCEPTED SOLUTION

Accepted Solutions
MichaelL_SAS
SAS Employee

Yes, the caliper introduces a constraint on the matching problem. The caliper requires that any matched observations must have a difference in propensity score values or logits of the propensity score values (in your example code I believe it's the logits that are being compared) less than the caliper value. So it is likely the case that there is again some "treated" observation that cannot be matched due to the caliper constraint (and the constraints coming from the EXACT= option). 

 

Note as discussed in the CALIPER portion of the PROC PSMATCH documentation, by default the caliper value is computed by taking a pooled estimate of the standard deviation of the logits of the propensity scores or propensity scores and multiplying that by the value specified in the CALIPER= option. If you don't specify a value in the CALIPER= option, by default 0.25 used as the multiplier. Specifying CALIPER=. removes the caliper constraint completely. You can also directly specify a caliper value by using the CALIPER(MULT=ONE)= syntax. The caliper value is reported in the "Matching Information" table. 

View solution in original post

6 REPLIES 6
Reeza
Super User
Is heath index correct? You have health, missing the L and health index as well.
amin1234
Obsidian | Level 7

Thanks, Reeza. That's just a typo when I was typing the code in the forum. 

MichaelL_SAS
SAS Employee

There being more observations in the treatment condition than in the control condition is likely the cause. The optimal matching methods in PROC PSMATCH are done without replacement and will return an error if there is a treated observation (in the support region) that cannot be matched. The greedy matching method is also done without replacement but will allow for unmatched treated observations and print a message noting the unmatched treated subjects in the log. Another alternative would be to use matching with replacement, in which case observations in the control condition can be matched to more than one treated observation. Example 96.6 in the PROC PSMATCH documentation demonstrates matching with replacement. 

amin1234
Obsidian | Level 7
Thanks @MichaelL_SAS . When I treat the control group as treated, so that there's enough patients to be matched without replacement I still get the same error. However, when I set the caliper to missing (caliper = .) or remove it entirely, it works. Do you know any reason why that is the case?
MichaelL_SAS
SAS Employee

Yes, the caliper introduces a constraint on the matching problem. The caliper requires that any matched observations must have a difference in propensity score values or logits of the propensity score values (in your example code I believe it's the logits that are being compared) less than the caliper value. So it is likely the case that there is again some "treated" observation that cannot be matched due to the caliper constraint (and the constraints coming from the EXACT= option). 

 

Note as discussed in the CALIPER portion of the PROC PSMATCH documentation, by default the caliper value is computed by taking a pooled estimate of the standard deviation of the logits of the propensity scores or propensity scores and multiplying that by the value specified in the CALIPER= option. If you don't specify a value in the CALIPER= option, by default 0.25 used as the multiplier. Specifying CALIPER=. removes the caliper constraint completely. You can also directly specify a caliper value by using the CALIPER(MULT=ONE)= syntax. The caliper value is reported in the "Matching Information" table. 

amin1234
Obsidian | Level 7
Got it. Thank you!! @MichaelL_SAS

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 6 replies
  • 5144 views
  • 0 likes
  • 3 in conversation