Class 15 · Ordinal Regression

STAT 517: Advanced Statistical Models · Fall 2026

Published

October 8, 2026

This interactive companion follows Chapter 11 and the reviewed class15_ordinal_regression.R. The graduate-school example fits a cumulative link model to an ordered response with three levels; the coal-miner example fits a continuation-ratio model to a hierarchical response.

Press Run Code on each box in order. Later boxes reuse earlier objects, and you can edit a box and run it again. Both data files are included and the packages load in your browser; the first run takes longer while ordinal and VGAM load. Questions 11.1–11.3 match the handout; Question 11.1 is the in-class lab, whose group assignments and submission template are posted where the instructor hosts the lab threads.

Goals

  • Define cumulative probabilities for an ordered response and see why they are nested.
  • Specify a cumulative link model with \(K-1\) thresholds and one shared slope vector.
  • Read clm() output: thresholds versus slopes, and the direction of a positive coefficient.
  • Interpret an adjusted odds ratio as the odds of a higher category.
  • Recover class probabilities from cumulative probabilities, and compare links by AIC.
  • Fit a continuation-ratio model and recover class probabilities from the continuation ratios.

Start here

Run this box once. ordinal fits the cumulative link models of Part 1; Part 2 loads VGAM for the continuation-ratio model.

Part 2 · Hierarchical responses and continuation ratios

7. Coal-miner data and the continuation-ratio model

The degree of pneumoconiosis (black lung disease) in 360 coal workers is recorded as normal, mild, or severe, against years of exposure. The response is hierarchical: mild and severe arise only among workers who developed the disease. The continuation ratios condition on reaching a split:

\[ P(y > 1 \mid y \ge 1) = P(\text{disease}), \qquad P(y > 2 \mid y \ge 2) = P(\text{severe} \mid \text{disease}). \]

VGAM::cratio fits one logit per split, each with its own intercept and, by default, its own exposure slope (suffixes :1 and :2). A positive slope again means higher odds of the higher outcome at that split.

All 98 workers with 6 years of exposure were normal; of those with 46 years, 12 were normal, 6 mild, and 10 severe. The row Exposure:1 concerns developing the disease at all; Exposure:2 concerns severe rather than mild disease given disease. A Hauck-Donner effect message for (Intercept):1 is expected and does not change the estimates.

TipQuestion 11.3: Exposure and black lung disease
  1. Interpret the odds ratios for Exposure:1 and Exposure:2, stating the conditional event each one concerns, and use their 95% intervals to say which associations are statistically significant.
  2. Patient 2 has 42 years of exposure. Calculate both fitted continuation ratios \(\widehat q_1\) and \(\widehat q_2\) from the coefficients, then recover the three class probabilities and check that they sum to one.
  3. Exposure:2 is not statistically significant. Does that mean exposure is unrelated to the probability of severe disease? Use \(P(\text{severe}) = q_1 q_2\) in your answer.

8. Predictions for new patients

type = "response" recovers the three class probabilities from the two fitted continuation ratios: \(p_{\rm normal} = 1 - q_1\), \(p_{\rm mild} = q_1(1 - q_2)\), and \(p_{\rm severe} = q_1 q_2\).

Complete Question 11.3, part 2, by hand first, then add a predict() line to the box below to check your numbers.

The fitted class probabilities over the observed range of exposure:

As exposure increases, P(normal) falls from near 1 at 6 years to about 0.4 at 46 years, while the mild and severe probabilities both rise and stay close to each other until about 40 years. Exposure separates disease from no disease but does little to separate severe from mild disease among those who have it.

Optional · Check the parallel-slopes assumption

The proportional-odds model gives each predictor the same coefficient at every cumulative split. nominal_test() relaxes that for one predictor at a time and reports a likelihood-ratio test of the relaxation; nominal = ~ private fits the partial proportional-odds model for the predictor you choose.

Small differences across thresholds rarely justify the extra parameters, but severe non-parallelism makes one common odds ratio misleading.

Optional · A continuation-ratio model is two logistic regressions

Because each continuation ratio conditions on reaching its split, the continuation-ratio logit model with separate slopes is the same as fitting an ordinary binary logistic regression at each split on the workers who reached it. Compare the estimates with cratio.mod.

vglm(..., cratio(parallel = TRUE)) would force one common exposure slope across both splits, which the two separate glm() fits cannot do.

Check your understanding

  • Declare the response ordered and, separately, choose each predictor’s reference level.
  • Count the parameters: \(K-1\) thresholds plus one slope vector, not one vector per logit.
  • State which event’s odds an odds ratio describes: a higher category rather than a lower one.
  • Recover class probabilities by differencing cumulative probabilities, or by multiplying continuation ratios.
  • Read Exposure:1 and Exposure:2 as different conditional events before interpreting either.