Skip to content

Statistics | Proportional-odds Logistic Regression

Posted on:February 27, 2025

Table of contents

1. Motivation

TBD. Here, we are using the proportional-odds model, which models cumulative probabilities. This model has many names:

2. Model Specification

2.1. Cumulative Logits

Suppose the outcome variable Y is an ordinal with ordered categories 1 to J:

Y{1,2,,J}Y \in \{1,2,\cdots,J\}

Model the logit (i.e. log odds) of the cumulative probabilities for J-1 categories:

logit[P(Yjx)]=log(P(Yjx)1P(Yjx)):=αj+βTxj=1,2,,J1\text{logit} [P(Y\le j|\mathbf{x})] = \log \bigg(\frac{P(Y\le j|\mathbf{x})}{1-P(Y \le j|\mathbf{x})}\bigg) := \alpha_j + \beta^T\mathbf{x}\\ j = 1,2,\cdots,J-1

2.2. Proportional Odds Assumption

For “each way to collapse Y into a binary outcome” (i.e., for each category), the log odds ratio equals to βTΔx\beta^T\Delta \mathbf{x} >>> i.e., the log odds ratio is proportional to the difference between x1 and x2 - And the proportionality coefficient is constant:

logit[P(Yjx1)]logit[P(Yjx2)]=βT(x1x2)LHS=log(odds(Yjx1)odds(Yjx2))\text{logit} [P(Y\le j|\mathbf{x}_1)]-\text{logit} [P(Y\le j|\mathbf{x}_2)]=\beta^T(\mathbf{x}_1-\mathbf{x}_2)\\ \text{LHS}=\log(\frac{odds(Y\le j|\mathbf{x}_1)}{odds(Y\le j|\mathbf{x}_2)})

2.3. Model Graph

Suppose there is only one predictor X, and J=4:

πj(x)=P(Y=jx)\pi_j(x) = P(Y=j|x)

3. Checking Model Fit

3.1. Compare to the “Unparalleled” Model

i.e., Test of Proportional Odds Assumption

H0:The proportional odds assumption holdsH_0: \text{The proportional odds assumption holds}
## Fit ordered logit model with parallel assumption
model.1 <- vglm(ses ~ science + socst + female,
                family = cumulative(parallel = TRUE, link = "logitlink"),
                data = df)

## Fit ordered logit model without parallel assumption
model.2 <- vglm(ses ~ science + socst + female,
                family = cumulative(parallel = FALSE, link = "logitlink"),
                data = df)

chi.stat <- 2*(logLik(model.2) - logLik(model.1))
df.delta <- df.residual(model.1) - df.residual(model.2)
print(chi.stat)
print(df.delta)
print(1 - pchisq(chi.stat, df.delta))

3.2. Compare to the Saturated Model

i.e., Test of Goodness-of-fit

H0:The model fits data wellH_0: \text{The model fits data well}
## Fit ordered logit model with parallel assumption
model.1 <- vglm(ses ~ science + socst + female,
                family = cumulative(parallel = TRUE, link = "logitlink"),
                data = df)

## Get deviance
devi <- deviance(model.1)
print(devi)

## Get df for null distribution (#params of saturated - #params of this model)
df.delta <- df.residual(model.1)
print(df.delta)

## Get p-value
print(1 - pchisq(devi, df.delta))

3.3. Compare to the Null Model

H0:The null model is good (all β = 0)H1:This model is good (at least one β != 0)H_0: \text{The null model is good (all β = 0)} \\ H_1: \text{This model is good (at least one β != 0)}
## Fit ordered logit model with parallel assumption
model.1 <- vglm(ses ~ science + socst + female,
                family = cumulative(parallel = TRUE, link = "logitlink"),
                data = df)

## Overall test
lrtest(model.1)

4. Interpretation of Coefficients

4.1. General Interpretation

Reformulate the model:

P(Yjx)=11+exp((αj+βx))P(Y\le j|x) = \frac{1}{1+\exp (-(\alpha_j + \beta x))}

4.2. An Example

VariableTypeValuesDescription
ses (DV)Ordinallow-1, medium-2 and high-3socio-economic status
science (IV)Ratio>0science test scores
socst (IV)Ratio>0social science test scores
female (IV)Nominalmale-0, female-1gender
df        <- read_sas("./data/hsb2.sas7bdat")
df$female <- factor(df$female, levels = c(0, 1))
df$ses    <- factor(df$ses, levels = c(3, 2, 1), ordered = TRUE)

model <- vglm(ses ~ science + socst + female,
              family = cumulative(parallel = TRUE, link = "logitlink"),
              data = df)

Why not use levels = c(1, 2, 3) here? Because if we do, a positive β (β > 0) would imply that as x increases, an individual is more likely to be in a lower socio-economic (S-E) status. However, we want the interpretation to be the opposite—where a positive β indicates a higher likelihood of being in a higher S-E status. To achieve this, we reverse the order when constructing the factor.

5. References