I'm following Agresti's book. Specifically, chapter 6 which deals with multinomial models. In that he shows how a nominal response can be modeled by a baseline category GLM, and shows it can be viewed as a vector/multi-variate GLM (6.1.1 and 6.1.2), by putting it EDM (exponential dispersion family) form.

He then moves to talk about ordinal models, and states that they model the cumulative probabilities, e.g. by $$\text{logit} P(y_i \le j) = \alpha_j + x_i\beta$$

That's great, but technically GLM's uses the EDF form, and the link functions link the mean of the distributions to the linear predictor. Not some cumulative distribution quantity. The EDM form is not shown for the ordinal models. So, are ordinal models actually a GLM, or are they a likelihood maximum model that get bundled together with other GLMs?


1 Answer 1


The ordinal model that you state is called the proportional odds ordinal logistic regression model (POLR), and was popularized by Peter McCullagh (McCullagh 1980). Yes, it is a generalized linear model (GLM), but it is a multivariate rather than a univariate GLM.

The EDM in this case is the multivariate multinomial distribution. The vector of cumulative probabilities $P(y_i \le j)$ for the ordinal response can be written as a linear transformation of the mean of the multinomial distribution, and hence the proportional odds logistic model can be written as a multivariate link-linear equation in terms of the multinomial mean.

The full GLM framework for the POLR model was written out explicitly in my 1991 paper on EDMs. I've never seen it written out explicitly anywhere else. It is a multivariate GLM for which the mean parameter is a vector and the variance function produces matrix values, equal to the multinomial covariance matrix.

Despite the theoretical link with GLMs, POLR does need specialized software to carry out the analysis. Standard code like glm() in R is only for univariate GLMs. The polr() function comes with the MASS package as part of most R installations and there several other software packages on CRAN than can handle ordinal models.


McCullagh, P. (1980). Regression models for ordinal data. Journal of the Royal Statistical Society: Series B (Methodological), 42, 109-127.

Smyth, G.K. (1991). Exponential dispersion models and the Gauss-Newton algorithm. Australian Journal of Statistics 33, 57–64. https://gksmyth.github.io/pubs/edm-gna.pdf

  • $\begingroup$ The proportional odds model was invented by Walker and Duncan in 1967 in a Biometrika paper. The log-likelihood function, involving differences in probabilities, is very different from a GLM so I hesitate to call proportional odds a regular GLM member. $\endgroup$ Commented Apr 2 at 12:23
  • $\begingroup$ @FrankHarrell The POLR log-likelihood function has exactly the same form as for any exponential dispersion model, but, as a multivariate model, the variance function is block diagonal instead of diagonal. The differences in probabilities that I think you are worried about are part of the multivariate link function. I suspect you're expecting a univariate link function but it operates on a m-vector mu where m is the number of ordinal categories. The standard GLM reweighted least squares algorithm is theoretically applicable but not computationally efficient for POLR so isn't used. $\endgroup$ Commented Apr 15 at 4:56
  • $\begingroup$ Since the cell probabilities are functions of Y ordinal models require calculations that are not part of standard GLM calculations. $\endgroup$ Commented Apr 16 at 12:32
  • 1
    $\begingroup$ It's a minor point, and the difference in likelihood formation (as is also the case with the Cox proportional hazards model) is in line with the R glm function not implementing ordinal models. $\endgroup$ Commented Apr 17 at 14:11
  • 1
    $\begingroup$ @FrankHarrell Yes, that's very true, the R glm() function is only for univariate GLMs and it doesn't fit ordinal models. That is worth pointing out and I'll edit my answer. Just as an aside, I published a MATLAB function myself for POLR (statsci.org/matlab/ordinal.html) and the coding is quite different to glm(). That was many years ago, before R existed, and I don't recommend my function to anyone now. $\endgroup$ Commented Apr 17 at 22:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.