The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Contrasts and comparisons for generalized linear models

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")
#> Estimated Marginal Means
#> 
#> x1 |  Probability (CI)
#> ----------------------
#> 1  | 0.21 (0.11, 0.36)
#> 2  | 0.14 (0.05, 0.34)
#> 3  | 0.31 (0.16, 0.51)
#> 
#> Variable predicted: outcome
#> Predictors modulated: x1
#> Predictors averaged: x2 (10), x3
#> Predictions are on the response-scale.

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")
#> Marginal Contrasts Analysis
#> 
#> Level1 | Level2 |     Difference (CI) |     p
#> ---------------------------------------------
#> 2      | 1      | -0.07 (-0.25, 0.10) | 0.417
#> 3      | 1      |  0.09 (-0.11, 0.30) | 0.357
#> 3      | 2      |  0.17 (-0.05, 0.38) | 0.130
#> 
#> Variable predicted: outcome
#> Predictors contrasted: x1
#> Predictors averaged: x2 (10), x3
#> p-values are uncorrected.
#> Contrasts are on the response-scale.

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")
#> Marginal Contrasts Analysis
#> 
#> Level1 | Level2 |     Difference (CI) |     p
#> ---------------------------------------------
#> 2      | 1      | -0.51 (-1.80, 0.79) | 0.443
#> 3      | 1      |  0.50 (-0.54, 1.55) | 0.345
#> 3      | 2      |  1.01 (-0.36, 2.38) | 0.147
#> 
#> Variable predicted: outcome
#> Predictors contrasted: x1
#> Predictors averaged: x2 (10), x3
#> p-values are uncorrected.
#> Contrasts are on the link-scale.

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)
#> Marginal Contrasts Analysis
#> 
#> Level1 | Level2 |    Difference (CI) |     p
#> --------------------------------------------
#> 2      | 1      | 0.60 (0.16,  2.20) | 0.443
#> 3      | 1      | 1.65 (0.58,  4.71) | 0.345
#> 3      | 2      | 2.75 (0.70, 10.78) | 0.147
#> 
#> Variable predicted: outcome
#> Predictors contrasted: x1
#> Predictors averaged: x2 (10), x3
#> p-values are uncorrected.
#> Contrasts are on the link-scale.

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.