**Version info**: Code for this page was tested in
SAS 9.3.

## Examples of ordered logistic regression

Example 1: A marketing research firm wants to investigate what factors influence the size of soda (small, medium, large or extra large) that people order at a fast-food chain. These factors may include what type of sandwich is ordered (burger or chicken), whether or not fries are also ordered, and age of the consumer. While the outcome variable, size of soda, is obviously ordered, the difference between the various sizes is not consistent. The differences are 10, 8, 12 ounces, respectively.

Example 2: A researcher is interested in what factors influence medaling in Olympic swimming. Relevant predictors include at training hours, diet, age, and popularity of swimming in the athlete’s home country. The researcher believes that the distance between gold and silver is larger than the distance between silver and bronze.

Example 3: A study looks at factors that influence the decision of whether to apply to graduate school. College juniors are asked if they are unlikely, somewhat likely, or very likely to apply to graduate school. Hence, our outcome variable has three categories. Data on parental educational status, whether the undergraduate institution is public or private, and current GPA is also collected. The researchers have reason to believe that the “distances” between these three points are not equal. For example, the “distance” between “unlikely” and “somewhat likely” may be shorter than the distance between “somewhat likely” and “very likely”.

## Description of the data

For our data analysis below, we are going to expand on Example 3 about
applying to graduate school. We have generated **hypothetical** data,
which can be downloaded: ologit.

This hypothetical data set has a three level variable called **apply**
(coded 0, 1, 2), that we
will use as our response (i.e., outcome, dependent) variable. We also have three
variables that we will use as predictors: **pared**, which is a 0/1
variable indicating whether at least one parent has a graduate degree; **public**, which is a 0/1 variable where 1 indicates
that the undergraduate institution is a public university and 0 indicates that it is
a private university, and **gpa**, which is the student’s grade point average.

proc freq data = "D:ologit"; tables apply; tables pared; tables public; run;

APPLY Frequency Percent Cumulative Frequency Cumulative Percent 0 220 55.00 220 55.00 1 140 35.00 360 90.00 2 40 10.00 400 100.00

PARED Frequency Percent Cumulative Frequency Cumulative Percent 0 337 84.25 337 84.25 1 63 15.75 400 100.00

PUBLIC Frequency Percent Cumulative Frequency Cumulative Percent 0 343 85.75 343 85.75 1 57 14.25 400 100.00 The FREQ Procedure

Cumulative Cumulative APPLY Frequency Percent Frequency Percent ———————————————————- 0 220 55.00 220 55.00 1 140 35.00 360 90.00 2 40 10.00 400 100.00

Cumulative Cumulative PARED Frequency Percent Frequency Percent ———————————————————- 0 337 84.25 337 84.25 1 63 15.75 400 100.00

Cumulative Cumulative PUBLIC Frequency Percent Frequency Percent ———————————————————– 0 343 85.75 343 85.75 1 57 14.25 400 100.00

proc means data = "D:ologit"; var gpa; run;The MEANS Procedure Analysis Variable : GPA N Mean Std Dev Minimum Maximum ------------------------------------------------------------------- 400 2.9989250 0.3979409 1.9000000 4.0000000 -------------------------------------------------------------------

## Analysis methods you might consider

Below is a list of some analysis methods you may have encountered. Some of the methods listed are quite reasonable while others have either fallen out of favor or have limitations.

- Ordered logistic regression: the focus of this page.
- OLS regression: This analysis is problematic because the assumptions of OLS are violated when it is used with a non-interval outcome variable.
- ANOVA: If you use only one continuous predictor, you could “flip”
the model around so that, say,
**gpa**was the outcome variable and**apply**was the predictor variable. Then you could run a one-way ANOVA. This isn’t a bad thing to do if you only have one predictor variable (from the logistic model), and it is continuous. - Multinomial logistic regression: This is similar to doing ordinal logistic regression, except that it is assumed that there is no order to the categories of the outcome variable (i.e., the categories are nominal). The downside of this approach is that the information contained in the ordering is lost.
- Ordinal probit regression: This is very, very similar to running an ordinal logistic regression. The main difference is in the interpretation of the coefficients.

## Ordered logistic regression

