I am using the MatchIt package to implement nearest neighbor matching with the Mahalonobis distance. After the matching stage, how do I get it to report which control observation was matched with each treatment observation?
The following code does not work and throws the warning "No subclassification with pure Mahalanobis distance."
library("MatchIt")
data("lalonde")
lalonde_matchit_nn <-
matchit(
treat ~ age + educ + black + hispan + nodegree + married + re74 + re75,
baseline.group = 1,
data = lalonde,
method = "nearest",
distance = "mahalanobis",
subclass = T
)
Again, what I look for is for the output to have an ID for each pair of treatment and control, just like the subclass reported with other matching methods (e.g., "exact" or "cem").
You are looking for the attributes of the output in this case: output is lalonde_matchit_nn
and attributes are nn
and match.matrix
smry<-lalonde_matchit_nn$nn #A basic summary table of matched data (e.g., the number of matched units)
#represent the names of the treatment units, which
#come from the data frame specified in data. Each column stores the name(s)
#of the control unit(s) matched to the treatment unit of that row. F
matchedPool<-lalonde_matchit_nn$match.matrix
Now if you look at smry and matched pool from above code:
smry
Control Treated
All 429 185
Matched 185 185
Unmatched 244 0
Discarded 0 0
head(matchedPool)
1
NSW1 "PSID375"
NSW2 "PSID341"
NSW3 "PSID361"
NSW4 "PSID345"
NSW5 "PSID172"
NSW6 "PSID237"
The smry tells the population of each type and matched pool gives you the ID which has matched as per your optimal criteria, in this case, Mahanlobis distance, However the warning message Warning message: No subclassification with pure Mahalanobis distance
is telling you that for this method other optimal parameters can be a better choice.
For more details, it's always good practice to refer the package document, https://cran.r-project.org/web/packages/MatchIt/MatchIt.pdf