# 3:1 matching with MatchIt in R. The number of matched control is not equal to 3 times the number of cases

Hello I'm using the MatchIt package in R

I have a total of unmatched 116 treated cases and 462 unmatcehd non-treated case

with the command

mod_match_logit = matchit(f.build("treatement_yes_or_no", covariates),
method = "nearest", distance = "logit", data = df, caliper = 0.05, ratio = 3)


I get then a result of 91 matched treated cases with 248 matched non treated cases. What I don't understand is that, with a 3:1 matching, I should have 91*3 = 273 matched non treated cases (and not 248). Per default is the command replace set to F in MatchIt, so it doesn't explain the difference for me. What am I missing?

• I'm not familiar with this R package, but it may be that with your caliper width of 0.05, not every case will have at least 3 potentiel matched controls. You might set the caliper width to something larger or smaller to see the number of matches increase or decreased, respectively. – prince_of_pears Oct 14 '18 at 22:43

The ratio argument sets the maximum number of controls to match to each treated unit. If there aren't enough control units, you won't get 3 control units per treated unit, but matchit will issue a warning. If you use a caliper and there are treated units for which there are fewer than 3 controls in its acceptable region, some treated units will not have 3 controls (but there won't be a warning). You can take a look at which treated units have fewer than 3 matches by looking at mod_match_logit\$match.matrix. The ones with "NA" are ones that don't have all the matches.
Also, I noticed you're using my package cobalt based on your use of f.build. I hope it's working well for you.