propodds: Proportional Odds Model for Ordinal Regression

View source: R/family.categorical.R

propoddsR Documentation

Proportional Odds Model for Ordinal Regression


Fits the proportional odds model to a (preferably ordered) factor response.


propodds(reverse = TRUE, whitespace = FALSE)


reverse, whitespace

Logical. Fed into arguments of the same name in cumulative.


The proportional odds model is a special case from the class of cumulative link models. It involves a logit link applied to cumulative probabilities and a strong parallelism assumption. A parallelism assumption means there is less chance of numerical problems because the fitted probabilities will remain between 0 and 1; however the parallelism assumption ought to be checked, e.g., via a likelihood ratio test. This VGAM family function is merely a shortcut for cumulative(reverse = reverse, link = "logit", parallel = TRUE). Please see cumulative for more details on this model.


An object of class "vglmff" (see vglmff-class). The object is used by modelling functions such as vglm, and vgam.


No check is made to verify that the response is ordinal if the response is a matrix; see ordered.


Thomas W. Yee


See cumulative.

See Also

cumulative, R2latvar.


# Fit the proportional odds model, McCullagh and Nelder (1989,p.179)
pneumo <- transform(pneumo, let = log(exposure.time))
(fit <- vglm(cbind(normal, mild, severe) ~ let, propodds, pneumo))
depvar(fit)  # Sample proportions
weights(fit, type = "prior")  # Number of observations
coef(fit, matrix = TRUE)
constraints(fit)  # Constraint matrices

# Check that the model is linear in let ----------------------
fit2 <- vgam(cbind(normal, mild, severe) ~ s(let, df = 2), propodds,
## Not run:  plot(fit2, se = TRUE, lcol = 2, scol = 2) 

# Check the proportional odds assumption with a LRT ----------
(fit3 <- vglm(cbind(normal, mild, severe) ~ let,
              cumulative(parallel = FALSE, reverse = TRUE), pneumo))
pchisq(deviance(fit) - deviance(fit3),
       df = df.residual(fit) - df.residual(fit3), lower.tail = FALSE)
lrtest(fit3, fit)  # Easier

VGAM documentation built on July 6, 2022, 5:05 p.m.