I'm analyzing data using an MMRM with PROC MIXED. The covariates are treatment (i=1,2,3,4), visit (j=1,2,3,4,5), and age group (k=1,2,3) with three-way and all two-way interactions included, along with 3 other covariates. I'm mainly using ESTIMATE statements to provide treatment differences at visit 4, very simple. I have one hypothesis I want to test that is more complicated, and I can't figure out if I can use built-in SAS statements.
I want to test if the difference between treatment 1 and 2 is the same across the 3 age groups at week 24. So, using the (ijk) notation...
H_0 = mu_(141)-mu_(241) = mu(142)-mu_(242) = mu_(143)-mu_(243)
H_a = not all equal
It would be simple to test the equality of any two of these expressions using ESTIMATE statements, but there are three expressions here I guess necessitating an ANOVA kind of test? I'm not sure how to go about coding this test. Main modeling code is below.
ods output estimates= ests lsmeans= lsms diffs= diffs;
proc mixed data=eff_pop method = reml;
class subj trt visit agegroup hist;
model chg = trt visit agegroup trt*visit trt*agegroup visit*agegroup trt*visit*agegroup base cont hist / ddfm=kr solution outp=predict;
repeated visit / type=un subject=subj;
lsmeans trt01pn|avisitn/ pdiff=all cl;
Use the LSMEANS statement on the 3-way interaction to show the estimates and order of the means. Then use an LSMESTIMATE statement to test the joint hypothesis of the pairwise differences of the ones you want to compare. For example, the following compares the first three and abbreviation treatment as t, visit as v, and age as a. It will be a 2 df test. For your case, you'll have a lot more zeros in each part to pick out the right means. Be careful to match your coefficients to the order of from the LSMEANS statement.
lsmeans t*v*a;
lsmestimate t*v*a '111=112' 1 -1 0, '111=113' 1 0 -1, '112=113' 0 1 -1 / joint;
Use the LSMEANS statement on the 3-way interaction to show the estimates and order of the means. Then use an LSMESTIMATE statement to test the joint hypothesis of the pairwise differences of the ones you want to compare. For example, the following compares the first three and abbreviation treatment as t, visit as v, and age as a. It will be a 2 df test. For your case, you'll have a lot more zeros in each part to pick out the right means. Be careful to match your coefficients to the order of from the LSMEANS statement.
lsmeans t*v*a;
lsmestimate t*v*a '111=112' 1 -1 0, '111=113' 1 0 -1, '112=113' 0 1 -1 / joint;
Thank you, this is perfect, I didn't know about the JOINT option. Just for any others looking at this post, here is the final code with I believe all the correct zeros and everything.
ods output lsmeans=lsms lsmestimate=lsmests; proc mixed data=eff_pop method = reml; class subj trt visit agegroup hist; model chg = trt visit agegroup trt*visit trt*agegroup visit*agegroup trt*visit*agegroup base cont hist / ddfm=kr solution outp=predict; repeated visit / type=un subject=subj; lsmeans trt*visit*agegroup; lsmestimate trt*visit*agegroup 'Difference within age group 1 at visit 4, trt 1 vs. 2' 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 'Difference within age group 2 at visit 4, trt 1 vs. 2' 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 'Difference within age group 3 at visit 4, trt 1 vs. 2' 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0/ joint; run; ods rtf close;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.