The proportional odds assumption for an ordinal, multinomial logistic model implies that the curves on the various cumulative logits are parallel. This assumption can be assessed visually for a given predictor by plotting it against the empirical logits.
For a response with k levels, the cumulative logits are:
Logit_{1} = log[ p_{1}/(1p_{1}) ] = log[ p_{1}/(p_{2}+p_{3}+…+p_{k}) ] ,
Logit_{2} = log[ (p_{1}+p_{2})/(1(p_{1}+p_{2})) ] = log[ (p_{1}+p_{2})/(p_{3}+p_{4}+…+p_{k}) ] ,
…
Logit_{k1} = log[ (p_{1}+p_{2}+...+p_{k1}) / p_{k} ]
where p_{1}, p_{2}, ... , p_{k} are the probabilities of the k response levels in a population. A population is defined as a setting of the predictors. Notice that there are k1 cumulative logits defined on the k response levels. Effectively, each cumulative logit dichotomizes the multinomial response into two sums by "cutting" the ordered list of probabilities at each possible position.
By using the observed counts, y_{i}, you can compute empirical logits for use in plots. A constant 0.5 can be added to the numerators and denominators of the logits when zero counts exist in the data that would cause a zero denominator in a logit.
EmpLogit_{i} = log[ (y_{1}+y_{2}+…+y_{i})/(y_{i+1}+y_{i+2}+…+y_{k}) ]
Derr (2013) further discusses the testing and assessment of the proportional odds assumption. He presents macros that produce empirical logit plots like those shown below and plots proposed by Harrell (2001) which provide another way to visually assess proportional odds. An updated version of his empirical logit plotting macro that is more robust is available. See instructions in Example 1 below. When the proportional odds assumption is not valid, alternative models can be fit as discussed and illustrated in this note and by Derr (2013).
The following uses the data in the example titled "Ordinal Logistic Regression" in the LOGISTIC documentation. To compute the empirical logits, begin by transposing the data so that there is one observation per additive. Each observation contains the counts of all nine response categories for that additive. Since there are a few zero counts, the following DATA step adds 0.5 to the numerator and denominator of each cumulative logit. The eight empirical logits, c1, c2, ..., c8, are then computed. Finally, a plot of the empirical logits is produced using PROC SGPLOT.
proc transpose data=Cheese out=tran; by Additive; var freq; run; data a; set tran; const=0.5; c1=log((sum(of col1col1)+const)/(sum(of col2col9)+const)); c2=log((sum(of col1col2)+const)/(sum(of col3col9)+const)); c3=log((sum(of col1col3)+const)/(sum(of col4col9)+const)); c4=log((sum(of col1col4)+const)/(sum(of col5col9)+const)); c5=log((sum(of col1col5)+const)/(sum(of col6col9)+const)); c6=log((sum(of col1col6)+const)/(sum(of col7col9)+const)); c7=log((sum(of col1col7)+const)/(sum(of col8col9)+const)); c8=log((sum(of col1col8)+const)/(sum(of col9col9)+const)); run; proc sgplot; series y=c1 x=Additive; series y=c2 x=Additive; series y=c3 x=Additive; series y=c4 x=Additive; series y=c5 x=Additive; series y=c6 x=Additive; series y=c7 x=Additive; series y=c8 x=Additive; yaxis label="Empirical Logits"; run;
Notice that the curves are roughly parallel. This visually confirms the nonsignificant test of the proportional odds assumption provided by PROC LOGISTIC (p =0.6936).
The empirical logit plot can also be produced using an updated version of Derr's EmpiricalLogitPlot macro. To use this macro, submit all of this macro code, unaltered, in your SAS^{®} session. Note that the EmpiricalLogitPlot macro calls two other macros whose code is also provided. Use of the macro also requires the CtoN macro. The code for that macro must also be submitted in your SAS session. Once all of this macro code is submitted, the macros are available for use in your current SAS session.
Note that the data in this example is aggregated such that each observation represents several actual observations. The count provided in variable freq indicates the number of times that combination of additive and y values occurred. Since the macro does not accept aggregated data, it is necessary to expand this data set to contain a single observation for each occurrence. The following DATA step expands the aggregated data.
data cheese; set cheese; do i=1 to freq; output; end; run;
The following macro call produces the plot. The predictor, additive, is specified in the class= option since it is categorical and would appear in the CLASS statement when fitting an ordinal logistic model.
%EmpiricalLogitPlot(data=cheese, y=y, class=additive)
Always inspect the Response Profile table to verify that the response levels are in logical increasing or decreasing order. Otherwise the plot is meaningless.

