Balance Statistics for Matching, optmatch, ebal, and designmatch Objects
Generates balance statistics for output objects from Matching, optmatch, ebal, and designmatch.
## S3 method for class 'Match' bal.tab(x, formula = NULL, data = NULL, treat = NULL, covs = NULL, stats, int = FALSE, poly = 1, distance = NULL, addl = NULL, continuous, binary, s.d.denom, thresholds = NULL, weights = NULL, cluster = NULL, imp = NULL, pairwise = TRUE, abs = FALSE, subset = NULL, quick = TRUE, ...) ## S3 method for class 'optmatch' bal.tab(x, ...) ## S3 method for class 'ebalance' bal.tab(x, ...) ## S3 method for class 'designmatch' bal.tab(x, ...)
x |
either a |
formula |
a |
data |
Optional; a |
treat |
a vector of treatment statuses. See Details. |
covs |
a data frame of covariate values for which to check balance. See Details. |
stats |
|
int |
|
poly |
|
distance |
an optional formula or data frame containing distance values (e.g., propensity scores) or a character vector containing their names. If a formula or variable names are specified, |
addl |
an optional formula or data frame containing additional covariates for which to present balance or a character vector containing their names. If a formula or variable names are specified, |
continuous |
whether mean differences for continuous variables should be standardized ( |
binary |
whether mean differences for binary variables (i.e., difference in proportion) should be standardized ( |
s.d.denom |
|
thresholds |
a named vector of balance thresholds, where the name corresponds to the statistic (i.e., in |
weights |
a named list containing additional weights on which to assess balance. Each entry can be a vector of weights, the name of a variable in |
cluster |
either a vector containing cluster membership for each unit or a string containing the name of the cluster membership variable in |
imp |
either a vector containing imputation indices for each unit or a string containing the name of the imputation index variable in |
pairwise |
whether balance should be computed between the treatment groups or for each treatment against all groups combined. See |
abs |
|
subset |
a |
quick |
|
... |
for |
bal.tab()
generates a list of balance summaries for the object given, and function similarly to Matching::MatchBalance()
and designmatch::meantab()
. Note that output objects from designmatch do not have their own class; bal.tab()
first checks whether the object meets the criteria to be treated as a designmatch
object before dispatching the correct method. Renaming or removing items from the output object can create unintended consequences.
The input to bal.tab.Match()
, bal.tab.optmatch()
, bal.tab.ebalance()
, and bal.tab.designmatch()
must include either both formula
and data
or both covs
and treat
. Using the formula
+ data
inputs mirrors how MatchBalance()
is used in Matching, and using the covs
+ treat
input mirrors how meantab()
is used in designmatch. (Note that to see identical results to meantab()
, s.d.denom
must be set to "pooled"
, though this is not recommended.) For optmatch
output objects, specifying a treatment is not required.
All balance statistics are calculated whether they are displayed by print or not, unless quick = TRUE
. The threshold
argument controls whether extra columns should be inserted into the Balance table describing whether the balance statistics in question exceeded or were within the threshold. Including these thresholds also creates summary tables tallying the number of variables that exceeded and were within the threshold and displaying the variables with the greatest imbalance on that balance measure.
The inputs (if any) to covs
must be a data frame; if more than one variable is included, this is straightforward (i.e., because data[,c("v1", "v2")]
is already a data frame), but if only one variable is used (e.g., data[,"v1"]
), R will coerce it to a vector, thus making it unfit for input. To avoid this, simply wrap the input to covs
in data.frame()
or use subset()
if only one variable is to be added. Again, when more than one variable is included, the input is general already a data frame and nothing needs to be done.
For point treatments, if clusters and imputations are not specified, an object of class "bal.tab"
containing balance summaries for the given object. See bal.tab()
for details.
If clusters are specified, an object of class "bal.tab.cluster"
containing balance summaries within each cluster and a summary of balance across clusters. See bal.tab.cluster
for details.
Noah Greifer
bal.tab()
for details of calculations.
########## Matching ########## library(Matching); data("lalonde", package = "cobalt") p.score <- glm(treat ~ age + educ + race + married + nodegree + re74 + re75, data = lalonde, family = "binomial")$fitted.values Match.out <- Match(Tr = lalonde$treat, X = p.score) ## Using formula and data bal.tab(Match.out, treat ~ age + educ + race + married + nodegree + re74 + re75, data = lalonde) ########## optmatch ########## library("optmatch"); data("lalonde", package = "cobalt") lalonde$prop.score <- glm(treat ~ age + educ + race + married + nodegree + re74 + re75, data = lalonde, family = binomial)$fitted.values pm <- pairmatch(treat ~ prop.score, data = lalonde) ## Using formula and data bal.tab(pm, treat ~ age + educ + race + married + nodegree + re74 + re75, data = lalonde, distance = "prop.score") ########## ebal ########## library("ebal"); data("lalonde", package = "cobalt") covariates <- subset(lalonde, select = -c(re78, treat, race)) e.out <- ebalance(lalonde$treat, covariates) ## Using treat and covs bal.tab(e.out, treat = lalonde$treat, covs = covariates) ########## designmatch ########## library("designmatch"); data("lalonde", package = "cobalt") covariates <- as.matrix(lalonde[c("age", "educ", "re74", "re75")]) treat <- lalonde$treat dmout <- bmatch(treat, total_groups = sum(treat == 1), mom = list(covs = covariates, tols = absstddif(covariates, treat, .05)) ) ## Using treat and covs bal.tab(dmout, treat = treat, covs = covariates)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.