Produce a set of useful diagnostic metrics to summarize propensity weights

wt_diagnostics(data, wt_col = "wt", wt_rs = "wt_rs", vars)

Arguments

data

A data frame containing individual patient data from the intervention study, including a column containing the weights (derived using estimate_weights).

wt_col

The name of the weights column in the data frame containing the intervention individual patient data and the MAIC propensity weights. The default is wt.

wt_rs

The name of the rescaled weights column in the data frame containing the intervention individual patient data and the MAIC propensity weights. The default is wt_rs.

vars

A character vector giving the variable names of the baseline characteristics (not centered). These names must match the column names in the data.

Value

List of the following:

  • The effective sample size (ESS) as a numeric value.

  • A data frame that includes a summary (minimum, maximum, median, mean, standard deviation) of the weights and rescaled weights.

  • A data frame that includes a summary of patient characteristics associated with each weight value.

Examples


# This example code uses the weighted individual patient data, outputted from
# the estimate_weights function to perform weight diagnostics. The weighted data
# is saved within est_weights. To check the weighted aggregate baseline
# characteristics for 'intervention' match those in the comparator data,
# standardized data "target_pop_standard" is used. Please see the package
# vignette for more information on how to use the estimate_weights function and
# derive the "target_pop_standard" data.

library(dplyr)
library(MAIC)

# load est_weights
data(est_weights, package = "MAIC")

# load target_pop_standard
data(target_pop_standard, package = "MAIC")

# List out the uncentered variables used in the matching
match_cov <- c("AGE",
               "SEX",
               "SMOKE",
               "ECOG0")

# Are the weights sensible? ----------------------------------------------------

# The wt_diagnostics function requires the output from the estimate_weights
# function and will output:
# - the effective sample size (ESS)
# - a summary of the weights and rescaled weights (mean, standard deviation,
#   median, minimum and maximum)
# - a unique set of weights with the corresponding patient profile based on the
#   matching variables

diagnostics <- wt_diagnostics(est_weights$analysis_data,
                              vars = match_cov)