Before we run our ordinal logistic model, we will see if any cells (created
by the crosstab of our categorical and response variables) are empty or
extremely small. If any are, we may have difficulty running our model.
We have used some options on the tables statements to clean up the output.
Perhaps the most important option is the **missprint** option; this will have
SAS include missing values as a category in the table. Because we have no
missing values in this data set, this option is not really needed; we have
included it here only to show its use.

proc freq data = "D:ologit"; tables apply*pared / nopercent norow nocol missprint; tables apply*public / nopercent norow nocol missprint; run;The FREQ Procedure Table of APPLY by PARED APPLY PARED Frequency| 0| 1| Total ---------+--------+--------+ 0 | 200 | 20 | 220 ---------+--------+--------+ 1 | 110 | 30 | 140 ---------+--------+--------+ 2 | 27 | 13 | 40 ---------+--------+--------+ Total 337 63 400 Table of APPLY by PUBLIC APPLY PUBLIC Frequency| 0| 1| Total ---------+--------+--------+ 0 | 189 | 31 | 220 ---------+--------+--------+ 1 | 124 | 16 | 140 ---------+--------+--------+ 2 | 30 | 10 | 40 ---------+--------+--------+ Total 343 57 400

None of the cells is too small or empty (has no cases), so we will run our model.

proc logistic data = "D:ologit" desc; class pared(ref='0') public(ref='0') / param=reference; model apply = pared public gpa; run;The LOGISTIC Procedure Model Information Data Set D:ologit Written by SAS Response Variable APPLY Number of Response Levels 3 Model cumulative logit Optimization Technique Fisher's scoring Number of Observations Read 400 Number of Observations Used 400 Response Profile Ordered Total Value APPLY Frequency 1 2 40 2 1 140 3 0 220 Probabilities modeled are cumulated over the lower Ordered Values. Model Convergence Status Convergence criterion (GCONV=1E-8) satisfied. Score Test for the Proportional Odds Assumption Chi-Square DF Pr > ChiSq 4.8446 3 0.1835 Model Fit Statistics Intercept Intercept and Criterion Only Covariates AIC 745.205 727.025 SC 753.188 746.982 -2 Log L 741.205 717.025 The LOGISTIC Procedure Testing Global Null Hypothesis: BETA=0 Test Chi-Square DF Pr > ChiSq Likelihood Ratio 24.1804 3 <.0001 Score 23.4804 3 <.0001 Wald 24.3337 3 <.0001 Analysis of Maximum Likelihood Estimates Standard Wald Parameter DF Estimate Error Chi-Square Pr > ChiSq Intercept 2 1 -4.2983 0.8092 28.2189 <.0001 Intercept 1 1 -2.2029 0.7844 7.8869 0.0050 PARED 1 1.0478 0.2684 15.2350 <.0001 PUBLIC 1 -0.0585 0.2886 0.0411 0.8393 GPA 1 0.6156 0.2626 5.4963 0.0191 Odds Ratio Estimates Point 95% Wald Effect Estimate Confidence Limits PARED 2.851 1.685 4.826 PUBLIC 0.943 0.536 1.661 GPA 1.851 1.106 3.096 Association of Predicted Probabilities and Observed Responses Percent Concordant 60.0 Somers' D 0.210 Percent Discordant 39.0 Gamma 0.213 Percent Tied 1.1 Tau-a 0.119 Pairs 45200 c 0.605

In the output above, we see that all 400 observations in our data set
were used in the analysis. Fewer observations would have been used if any
of our variables had missing values. By default, SAS does a listwise
deletion of cases with missing values. The Response Profile shows the
value that SAS used when conducting the analysis (given in the Ordered Value
column), the value of the original variable, and the number of cases in each
level of the outcome variable. (If you want SAS to use the values that you
have assigned the outcome variable, then you would want to use the **order =
data** option on the **proc logistic** statement.) The note below this table reminds us that
the “Probabilities modeled are cumulated over the lower Ordered Values.”
It is helpful to remember this when interpreting the output. Next we see
that the model converged (you should not try to interpret any output if the
model has not converged), and we also see that the test of the proportional odds
assumption is non-significant. One of the assumptions underlying ordinal
logistic (and ordinal probit) regression is that the relationship between each
pair of outcome groups is the same. In other words, ordinal logistic
regression assumes that the coefficients that describe the relationship between,
say, the lowest versus all higher categories of the response variable are the
same as those that describe the relationship between the next lowest category
and all higher categories, etc. This is called the proportional odds
assumption or the parallel regression assumption. Because the relationship
between all pairs of groups is the same, there is only one set of coefficients
(only one model). If this was not the case, we would need different models
(such as a generalized ordered logit model) to describe the relationship between
each pair of outcome groups. The table showing the Model Fit Statistics provides the AIC, SC and -2 log
likelihood. These can be used in the comparison of nested models. In
the next table we see various tests of the overall model; they all indicated
that the model is statistically significant.

