Hello, I have an ordinal outcome variable representing systolic blood pressure (BP) groups (1: Normal, 2: Elevated, 3: High BP Stage 1, 4: High BP Stage 2). I would like to conduct a repeated measures ordinal logistic regression analysis to compare BP groups at baseline and follow-up between two drug treatment groups, in order to test whether one treatment is more effective than the other in reducing BP severity. I used proc genmod.
PROC GENMOD DATA=long;
CLASS PatientID treatment_group time;
MODEL BP_group =treatment_group time treatment_group*time/
DIST=MULTINOMIAL LINK=CLOGIT TYPE1 AGGREGATE=treatment_group;
REPEATED SUBJECT=PatientID/TYPE=IND;
ESTIMATE 'LogOR12' treatment_group -1 1 / EXP;
RUN;
Here are the results. Could anyone help me interpret the contrast estimate results? Additionally, if you have suggestions for a more appropriate model to address my research question, I would greatly appreciate your input.
The results of that CONTRAST give you a test of the difference, with respect to lower levels of your ordinal response, between the treatments averaged over the two times. You can see this by adding the E option in the CONTRAST statement which shows the coefficients used in the linear combination of the model parameters that is estimated. The exponentiated result from the EXP option gives you an odds ratio comparing the treatments.
But since there seems to be a significant interaction between treatments and time, this could be misleading. As with any regression model where interaction is found, it is best to look separately at the effect of one of the variables at each level of the other variable. It's also always helpful to get a summarizing plot of the fitted model so that you can visualize the effect of interest. You can do both of these by adding an EFFECTPLOT statement and a SLICE statement.
The arthritis data in the example titled "Alternating Logistic Regression for Ordinal Multinomial Data" in the PROC GEE documentation is similar to your situation. Using just two of the visits in that data and an interaction model like yours, the following does the analysis comparing the treatments at each visit. Note that in these data, the interaction is not significant.
proc genmod data=data9.arthritis;
where visit in (1,3);
class id treatment visit;
model Rating= Treatment|visit/dist=mult;
repeated subject=id;
effectplot interaction(x=visit sliceby=treatment);
estimate 'trt diff' treatment 1 -1 / exp e;
slice treatment*visit / sliceby=visit e ilink means plots=none;
run;
The plot shows the difference between the treatments at each visit on each of the cumulative probabilities estimated by the ordinal model. The results from the SLICE statement shows, separately for the two visits, the cumulative probability estimates for each treatment. And then an overall test of the treatment difference is given, again for each visit. As suggested by the plot for each of the cumulative probabilities, the treatment difference is a little bit larger at visit 3 than at visit 1. This is seen in the two overall tests - in visit 1, the overall test p-value is not significant, but is significant in visit 3.
The results of that CONTRAST give you a test of the difference, with respect to lower levels of your ordinal response, between the treatments averaged over the two times. You can see this by adding the E option in the CONTRAST statement which shows the coefficients used in the linear combination of the model parameters that is estimated. The exponentiated result from the EXP option gives you an odds ratio comparing the treatments.
But since there seems to be a significant interaction between treatments and time, this could be misleading. As with any regression model where interaction is found, it is best to look separately at the effect of one of the variables at each level of the other variable. It's also always helpful to get a summarizing plot of the fitted model so that you can visualize the effect of interest. You can do both of these by adding an EFFECTPLOT statement and a SLICE statement.
The arthritis data in the example titled "Alternating Logistic Regression for Ordinal Multinomial Data" in the PROC GEE documentation is similar to your situation. Using just two of the visits in that data and an interaction model like yours, the following does the analysis comparing the treatments at each visit. Note that in these data, the interaction is not significant.
proc genmod data=data9.arthritis;
where visit in (1,3);
class id treatment visit;
model Rating= Treatment|visit/dist=mult;
repeated subject=id;
effectplot interaction(x=visit sliceby=treatment);
estimate 'trt diff' treatment 1 -1 / exp e;
slice treatment*visit / sliceby=visit e ilink means plots=none;
run;
The plot shows the difference between the treatments at each visit on each of the cumulative probabilities estimated by the ordinal model. The results from the SLICE statement shows, separately for the two visits, the cumulative probability estimates for each treatment. And then an overall test of the treatment difference is given, again for each visit. As suggested by the plot for each of the cumulative probabilities, the treatment difference is a little bit larger at visit 3 than at visit 1. This is seen in the two overall tests - in visit 1, the overall test p-value is not significant, but is significant in visit 3.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.
Find more tutorials on the SAS Users YouTube channel.