diagnostics$ESS
#> [1] 157.0715
diagnostics$Summary_of_weights
#>               type      mean       sd     median          min      max
#> 1          Weights 0.3763805 0.556692 0.03467630 1.855194e-11 2.373310
#> 2 Rescaled weights 1.0000000 1.479067 0.09213098 4.929037e-11 6.305614
diagnostics$Weight_profiles
#>     AGE SEX SMOKE ECOG0           wt        wt_rs
#> 1    45   1     0     0 1.301506e+00 3.457953e+00
#> 2    71   1     0     0 7.024764e-08 1.866400e-07
#> 3    58   1     1     1 6.384284e-02 1.696231e-01
#> 4    48   0     0     1 1.204094e+00 3.199141e+00
#> 5    69   1     0     1 1.371621e-06 3.644239e-06
#> 6    47   1     1     0 1.010290e+00 2.684226e+00
#> 7    61   1     1     0 7.016834e-03 1.864293e-02
#> 8    54   0     1     1 2.610269e-01 6.935186e-01
#> 9    56   0     1     0 1.165019e-01 3.095323e-01
#> 10   63   0     0     0 1.212450e-03 3.221341e-03
#> 11   50   0     0     0 1.277640e+00 3.394543e+00
#> 12   57   1     0     1 2.355647e-01 6.258685e-01
#> 13   62   0     1     1 1.515077e-03 4.025386e-03
#> 14   57   0     0     1 1.307047e-01 3.472675e-01
#> 15   66   1     0     0 7.757577e-05 2.061100e-04
#> 16   75   1     1     1 3.343552e-11 8.883437e-11
#> 17   47   0     0     0 1.126587e+00 2.993213e+00
#> 18   57   1     0     0 2.470419e-01 6.563622e-01
#> 19   54   1     0     0 9.915215e-01 2.634359e+00
#> 20   55   1     1     0 3.336792e-01 8.865476e-01
#> 21   64   1     0     1 7.360573e-04 1.955620e-03
#> 22   53   0     1     0 3.765647e-01 1.000489e+00
#> 23   47   1     0     0 2.030410e+00 5.394567e+00
#> 24   60   0     1     0 8.875806e-03 2.358200e-02
#> 25   49   0     0     1 1.255669e+00 3.336168e+00
#> 26   55   0     0     0 3.720898e-01 9.886001e-01
#> 27   66   0     0     1 4.104372e-05 1.090485e-04
#> 28   58   1     0     1 1.283068e-01 3.408965e-01
#> 29   49   1     0     1 2.263049e+00 6.012663e+00
#> 30   61   1     0     0 1.410194e-02 3.746723e-02
#> 31   66   1     1     0 3.860012e-05 1.025561e-04
#> 32   59   0     1     1 1.795110e-02 4.769403e-02
#> 33   74   0     1     0 1.218200e-10 3.236619e-10
#> 34   73   0     0     0 1.426210e-09 3.789276e-09
#> 35   74   1     0     1 4.207407e-10 1.117860e-09
#> 36   58   0     1     1 3.542365e-02 9.411659e-02
#> 37   61   0     0     1 7.461039e-03 1.982313e-02
#> 38   47   0     1     1 5.345235e-01 1.420168e+00
#> 39   73   0     1     1 6.766831e-10 1.797870e-09
#> 40   68   1     0     0 5.841352e-06 1.551981e-05
#> 41   49   0     0     0 1.316848e+00 3.498714e+00
#> 42   71   0     0     0 3.897740e-08 1.035585e-07
#> 43   70   1     0     1 3.142487e-07 8.349228e-07
#> 44   62   0     1     0 1.588895e-03 4.221512e-03
#> 45   49   1     0     0 2.373310e+00 6.305614e+00
#> 46   74   0     0     0 2.448252e-10 6.504727e-10
#> 47   46   0     0     1 8.916746e-01 2.369078e+00
#> 48   68   0     1     0 1.612713e-06 4.284793e-06
#> 49   46   1     1     0 8.385873e-01 2.228031e+00
#> 50   75   0     1     1 1.855194e-11 4.929037e-11
#> 51   56   1     0     1 4.023732e-01 1.069060e+00
#> 52   72   0     0     0 7.729812e-09 2.053723e-08
#> 53   57   1     1     1 1.172122e-01 3.114193e-01
#> 54   46   1     0     0 1.685333e+00 4.477738e+00
#> 55   56   0     1     1 1.110894e-01 2.951518e-01
#> 56   73   1     0     1 2.450991e-09 6.512004e-09
#> 57   60   0     1     1 8.463447e-03 2.248641e-02
#> 58   75   1     0     0 7.047030e-11 1.872316e-10
#> 59   69   0     1     1 3.786845e-07 1.006122e-06
#> 60   47   0     0     1 1.074247e+00 2.854152e+00
#> 61   74   1     0     0 4.412402e-10 1.172325e-09
#> 62   71   0     0     1 3.716656e-08 9.874729e-08
#> 63   49   0     1     1 6.247950e-01 1.660009e+00
#> 64   45   0     0     0 7.221499e-01 1.918670e+00
#> 65   68   0     0     0 3.241115e-06 8.611273e-06
#> 66   60   1     0     0 3.214876e-02 8.541558e-02
#> 67   45   0     1     0 3.593270e-01 9.546908e-01
#> 68   57   0     0     0 1.370730e-01 3.641872e-01
#> 69   50   0     0     1 1.218282e+00 3.236837e+00
#> 70   63   1     0     1 2.083637e-03 5.535987e-03
#> 71   68   0     0     1 3.090537e-06 8.211204e-06
#> 72   51   1     0     0 2.078541e+00 5.522446e+00
#> 73   52   0     1     0 4.819386e-01 1.280456e+00
#> 74   69   1     1     1 6.824903e-07 1.813299e-06
#> 75   70   0     0     1 1.743631e-07 4.632628e-07
#> 76   72   1     0     0 1.393118e-08 3.701355e-08
#> 77   51   1     1     0 1.034239e+00 2.747856e+00
#> 78   69   0     0     1 7.610533e-07 2.022032e-06
#> 79   73   0     1     0 7.096527e-10 1.885466e-09
#> 80   62   0     0     1 3.044894e-03 8.089934e-03
#> 81   67   1     1     0 1.098128e-05 2.917601e-05
#> 82   54   0     1     0 2.737447e-01 7.273085e-01
#> 83   52   0     1     1 4.595483e-01 1.220967e+00
#> 84   57   0     1     1 6.503599e-02 1.727932e-01
#> 85   67   0     1     1 5.809967e-06 1.543642e-05
#> 86   74   0     1     1 1.161604e-10 3.086249e-10
#> 87   72   0     1     0 3.846196e-09 1.021890e-08
#> 88   69   0     1     0 3.971349e-07 1.055142e-06
#> 89   55   1     0     0 6.706048e-01 1.781720e+00
#> 90   53   1     0     0 1.363942e+00 3.623839e+00
#> 91   69   1     0     0 1.438449e-06 3.821795e-06
#> 92   68   1     0     1 5.569970e-06 1.479877e-05
#> 93   58   1     0     0 1.345582e-01 3.575058e-01
#> 94   64   0     0     0 4.283051e-04 1.137958e-03
#> 95   64   0     1     0 2.131159e-04 5.662245e-04
#> 96   64   1     1     0 3.840915e-04 1.020487e-03
#> 97   55   1     0     1 6.394493e-01 1.698944e+00
#> 98   50   1     0     1 2.195669e+00 5.833641e+00
#> 99   59   0     0     0 3.783460e-02 1.005222e-01
#> 100  71   0     1     0 1.939435e-08 5.152859e-08
#> 101  56   0     0     1 2.232596e-01 5.931752e-01
#> 102  51   1     0     1 1.981974e+00 5.265879e+00
#> 103  65   1     0     1 2.419131e-04 6.427356e-04
#> 104  45   1     1     1 6.175160e-01 1.640669e+00
#> 105  71   0     1     1 1.849332e-08 4.913463e-08
#> 106  65   1     0     0 2.536997e-04 6.740512e-04
#> 107  67   0     0     0 1.224536e-05 3.253453e-05
#> 108  48   0     0     0 1.262761e+00 3.355011e+00
#> 109  53   1     1     1 6.471395e-01 1.719376e+00
#> 110  70   0     1     1 8.675950e-08 2.305101e-07
#> 111  54   0     0     0 5.501527e-01 1.461693e+00
#> 112  58   0     0     0 7.466057e-02 1.983646e-01
#> 113  59   0     0     1 3.607685e-02 9.585207e-02
#> 114  75   0     0     1 3.728436e-11 9.906029e-11
#> 115  48   1     1     0 1.132407e+00 3.008675e+00
#> 116  63   0     0     1 1.156121e-03 3.071681e-03
#> 117  53   0     0     0 7.567929e-01 2.010712e+00
#> 118  75   0     1     0 1.945583e-11 5.169192e-11
#> 119  45   0     1     1 3.426331e-01 9.103370e-01
#> 120  53   0     1     1 3.590699e-01 9.540078e-01
#> 121  52   0     0     1 9.235676e-01 2.453814e+00
#> 122  61   0     1     0 3.893340e-03 1.034416e-02
#> 123  70   1     0     0 3.295596e-07 8.756022e-07
#> 124  52   1     0     0 1.745614e+00 4.637896e+00
#> 125  55   0     1     0 1.851443e-01 4.919072e-01
#> 126  57   0     1     0 6.820470e-02 1.812121e-01
#> 127  49   0     1     0 6.552365e-01 1.740889e+00
#> 128  61   0     0     0 7.824558e-03 2.078896e-02
#> 129  51   0     0     0 1.153293e+00 3.064168e+00
#> 130  59   0     1     0 1.882572e-02 5.001779e-02
#> 131  59   1     1     1 3.235266e-02 8.595733e-02
#> 132  58   0     1     0 3.714957e-02 9.870217e-02
#> 133  67   1     0     0 2.206940e-05 5.863588e-05
#> 134  51   0     1     0 5.738550e-01 1.524667e+00
#> 135  68   1     1     1 2.771503e-06 7.363567e-06
#> 136  61   1     0     1 1.344678e-02 3.572655e-02
#> 137  52   1     1     0 8.685815e-01 2.307722e+00
#> 138  51   1     1     1 9.861898e-01 2.620194e+00
#> 139  60   0     0     0 1.783797e-02 4.739344e-02
#> 140  71   1     0     1 6.698402e-08 1.779689e-07
#> 141  56   0     0     0 2.341373e-01 6.220761e-01
#> 142  74   1     1     0 2.195521e-10 5.833248e-10
#> 143  66   0     0     0 4.304346e-05 1.143616e-04
#> 144  70   0     1     0 9.098662e-08 2.417411e-07
#> 145  47   0     1     0 5.605667e-01 1.489362e+00
#> 146  54   0     0     1 5.245933e-01 1.393784e+00
#> 147  65   0     0     1 1.342272e-04 3.566264e-04
#> 148  47   1     0     1 1.936079e+00 5.143942e+00
#> 149  50   1     0     0 2.302647e+00 6.117870e+00
#> 150  67   0     1     0 6.093042e-06 1.618852e-05
#> 151  72   1     1     0 6.931869e-09 1.841718e-08
#> 152  45   0     0     1 6.885997e-01 1.829531e+00
#> 153  60   0     0     1 1.700924e-02 4.519160e-02
#> 154  58   0     0     1 7.119193e-02 1.891488e-01
#> 155  69   1     1     0 7.157428e-07 1.901647e-06
#> 156  66   0     1     1 2.042251e-05 5.426029e-05
#> 157  73   1     0     0 2.570409e-09 6.829284e-09
#> 158  55   0     1     1 1.765427e-01 4.690538e-01
#> 159  66   1     0     1 7.397170e-05 1.965344e-04
#> 160  63   1     0     0 2.185157e-03 5.805713e-03
#> 161  53   1     0     1 1.300575e+00 3.455479e+00
#> 162  59   1     0     0 6.818802e-02 1.811678e-01
#> 163  75   0     0     0 3.910094e-11 1.038867e-10
#> 164  54   1     0     1 9.454567e-01 2.511970e+00
#> 165  62   0     0     0 3.193248e-03 8.484095e-03
#> 166  54   1     1     0 4.933608e-01 1.310803e+00
#> 167  55   0     0     1 3.548030e-01 9.426710e-01
#> 168  69   0     0     0 7.981336e-07 2.120550e-06
#> 169  48   0     1     1 5.991327e-01 1.591827e+00
#> 170  74   0     0     1 2.334509e-10 6.202525e-10
#> 171  62   1     0     0 5.755082e-03 1.529060e-02
#> 172  52   0     0     0 9.685659e-01 2.573369e+00
#> 173  51   0     1     1 5.471944e-01 1.453833e+00
#> 174  56   1     0     0 4.219777e-01 1.121147e+00
#> 175  57   1     1     0 1.229230e-01 3.265924e-01
#> 176  65   0     0     0 1.407671e-04 3.740020e-04
#> 177  67   0     0     1 1.167646e-05 3.102302e-05
#> 178  53   0     0     1 7.216332e-01 1.917297e+00
#> 179  46   0     0     0 9.351191e-01 2.484505e+00
#> 180  65   0     1     1 6.678871e-05 1.774500e-04
#> 181  72   0     1     1 3.667507e-09 9.744146e-09
#> 182  60   1     1     1 1.525338e-02 4.052650e-02
#> 183  59   1     0     1 6.502008e-02 1.727509e-01
#> 184  46   0     1     0 4.652961e-01 1.236239e+00
#> 185  70   1     1     1 1.563637e-07 4.154405e-07
#> 186  50   0     1     1 6.061923e-01 1.610584e+00
#> 187  68   0     1     1 1.537788e-06 4.085727e-06
#> 188  48   1     0     0 2.275831e+00 6.046622e+00
#> 189  75   1     1     0 3.506458e-11 9.316259e-11
#> 190  50   0     1     0 6.357274e-01 1.689055e+00
#> 191  75   1     0     1 6.719634e-11 1.785330e-10
#> 192  59   1     1     0 3.392896e-02 9.014537e-02
#> 193  48   0     1     0 6.283238e-01 1.669385e+00
#> 194  62   1     0     1 5.487708e-03 1.458021e-02
#> 195  70   0     0     0 1.828585e-07 4.858340e-07
#> 196  56   1     1     0 2.099675e-01 5.578596e-01
#> 197  46   0     1     1 4.436790e-01 1.178804e+00
#> 198  67   1     1     1 1.047111e-05 2.782053e-05

