CHANGES IN OPTMATCH VERSION 0.8-2 * full() and pair() are now aliases to fullmatch() and pairmatch() * All match_on() methods take `caliper` arguments (formerly just the numeric * method and derived methods had this argument). * boxplot methods for fitted propensity score methods (glm and bigglm) * fill.NAs now takes `constrats.arg` argument to mimic model.matrix() * Several bug fixes in examples, documentation * The methods pscore.dist() and mahal.dist() are now deprecated, with useful * error messages pointing users to replacements. * Significant performance improvements for sparse matching problems. * Functions umatched() and matched() were backwards. Corrected. CHANGES IN OPTMATCH VERSION 0.8-1 * Several small bug fixes CHANGES IN OPTMATCH VERSION 0.8-0 NEW FEATURES * More efficient data structure for sparse matching problems, those with relatively few allowed (finite) distances between units. Sparse problems often arise when calipers are employed. The new data structure (`InfinitySparseMatrix`) behaves like a simple matrix, allowing `cbind`, `rbind`, and `subset` operations, making it easier to work with the older `optmatch.dlist` data structure. * match_on: A series of methods to generate matching problems using the new data structure when appropriate, or using a standard matrix when the problem is dense. This function is being deployed along side the `mdist` function to provide complete backward compatibility. New development will focus on this function for distance creation, and users are encouraged to use it right away. One difference for `mdist` users is the `within` argument. This argument takes an existing distance specification and limits the new comparisons to only those pairs that have finite distances in the `within` argument. See the `match_on`, `exactMatch`, and `caliper` documentation for more details. * exactMatch: A new function to create stratified matching problems (in which cross strata matches are forbidden). Users can specify the strata using either a factor vector or a convenient formula interface. The results can be used in calls `match_on` to limit distance calculations to only with-in strata treatment-control pairs. * New `data` argument to `fullmatch` and `pairmatch`: This argument will set the order of the match to that of the `row.names`, `names`, or contents of the passed `data.frame` or `vector`. This avoids potential bugs caused when the `optmatch` objects were in a different order than users' data. * Test suite expanded and now uses the testthat library. * fill.NAs allows (optionally) filling in all columns (previously, the first column was assumed to be an outcome or treatment indicator and was not filled in). * New tools to find minimum feasible constraints: Large matching problems could exceed the upper limit for a matching problem. The functions `minExactmatch` and `maxCaliper` find the smallest interaction of potential factors for stratified matchings or the largest (most generous) caliper, respectively, that make the problem small enough to fit under the maximum problem size limit. See the help pages for these functions for more information. BUG FIXES * Unmatched units are always NA (instead of being labeled "1.NA" or similar). This avoids some obscure bugs when feeding the results of `fullmatch` to other functions. FOR A DETAILED CHANGELOG, SEE https://github.com/markmfredrickson/optmatch CHANGES IN OPTMATCH VERSION 0.7-1 NEW FEATURES * pairmatch() has a new option, "remove.unmatchables," that may be useful in conjunction with caliper matching. With "remove.unmatchables=TRUE", prior to matching any units with no counterparts within caliper distance are removed. Pair matching can still fail, if for example for two distinct treatment units only a single control, the same one, is available for matching to them; but remove.unmatchables eliminates one simple and common reason for pair matching to fail. * Applying summary() to an optmatch object now creates a "summary.optmatch" containing the summary information, in addition to reporting it to the console (via a summary.optmatch method for print() ). * mdist.formula() no longer requires an explicit data argument. I.e., you can get away with a call like "mdist(Treat~X1+X2|S)" if the variables Treat, X1, X2 and S are available in the environment you're working from (or in one of its parent environments). Previously you would have had to do "mdist(Treat~X1+X2|S, data=mydata)". (The latter formulation is still to be preferred, however, in part because with it mdist() gets to use data's row names, whereas otherwise it would have to make up row names.) CHANGES IN OPTMATCH VERSION 0.7 NEW FEATURES * New function fill.NAs replaces missing observations (ie. NA values) with minimally informative values (ie. the mean of observed columns). Fill.NAs handles functions in formulas intelligently and provides missing indicators for each variable. See the help documentation for more information and examples. BUG FIXES * mdist.function method now properly returns an optmatch.dlist object for use in summary.optmatch, etc. * mdist.function maintains label on grouping factor. CHANGES IN OPTMATCH VERSION 0.6-1 NEW FEATURES * New mdist method to extract propensity scores from models fitted using bigglm in package "biglm". * mdist's formula method now understands grouping factors indicated with a pipe ("|") * informative error message for mdist called on numeric vectors * updated mdist documentation CHANGES IN OPTMATCH VERSION 0.6 NEW FEATURES * There is a new generic function, mdist(), for creating matching distances. It accepts: fitted glm's, which it uses to extract propensity distances; formulas, which it uses to construct squared Mahalanobis distances; and functions, with which a user can construct his or her own type of distance. The function method is more intuitive to work with than the older makedist() function. * A new function, caliper(), builds on the mdist() structure to provide a convenient way to add calipers to a distance. In contrast to earlier ways of adding calipers, caliper() has an optional argument specify observations to be excluded from the caliper requirement --- this permits one to relax it for just a few observations, for instance. * summary.optmatch() now removes strata in which matching failed (b/c the matching problem was found to be infeasible) before summarizing. It also indicates when such strata are present, and how many observations fall in them. * Demo has been updated to reflect changes as of version 0.4, 0.5, 0.6. DEPRECATED & DEFUNCT * The vignette is sufficiently out of date that it's been removed. BUG FIXES * subsetting of objects of class optmatch now preserves matched.distances attribute. * fixed bug in maxControlsCap/minControlsCap whereby they behaved unreliably on subclasses within which some subjects had no permissible matches. * Removed unnecessary panic in fullmatch when it was given a min.controls argument with attributes other than names (as when it is created by tapply()). * fixed bug wherein summary.optmatch fails to retrieve balance tests if given a propensity model that had function calls in its formula. * Documentation pages for fullmatch, pairmatch filled out a bit. CHANGES IN OPTMATCH VERSION 0.5 NEW FEATURES: * summary.optmatch() completely revised. It now reports information about the configuration of the matched sets and about matched distances. In addition, if given a fitted propensity model as a second argument it summarizes covariate balance.