I am using genetic matching, implemented through the MatchIt package (dependent on Matching and rgenoud), in order to evaluate causal effects of a particular treatment (binary categorical variable) on a binary outcome. I used mice to multiply impute 5 datasets, each of which subsequently underwent genetic matching in MatchIt against a set of pretreatment covariates. Each of the imputed, matched datasets is to undergo regression separately; the analysis results are to be combined into a mira object and pooled using the appropriate mice functions.

I was going to report odds ratios from a glm log regression of the outcome of interest against the binary treatment variable and covariates. It seems as though people commonly report treatment effects (Average Treatment Effect on the Treated, or Average Treatment Effect). The MatchIt documentation describes how to use the Zelig package to compute treatment effects, but I'm running into a couple problems.

For one, I'm not able to deal with multiply imputed data in Zelig; Zelig has vcov() and coef() methods, but for whatever reason mice::pool() is unable to utilize them (I think zelig names them get_coef() and get_vcov(), so I think the naming may be an issue). Zelig itself is able to take in a mi object, and has a function to_zelig_mi() for rolling multiple dataframes into an mi object, but it will not accept my data. My matched datasets vary in their weighting and don't sum to the same size control group, and Zelig doesn't seem to like that the weights vectors aren't the same length.

However, even if I could get Zelig to work with my data, I don't know how to interpret the output regarding the ATT. This is what I am given when using Zelig to calculate ATT for one of the imputed datasets.

> z.out <- zelig(outcome ~  cov1 + cov2 + cov3,
+                data = match.data(gen_match_1, "control"),
+                weights="weights", model = "logit")
Noninteger weights were set, but the model in Zelig is only able to use integer valued weights.
 A bootstrapped version of the dataset was constructed using the weights as sample probabilities.

> x.out <- setx(z.out, data = match.data(gen_match_1, "treat"), cond = TRUE)
> s.out <- sim(z.out, x = x.out)
> summary(s.out)

 sim x :
         mean        sd       50%      2.5%    97.5%
[1,] 0.470119 0.1370024 0.4651871 0.2140349 0.731371
         0     1
[1,] 0.533 0.467

If I understand correctly, the second matrix pv is for "predicted values", and [1,1] is the predicted value for the Treated group with receipt of treatment, whereas [1,0] is the Treated group had they not received the treatment, and the difference is the treatment effect? If this was a least-squares regression, I would have an idea of how to interpret that, but I'm not sure what to make of that given that this is a logit model.

Any help with regards to how to compute the ATT for multiply imputed data that is subject to matching and subsequent analysis (working with 5 different analysis objects), as well as how to interpret an ATT in this case would be highly appreciated. Thanks!


1 Answer 1


Late, but for posterity:

You want the mitools package, which allows you to supply a list of estimated parameters and their estimated covariance matrix. Get a list of the parameters from each model, say, param.list, and another list of the covariances, say, cov.list. Then run:

summary(MIcombine(param.list, cov.list))

Note that it's not necessary to use Zelig to extract treatment effects, and using glm is acceptable too. If using MatchIt, the estimated effect is intepretable as the average treatment effect in the treated (ATT).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.