Published on

Adjacent Categories Models

Authors
  • avatar
    Name
    Kevin Navarrete-Parra
    Twitter

I am writing quick and easy R guides for my didactic purposes and to provide useful starting places for my peers in grad school. If you see that I have made a mistake or would like to suggest some way to make the post better or more accurate, please feel free to email me. I am always happy to learn from others' experiences!

Table of contents

  1. Model Formula
  2. Conditional Probabilities and Odds Ratios
  3. Running it in R
  4. Diagnostic Statistics

Model Formula

The adjacent categories model is similar to the continuation ratio model and the series of proportional odds models, differing only slightly in how the equation is specified. As the name indicates, the AC model estimates the odds of being in category j+1j+1 as opposed to being in the lower category j of the given ordinal response variable. Simply put, this model takes category pairs and compares the odds of being in category j instead of category j+1j+1. The model is written as

logit[P(Y=j+1x1,x2,...,xp)]=ln(P(Y=j+1x1,x2,...,xp)P(Y+jx1,x2,...,xp))=αj+β1X1+β2X2+...+β3X3logit[P(Y = j + 1|x_1, x_2, ..., x_p)] = ln \left( \frac{P(Y = j + 1 | x_1, x_2, ..., x_p)}{P(Y + j | x_1, x_2, ..., x_p)} \right) = \alpha_j + \beta_1X_1 + \beta_2X_2 + ... + \beta_3X_3

where j represents J1J-1 categories, \alpha_j gives us the intercepts, and the betas are logit coefficients.

Conditional Probabilities and Odds Ratios

Unsurprisingly, calculating this model's odds is very similar to the CR model and PO model. In this case, the equation is

Odds(Y=jvs.Y=j1)=P(Y=j)P(Y=j1)Odds(Y = j vs. Y = j - 1) = \frac{P(Y = j)}{P(Y = j-1)}

where j is any category above zero.

And like with the other models mentioned above, the first thing you do after running the model is exponentiate the odds to get an odds ratio. Interpreting the odds ratio differs only insofar as this model is marginally distinct from the earlier models.

Running it in R

You can run the AC model in R using the vglm function from the VGAM package, just like for the earlier models. The only difference is that the family argument should be acat, such that the model looks like


model <- vglm(dv ~ iv, family = acat(parallel = TRUE, reverse = FALSE), data = data)
summary(model)

where parallel = TRUE indicates that the model abides by the proportional odds assumption.

And as with the earlier models, you can get an odds ratio by running


ac.or <- cbind(exp(coef(model)), exp(confint(model)))
print(ac.or)

Diagnostic Statistics

For a deeper dive into the model fit statistics, see the Logit Model Notes and the CR Model Notes.