Generates balance statistics for matchit objects from MatchIt.

# S3 method for matchit
bal.tab(x, 
        stats,
        int = FALSE,
        poly = 1,
        distance = NULL,
        addl = NULL,
        data = NULL,
        continuous,
        binary,
        s.d.denom,
        thresholds = NULL,
        weights = NULL,
        cluster = NULL,
        imp = NULL,
        pairwise = TRUE,
        s.weights = NULL,
        abs = FALSE,
        subset = NULL,
        quick = TRUE,
        method,
        ...)

Arguments

x

a matchit object; the output of a call to MatchIt::matchit().

stats, int, poly, addl, data, continuous, binary, thresholds, weights, cluster, imp, pairwise, abs, subset, quick, ...

see bal.tab() for details.

See below for special notes on the distance, s.d.denom, and s.weights arguments.

method

a character vector containing the method of adjustment. Ignored unless subclassification was used in the original call to matchit(). If "weighting", the subclassification weights will be used and subclasses will be ignored. If "subclassification", balance will be assessed using the subclasses (see bal.tab.subclass for details). Abbreviations allowed.

The following arguments have special notes when used with matchit objects:

distance

the distance measure (e.g., propensity score) generated by matchit() is automatically included and named "distance".

s.d.denom

if not specified, bal.tab() will figure out which one is best based on the estimand of the matchit object: if ATT, "treated"; if ATC, "control", otherwise "pooled".

s.weights

if s.weights was supplied in the call to matchit(), they will automatically be included and do not need be specified again (though there is no harm if they are).

Details

bal.tab.matchit() generates a list of balance summaries for the matchit object given, and functions similarly to MatchIt::summary.matchit(). bal.tab() behaves differently depending on whether subclasses are used in conditioning or not. If they are used, bal.tab() creates balance statistics for each subclass and for the sample in aggregate; see bal.tab.subclass for more information.

Value

If subclassification is used and method is set to "subclassification", an object of class "bal.tab.subclass" containing balance summaries within and across subclasses. See bal.tab.subclass for details.

If matching is used and clusters are not specified, an object of class "bal.tab" containing balance summaries for the matchit 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.

Author

Noah Greifer

See also

bal.tab() for details of calculations.

Examples

library(MatchIt); data("lalonde", package = "cobalt")

## Nearest Neighbor matching
m.out1 <- matchit(treat ~ age + educ + race + 
                  married + nodegree + re74 + re75, 
                  data = lalonde, method = "nearest")
                  
bal.tab(m.out1, un = TRUE, m.threshold = .1, 
        v.threshold = 2)
#> Call
#>  matchit(formula = treat ~ age + educ + race + married + nodegree + 
#>     re74 + re75, data = lalonde, method = "nearest")
#> 
#> Balance Measures
#>                 Type Diff.Un V.Ratio.Un Diff.Adj        M.Threshold V.Ratio.Adj
#> distance    Distance  1.7941     0.9211   0.9739                         0.7566
#> age          Contin. -0.3094     0.4400   0.0718     Balanced, <0.1      0.4568
#> educ         Contin.  0.0550     0.4959  -0.1290 Not Balanced, >0.1      0.5721
#> race_black    Binary  0.6404          .   0.3730 Not Balanced, >0.1           .
#> race_hispan   Binary -0.0827          .  -0.1568 Not Balanced, >0.1           .
#> race_white    Binary -0.5577          .  -0.2162 Not Balanced, >0.1           .
#> married       Binary -0.3236          .  -0.0216     Balanced, <0.1           .
#> nodegree      Binary  0.1114          .   0.0703     Balanced, <0.1           .
#> re74         Contin. -0.7211     0.5181  -0.0505     Balanced, <0.1      1.3289
#> re75         Contin. -0.2903     0.9563  -0.0257     Balanced, <0.1      1.4956
#>                  V.Threshold
#> distance        Balanced, <2
#> age         Not Balanced, >2
#> educ            Balanced, <2
#> race_black                  
#> race_hispan                 
#> race_white                  
#> married                     
#> nodegree                    
#> re74            Balanced, <2
#> re75            Balanced, <2
#> 
#> Balance tally for mean differences
#>                    count
#> Balanced, <0.1         5
#> Not Balanced, >0.1     4
#> 
#> Variable with the greatest mean difference
#>    Variable Diff.Adj        M.Threshold
#>  race_black    0.373 Not Balanced, >0.1
#> 
#> Balance tally for variance ratios
#>                  count
#> Balanced, <2         4
#> Not Balanced, >2     1
#> 
#> Variable with the greatest variance ratio
#>  Variable V.Ratio.Adj      V.Threshold
#>       age      0.4568 Not Balanced, >2
#> 
#> Sample sizes
#>           Control Treated
#> All           429     185
#> Matched       185     185
#> Unmatched     244       0

