Weight concentration curve

Lorenz curve of weights, cumulative weight plot

MAIC
The cumulative share of total weight against the cumulative share of participants, showing how few patients carry the weighted analysis.
MAICAdapted

Weight concentration curve example

Lorenz curves of MAIC weights for two weighting models on the same simulated IPD: matching four means (ESS 190) and matching seven moments including the SD of age (ESS 122). Data: maicplus::centered_ipd_sat.
Family
Weighting, balance, and overlap
Purpose
Show concentration of weight more clearly than a histogram.
Inputs
MAIC weights.
Software
Custom ggplot2 (shown); any plotting tool

What it shows

Sort participants by weight and plot the cumulative share of participants against the cumulative share of weight: this is the Lorenz curve familiar from income inequality. Equal weights give the diagonal. The further the curve bows away, the more the analysis rests on a few heavily weighted participants. It complements the weight histogram, in which a handful of extreme weights can be visually lost.

How to read it

  • Horizontal axis: cumulative share of participants, sorted from smallest to largest weight.
  • Vertical axis: cumulative share of total weight.
  • Dashed diagonal: equal weights.
  • Area between curve and diagonal: related to the Gini coefficient of the weights.

Interpretation

Matching seven moments, the top 10% of participants carry 52% of the total weight and the top 25% carry 81%, while half the sample contributes almost nothing. Matching only four means is less extreme (top 25% carry 70%). The additional moments buy closer matching of the age distribution at a large cost in effective information.

Pitfalls

  • Like the ESS, the curve measures information loss, not bias.
  • Rescaling weights does not change the curve.
  • Compare curves only across models fitted to the same IPD.

Code

library(maicplus)
library(ggplot2)

data(centered_ipd_sat)
all <- grep("_CENTERED$", names(centered_ipd_sat), value = TRUE)
means_only <- c("AGE_CENTERED", "SEX_MALE_CENTERED", "ECOG0_CENTERED", "SMOKE_CENTERED")

# Two weighting models: matching means only, or also matching the age SD
w1 <- estimate_weights(centered_ipd_sat, centered_colnames = means_only)$data$weights
w2 <- estimate_weights(centered_ipd_sat, centered_colnames = all)$data$weights

lorenz <- function(w, label) {
  w <- sort(w)
  data.frame(people = c(0, seq_along(w) / length(w)), weight = c(0, cumsum(w) / sum(w)),
             model = sprintf("%s (ESS = %.0f)", label, sum(w)^2 / sum(w^2)))
}
d <- rbind(lorenz(w1, "Means of 4 covariates"), lorenz(w2, "Means and age SD, 7 moments"))

ggplot(d, aes(people, weight, colour = model)) +
  geom_abline(colour = "#7a828c", linetype = "dashed") +
  geom_line(linewidth = 1.1) +
  scale_colour_manual(values = c("#1d4e89", "#b5452b"), name = NULL) +
  scale_x_continuous(labels = scales::percent) +
  scale_y_continuous(labels = scales::percent) +
  coord_equal() +
  labs(x = "Cumulative share of participants (sorted by weight)",
       y = "Cumulative share of total weight",
       title = "Weight concentration (Lorenz) curves",
       subtitle = "Dashed line: equal weights. Bowing away from it means a few patients carry the analysis") +
  guides(colour = guide_legend(ncol = 1))

References

  • Phillippo DM, Ades AE, Dias S, Palmer S, Abrams KR, Welton NJ. NICE DSU Technical Support Document 18: Methods for population-adjusted indirect comparisons in submissions to NICE. 2016. sheffield.ac.uk/nice-dsu
  • Remiro-Azócar A, Heath A, Baio G. Methods for population adjustment with limited access to individual patient data: a review and simulation study. Res Synth Methods. 2021;12:750-775. doi:10.1002/jrsm.1511