In the table Analysis of Maximum Likelihood Estimates, we see the degrees of
freedom, coefficients, their standard errors, the Wald chi-square test and
associated p-values.
Both **pared** and **gpa** are statistically significant; **public** is
not. So for **pared**, we would say that for a one unit
increase in **pared** (i.e., going from 0 to 1), we expect a 1.05 increase in
the log odds of being in a higher level of **apply**, given all of the other variables in the model are
held constant. For **gpa**, we would say that for a one unit increase
in **gpa**, we would expect a 0.62 increase in the log odds of being in a
higher level of **apply**, given that all of the other variables in the model
are held constant. In the next table we see the results presented as
proportional odds ratios (the coefficient exponentiated) and the 95% confidence
intervals for the proportional odds ratios. We would interpret the
proportional odds ratios pretty much as we would odds ratios from a binary
logistic regression. For **pared**, we would say that for a one unit increase
in **pared**, i.e., going from 0 to 1, the odds of high apply versus the combined
middle and low categories are 2.85 greater, given that all of the other
variables in the model are held constant. Likewise, the odds of the
combined middle and high categories versus low apply is 2.85 times greater,
given that all of the other variables in the model are held constant. For a one unit
increase in **gpa**, the odds of the high category of **apply**
versus the low and middle categories of **apply** are 1.85 times greater, given that the
other variables in the model are held constant. Because of the
proportional odds assumption (see below for more explanation), the same
increase, 1.85 times, is found between low **apply** and the combined
categories of middle and high **apply**.

We can also obtain predicted probabilities, which are usually easier to
understand than the coefficients or the odds ratios. We will use the **
estimate** statement. To use the **estimate** statement, we supply
values of our predictor variables to be multiplied by the regression
coefficients, which are for our current model the intercept for **apply** =
2, the intercept for **apply** = 1, the coefficient for **public** = 1 ,
the coefficient for **pared** = 1, and the coefficient for **gpa**. Here we will
see how the probabilities of membership to the categories of **apply** change
as we vary **pared** and hold **public** at 1 and **gpa** at its mean
of 2.9989.

proc logistic data = "C:Dataologit" desc; class pared(ref='0') public(ref='0')/ param = reference; model apply = pared public gpa; estimate "Pr prob apply=2 at pared=0" intercept 1 public 1 gpa 2.9989 / ilink category='2'; estimate "Pr prob apply=2 at pared=1" intercept 1 pared 1 public 1 gpa 2.9989 / ilink category='2'; estimate "Pr prob apply=1 or 2 at pared=0" intercept 1 public 1 gpa 2.9989 / ilink category='1'; estimate "Pr prob apply=1 or 2 at pared=1" intercept 1 pared 1 public 1 gpa 2.9989 / ilink category='1'; run; ***SOME OUTPUT OMITTED*** Estimate Standard Standard Error of Label APPLY Estimate Error z Value Pr > |z| Mean Mean Pr prob apply=2 at pared=0 2 -2.5108 0.3104 -8.09 |z| Mean Mean Pr prob apply=2 at pared=1 2 -1.4629 0.3545 -4.13 |z| Mean Mean Pr prob apply=1 or 2 at pared=0 1 -0.4153 0.2733 -1.52 0.1286 0.3976 0.06546 Estimate Standard Standard Error of Label APPLY Estimate Error z Value Pr > |z| Mean Mean Pr prob apply=1 or 2 at pared=1 1 0.6325 0.3451 1.83 0.0668 0.6531 0.07818