## Subclassification
m.out2 <- matchit(treat ~ age + educ + race + 
                  married + nodegree + re74 + re75, 
                  data = lalonde, method = "subclass")
                  
bal.tab(m.out2, disp.subclass = TRUE)
#> Call
#>  matchit(formula = treat ~ age + educ + race + married + nodegree + 
#>     re74 + re75, data = lalonde, method = "subclass")
#> 
#> Balance by subclass
#>  - - - Subclass 1 - - - 
#>                 Type Diff.Adj
#> distance    Distance   0.2785
#> age          Contin.  -0.4024
#> educ         Contin.   0.1142
#> race_black    Binary   0.0823
#> race_hispan   Binary   0.1492
#> race_white    Binary  -0.2315
#> married       Binary  -0.2877
#> nodegree      Binary  -0.0003
#> re74         Contin.  -0.5864
#> re75         Contin.  -0.1729
#> 
#>  - - - Subclass 2 - - - 
#>                 Type Diff.Adj
#> distance    Distance   0.1873
#> age          Contin.  -0.7473
#> educ         Contin.   0.1183
#> race_black    Binary   0.0094
#> race_hispan   Binary  -0.0094
#> race_white    Binary   0.0000
#> married       Binary  -0.2473
#> nodegree      Binary  -0.0121
#> re74         Contin.  -0.0352
#> re75         Contin.  -0.0970
#> 
#>  - - - Subclass 3 - - - 
#>                 Type Diff.Adj
#> distance    Distance  -0.0140
#> age          Contin.   0.0524
#> educ         Contin.   0.1372
#> race_black    Binary   0.0000
#> race_hispan   Binary   0.0000
#> race_white    Binary   0.0000
#> married       Binary   0.3550
#> nodegree      Binary   0.2191
#> re74         Contin.  -0.2669
#> re75         Contin.  -0.0970
#> 
#>  - - - Subclass 4 - - - 
#>                 Type Diff.Adj
#> distance    Distance  -0.0003
#> age          Contin.  -0.0499
#> educ         Contin.  -0.1436
#> race_black    Binary   0.0000
#> race_hispan   Binary   0.0000
#> race_white    Binary   0.0000
#> married       Binary  -0.1116
#> nodegree      Binary  -0.0417
#> re74         Contin.  -0.0073
#> re75         Contin.  -0.0801
#> 
#>  - - - Subclass 5 - - - 
#>                 Type Diff.Adj
#> distance    Distance  -0.0224
#> age          Contin.   0.2640
#> educ         Contin.  -0.2977
#> race_black    Binary   0.0000
#> race_hispan   Binary   0.0000
#> race_white    Binary   0.0000
#> married       Binary   0.0000
#> nodegree      Binary   0.0376
#> re74         Contin.   0.0190
#> re75         Contin.   0.1233
#> 
#>  - - - Subclass 6 - - - 
#>                 Type Diff.Adj
#> distance    Distance   0.0143
#> age          Contin.   0.5245
#> educ         Contin.   0.2781
#> race_black    Binary   0.0000
#> race_hispan   Binary   0.0000
#> race_white    Binary   0.0000
#> married       Binary   0.0000
#> nodegree      Binary  -0.1290
#> re74         Contin.  -0.0152
#> re75         Contin.  -0.2407
#>