# Each of the wt_diagnostics outputs can also be estimated individually
ESS <- estimate_ess(est_weights$analysis_data)
weight_summ <- summarize_wts(est_weights$analysis_data)
wts_profile <- profile_wts(est_weights$analysis_data, vars = match_cov)

# Plot histograms of unscaled and rescaled weights
# bin_width needs to be adapted depending on the sample size in the data set
histogram <- hist_wts(est_weights$analysis_data, bin = 50)
histogram



# Has the optimization worked? -------------------------------------------------

# The following code produces a summary table of the intervention baseline
# characteristics before and after matching compared with the comparator
# baseline characteristics:

# Create an object to hold the output
baseline_summary <- list('Intervention' = NA,
                         'Intervention_weighted' = NA,
                         'Comparator' = NA)

# Summarise matching variables for weighted intervention data
baseline_summary$Intervention_weighted <- est_weights$analysis_data %>%
  transmute(AGE, SEX, SMOKE, ECOG0, wt) %>%
  summarise_at(match_cov, list(~ weighted.mean(., wt)))

# Summarise matching variables for unweighted intervention data
baseline_summary$Intervention <- est_weights$analysis_data %>%
  transmute(AGE, SEX, SMOKE, ECOG0, wt) %>%
  summarise_at(match_cov, list(~ mean(.)))

