The title essentially says it all. If you do teffects nnmatch ..., atet caliper(#) osample(toOmit) then the variable "toOmit" will include control observations. Yet, if I am interested in the average treatment effect on the treated, why would I throw away control observations? All I care about is matching my treated observations as well as possible.
While we're on the topic, it would be nice if it were possible to run caliper(#, force) which will simply restrict the sample to the matches that fit the caliper. Right now, the caliper option is very counterintuitive to use, especially when using mahalanobis distances. Your code will fail if you do the following:
Why? Because once you omit the observations that do not fit the caliper, your sample covariances change, which means the mahalanobis distances change, which means there (almost always) will be new observations that do not fit the caliper.
Moreover, you cannot run the above in one go, because the first line will give you an error message, e.g.
This means that instead you have to run
And I don't know how many Stata users are aware of the -capture noisily- trick. All of it just feels very "unStata-ish".
While we're on the topic, it would be nice if it were possible to run caliper(#, force) which will simply restrict the sample to the matches that fit the caliper. Right now, the caliper option is very counterintuitive to use, especially when using mahalanobis distances. Your code will fail if you do the following:
Code:
teffects nnmatch, atet caliper(1.5) osample(toOmit) teffects nnmatch if toOmit == 0, atet caliper(1.5)
Moreover, you cannot run the above in one go, because the first line will give you an error message, e.g.
Code:
26 observations have no nearest-neighbor matches within caliper 1.5; they are identified in the osample() variable r(459);
Code:
capture noisily teffects nnmatch, atet caliper(1.5) osample(toOmit) teffects nnmatch if toOmit == 0, atet
Comment