A major update to kmatch is now available from SSC. To install the update, type
. ssc install kmatch, replace
or use the adoupdate command. Note that the latest version of moremata is required, hence also type
. ssc install moremata, replace
Some highlights of the new version:
  • Standard errors: kmatch now reports analytic standard errors for treatment effect estimates. The standard errors are computed using influence functions (see https://ideas.repec.org/p/bss/wpaper/32.html) assuming the matching or balancing weights to be fixed. These standard errors are only meant to give you a rough idea about the size of the standard errors. Assuming the weights to be fixed is an oversimplification that may bias the results. My experience from some limited simulations is that the influence-function standard errors will tend to be conservative (i.e. to large; except for kmatch ra, for which the influence-function standard errors are consistent). However, applying post-matching regression adjustment seems to help a lot, at least in my simulations. Not only did regression adjustment reduce the bias in the treatment effect estimates (due to exploitation of the double-robust property), it also made the influence-function standard errors consistent in most cases.
    To get better standard errors I suggest to rely on teffects whenever possible and use vce(bootstrap) in other cases. In my simulations, the bootstrap generally produced good results, with the exception of nearest-neighbor matching, where the bootstrap standard errors tend to be conservative. Official Stata's teffetcs nnmatch and teffetcs psmatch will produce consistent standard errors for nearest-neighbor matching.
  • Entropy balancing: there is a new subcommand kmatch eb for entropy balancing; entropy balancing is also supported as post matching refinement through the ebalance() option.
  • Coarsened exact matching: the ematch() option now features advanced syntax that allows you to coarsen variables before matching; there is also a new subcommand kmatch em dedicated to (coarsened) exact matching.
  • Inverse probability weighting: there is a new subcommand called kmatch ipw that implements inverse probability weighting
  • Regression adjustment: post-matching regression adjustment has always been supported by kmatch, but I now added a subcommand kmatch ra that applies regression adjustment without matching
  • Nearest-neighbor matching without replacement: kmatch md and kmatch ps now have support matching without replacement through the wor option (only allowed in combination with nn()). A greedy algorithm is used that assigns matches from smallest to largest distances.
  • Store IDs of matches: there is now an idgenerate() option that allows you to store the IDs of the matched controls
Further changes (without claim to completeness):
  • option nose suppresses computation of standard errors, option ifgenerate() stores the influence functions
  • option comsup without arguments now restricts the observations to the minimum PS range
  • option keepall used with nearest-neighbor matching with replacement causes causes observations to be treated as matched even if the minimum number of nearest neighbors is not reached
  • generate() now stores an additional variable containing strata ID (matching subcommands only)
  • caliper() is now allowed as a synonym for bwidth()
  • there is a new bwadjust() option to adjust bandwidth by a specified factor in kernel matching
  • the maximum number of iterations for propensity score estimation is now restricted to 50 (; there is a new maxiter() option to change the setting
  • outcome variables no longer have to be unique, i.e. you can have repeated outcome variables
  • kmatch summarize and kmatch csummarize now have an option to report skewness
  • some changed have been made to how results are displayed
  • a number of minor bugs have been fixed