# baseline data for the comparator study
baseline_summary$Comparator <- transmute(target_pop_standard,
                                         AGE,
                                         SEX,
                                         SMOKE,
                                         ECOG0)

# Combine the three summaries
# Takes a list of data frames and binds these together
trt <- names(baseline_summary)
baseline_summary <-  bind_rows(baseline_summary) %>%
  transmute_all(sprintf, fmt = "%.2f") %>% #apply rounding for presentation
  transmute(ARM = as.character(trt), AGE, SEX, SMOKE, ECOG0)

# Insert N of intervention  as number of patients
baseline_summary$`N/ESS`[baseline_summary$ARM == "Intervention"] <- nrow(est_weights$analysis_data)

# Insert N for comparator from target_pop_standard
baseline_summary$`N/ESS`[baseline_summary$ARM == "Comparator"] <- target_pop_standard$N

# Insert the ESS as the sample size for the weighted data
# This is calculated above but can also be obtained using the estimate_ess function as shown below
baseline_summary$`N/ESS`[baseline_summary$ARM == "Intervention_weighted"] <- est_weights$analysis_data %>%
  estimate_ess(wt_col = 'wt')

baseline_summary <- baseline_summary %>%
  transmute(ARM, `N/ESS`=round(`N/ESS`,1), AGE, SEX, SMOKE, ECOG0)