Contrasts and comparisons for generalized linear models"

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  dev = "png",
  fig.width = 7,
  fig.height = 3.5,
  message = FALSE, warning = FALSE
)
options(width = 800)
arrow_color <- "#FF00cc"
p <- ht8 <- NULL

pkgs <- c("ggplot2", "see", "marginaleffects")

if (!all(vapply(pkgs, requireNamespace, quietly = TRUE, FUN.VALUE = logical(1L)))) {
  knitr::opts_chunk$set(eval = FALSE)
}

This vignette is the third in a 4-part series:

  1. Contrasts and Pairwise Comparisons

  2. Comparisons of Slopes, Floodlight and Spotlight Analysis (Johnson-Neyman Intervals)

  3. Contrasts and Comparisons for Generalized Linear Models

  4. Contrasts and Comparisons for Zero-Inflation Models

Contrasts and comparisons for GLM - logistic regression example

We will now show an example for non-Gaussian models. For GLM's (generalized linear models) with (non-Gaussian) link-functions, estimate_means() by default returns predicted values on the response scale. For example, predicted values for logistic regression models are shown as probabilities.

Let's look at a simple example.

library(modelbased)
set.seed(1234)
dat <- data.frame(
  outcome = rbinom(n = 100, size = 1, prob = 0.35),
  x1 = as.factor(sample(1:3, size = 100, TRUE, prob = c(0.5, 0.2, 0.3))),
  x2 = rnorm(n = 100, mean = 10, sd = 7),
  x3 = as.factor(sample(1:4, size = 100, TRUE, prob = c(0.1, 0.4, 0.2, 0.3)))
)

m <- glm(outcome ~ x1 + x2 + x3, data = dat, family = binomial())
estimate_means(m, "x1")

Contrasts and comparisons for categorical focal terms

Contrasts or comparisons - like predictions (see above) - are by default on the response scale, i.e. they're represented as difference between probabilities (in percentage points).

estimate_contrasts(m, "x1")
p <- estimate_means(m, "x1")
ht8 <- estimate_contrasts(m, "x1")

The difference between the predicted probability of x1 = 1 (21.2%) and x1 = 2 (13.9%) is roughly 7.3 percentage points. This difference is not statistically significant (p = 0.417).

Contrasts or comparisons can also be represented on the link-scale, in this case as log-odds. To do so, use predict = "link".

estimate_contrasts(m, "x1", predict = "link")

The transform argument in estimate_contrasts() can be used transform comparisons. For example, to transform contrasts to odds ratios, we can use transform = exp in combination with predict = "link".

estimate_contrasts(m, "x1", predict = "link", transform = exp)

Go to next vignette: Contrasts and Comparisons for Zero-Inflation Models



Try the modelbased package in your browser

Any scripts or data that you put into this service are public.

modelbased documentation built on April 12, 2025, 2:22 a.m.