This example uses the dental pain relief data discussed in this note. In this case the overall test of the proportional odds assumption is significant (p=0.0089). It is important to note that this test is known to be liberal (rejecting the assumption more often than expected), particularly for small samples. While the rough sample size requirements as discussed by Stokes, et. al. are found to be nearly met by these data, separate tests of parallelism for each of the three predictors produced using PROC LOGISTIC (p=0.18, 0.17, and 0.07) suggest that not all of the predictors exhibit nonproportional odds. Of course, the overall test provided by PROC LOGISTIC having combined degrees of freedom is somewhat more powerful than each of these three tests. Graphical assessment of the assumption can be helpful.
The following statements produce empirical logit plots for each of the three predictors — Baseline, Center, and Trt. Beginning with Baseline, these statements first obtain the response counts for each of the two levels of Baseline, then proceed as above to compute the empirical logits. For this data set there are no zero counts, so nothing is added to the counts. Since there are five response levels, four logits are computed and plotted.
proc freq data=dent; table baseline*resp / out=os; run; proc transpose data=os out=tran; by baseline; var count; run; data a; set tran; const=0; c1=log((sum(of col1col1)+const)/(sum(of col2col5)+const)); c2=log((sum(of col1col2)+const)/(sum(of col3col5)+const)); c3=log((sum(of col1col3)+const)/(sum(of col4col5)+const)); c4=log((sum(of col1col4)+const)/(sum(of col5col5)+const)); run; proc sgplot; series y=c1 x=baseline; series y=c2 x=baseline; series y=c3 x=baseline; series y=c4 x=baseline; yaxis label="Empirical Logits"; xaxis integer; run;
The test of parallelism for Baseline was not significant (p=0.1727). The plot shows only a little difference between two pairs of logit lines.
Similar code is used to produce the plot for Trt. Its test for parallelism was marginally significant (p=0.0688). The plot shows some nonparallelism at levels ACH and TL.
Similar code produces the plot for Center. Its test for parallelism was not significance (p=0.1782). The plot shows roughly parallel lines.
The EmpiricalLogitsPlot macro can produce the same set of plots.
%EmpiricalLogitPlot(data=dent, y=resp, class=baseline trt center, const=0)

Long (1997) presents data from a survey investigating the effects of demographic predictors such as race (White), Age, education (Ed), and occupational prestige (Prst) on the level of agreement with the statement that a working mother can have as warm a relationship with her child as a nonworking mother (Warm). Agreement can range from strongly disagree (Warm=1) to strongly agree (Warm=4).
The overall test of the proportional odds assumption is marginally significant at p=0.0606. The assumption can be assessed graphically with this call of the EmpiricalLogitPlot macro. For a continuous predictor, the macro defines neighborhoods around the observed values and uses a smooth (loess) curve.
%EmpiricalLogitPlot(data=Longdat, y=Warm, class=White, cont=Age Ed Prst)
The plots show good parallelism of the logits for three of the four predictors. Only Ed shows some difference.

The following statements allow Ed to have unequal slopes in an ordinal logistic model for Warm.
proc logistic data=Longdat; model Warm = Age White Ed Prst / unequalslopes=(Ed); run;
These data are from the example titled "Multilevel Response" in the PROC PROBIT documentation. The response, Symptoms, has three ordered levels resulting in two cumulative logits.
The test for the proportional odds assumption is not significant (p =.2857). The following statements produce the plot of empirical logits for the Prep predictor.
proc freq data=multi order=data; weight n; table prep*symptoms / out=os; run; proc transpose data=os out=tran; by prep; var count; run; data a; set tran; const=0; c1=log((sum(of col1col1)+const)/(sum(of col2col3)+const)); c2=log((sum(of col1col2)+const)/(sum(of col3col3)+const)); run; proc sgplot; series y=c1 x=prep; series y=c2 x=prep; yaxis label="Empirical Logits"; run;
Similar code produces the plot for the other predictor, Ldose.
After expanding this aggregated data so that there is a single response per observation, the following call of the EmpiricalLogitPlots macro produces the same plots. Both predictors are treated as categorical. Note that the YORDER=DATA option is needed to ensure that the response levels are in logical order as seen in the Response Profile table.
data multi; set multi; do i=1 to n; output; end; run; %EmpiricalLogitPlot(data=multi, y=symptoms, class=prep ldose, yorder=data, const=0)

Product Family  Product  System  SAS Release  
Reported  Fixed*  
SAS System  SAS/STAT  z/OS  
OpenVMS VAX  
Microsoft® Windows® for 64Bit Itaniumbased Systems  
Microsoft Windows Server 2003 Datacenter 64bit Edition  
Microsoft Windows Server 2003 Enterprise 64bit Edition  
Microsoft Windows XP 64bit Edition  
Microsoft® Windows® for x64  
OS/2  
Microsoft Windows 95/98  
Microsoft Windows 2000 Advanced Server  
Microsoft Windows 2000 Datacenter Server  
Microsoft Windows 2000 Server  
Microsoft Windows 2000 Professional  
Microsoft Windows NT Workstation  
Microsoft Windows Server 2003 Datacenter Edition  
Microsoft Windows Server 2003 Enterprise Edition  
Microsoft Windows Server 2003 Standard Edition  
Microsoft Windows Server 2008  
Microsoft Windows XP Professional  
Windows 7 Enterprise 32 bit  
Windows 7 Enterprise x64  
Windows 7 Home Premium 32 bit  
Windows 7 Home Premium x64  
Windows 7 Professional 32 bit  
Windows 7 Professional x64  
Windows 7 Ultimate 32 bit  
Windows 7 Ultimate x64  
Windows Millennium Edition (Me)  
Windows Vista  
64bit Enabled AIX  
64bit Enabled HPUX  
64bit Enabled Solaris  
ABI+ for Intel Architecture  
AIX  
HPUX  
HPUX IPF  
IRIX  
Linux  
Linux for x64  
Linux on Itanium  
OpenVMS Alpha  
OpenVMS on HP Integrity  
Solaris  
Solaris for x64  
Tru64 UNIX 
Type:  Usage Note 
Priority:  
Topic:  Analytics ==> Categorical Data Analysis SAS Reference ==> Procedures ==> LOGISTIC 
Date Modified:  20170630 15:22:33 
Date Created:  20091120 16:41:22 