The predicted probabilities are listed in the “Mean” column. All
predicted probabilities discussed below were calculated at **public** = 1 and
**gpa** = 2.9989. As you can see, the predicted probability of
being in the highest category of **apply** (**apply** = 2) is 0.07511 if neither parent has a graduate
level education and 0.1880 otherwise. For membership to *either* the
highest or middle category of **apply **(**apply** = 1 or 2), the
predicted probabilities are 0.3976 and 0.6531, for parents without graduate
level education and with graduate level education, respectively. Predicted
probabilities of being in the middle category alone can be calculated by
subtracting the predicted probabilities of (**apply** = 1 or 2) from the
probability of (**apply** = 2). Thus, the probability of belonging to
the middle **apply** category when parents do not have graduate level
education is 0.3976 – 0.07511 = 0.32249. Predicted probabilities of being in the
lowest **apply** category can be obtained in 2 ways. First, we can
subtract the probability of being in either the highest or middle **apply**
category from 1. For example, the probability of being in the lowest apply
group (**apply** = 0) when parents do not have graduate education is 1 – 0.3976 =
0.6024. Alternatively, we can change the reference **apply** category
to 2 by removing the **desc** option from the **proc** **logistic**
statement and supply a new **estimate** statement to get the probabilities of
being in **apply** category 0.

proc logistic data = "C:Dataologit"; class pared(ref='0') public(ref='0')/ param = reference; model apply = pared public gpa; estimate "Pr prob apply=0 at pared=0" intercept 1 public 1 gpa 2.9989 / ilink category='0'; estimate "Pr prob apply=0 at pared=1" intercept 1 pared 1 public 1 gpa 2.9989 / ilink category='0'; run; ***SOME OUTPUT OMITTED*** EstimateStandard Standard Error of Label APPLY Estimate Error z Value Pr > |z| Mean Mean

Pr prob apply=0 at pared=0 0 0.4153 0.2733 1.52 0.1286 0.6024 0.06546

Estimate

Standard Standard Error of Label APPLY Estimate Error z Value Pr > |z| Mean Mean

Pr prob apply=0 at pared=1 0 -0.6325 0.3451 -1.83 0.0668 0.3469 0.07818

## Things to consider

- Perfect prediction:Perfect prediction means that only one value of a predictor variable is associated with only one value of the response variable. If this happens, Stata will usually issue a note at the top of the output and will drop the cases so that the model can run.
- Sample size: Both ordinal logistic and ordinal probit, using maximum likelihood estimates, require sufficient sample size. How big is big is a topic of some debate, but they almost always require more cases than OLS regression.
- Empty cells or small cells: You should check for empty or small cells by doing a crosstab between categorical predictors and the outcome variable. If a cell has very few cases (a small cell), the model may become unstable or it might not run at all.
- Pseudo-R-squared: There is no exact analog of the R-squared found in OLS. There are many versions of pseudo-R-squares. Please see Long and Freese 2005 for more details and explanations of various pseudo-R-squares.
- Diagnostics: Doing diagnostics for non-linear models is difficult, and ordered logit/probit models are even more difficult than binary models.

## See also

- Logistic
Regression in SAS
*with movies* - SAS Annotated Output: Proc Logistic – Ordinal Logistic Regression
- Logistic Regression Examples Using the SAS System by SAS Institute
- Logistic Regression Using the SAS System: Theory and Application by Paul D. Allison
- Categorical Data Analysis Using the SAS System, Third Edition, by Maura Stokes, Charles Davis and Gary Koch

## References

- Long, J. S. and Freese, J. (2014) Regression Models for Categorical and Limited Dependent Variables Using Stata, Third Edition. College Station, Texas: Stata Press.
- Agresti, A. (1996) An Introduction to Categorical Data Analysis. New York: John Wiley & Sons, Inc
- Agresti, A. (2013) Categorical Data Analysis, Third Edition. Hoboken, New Jersey: John Wiley & Sons, Inc.
- Liao, T. F. (1994) Interpreting Probability Models: Logit, Probit, and Other Generalized Linear Models. Thousand Oaks, CA: Sage Publications, Inc.
- Powers, D. and Xie, Yu. Statistical Methods for Categorical Data Analysis, Second Edition. Bingley, UK: Emerald Group Publishing Limited.