Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MMRM analysis #6

Open
slophaven opened this issue May 27, 2021 · 0 comments
Open

MMRM analysis #6

slophaven opened this issue May 27, 2021 · 0 comments

Comments

@slophaven
Copy link

I have been looking a bit into the MMRM analysis in the report for "CDISCPILOT01 – Initial Case Study of the CDISC SDTM/ADaM Pilot Project". More specifically I looked into the generation of table 14-3.11 and the SAS output supporting table 14-3.11. The title of the table is "... change from baseline to week 24". It turns out that the numbers presented are not for the change to week 24, it is the average change to week 8/16/24. The numbers presented are created using this piece of SAS code (after having applied the following filter: EFFFL == "Y" & PARAMCD == 'ACTOT' & ANL01FL == 'Y' & DTYPE != 'LOCF' & AVISITN > 0):

proc mixed noclprint data=temp01 ic ;
class trtpcd_f aweekc sitegr1 usubjid;
model chg=trtpcd_f aweekc sitegr1 trtpcd_faweekc base baseaweekc/s ddfm=kr;
repeated aweekc/subject=usubjid type=un;
lsmeans trtpcd_f/ diff cl;
ods output diffs=temp02;
ods output LSMeans=temp03;
run;

What should be done instead is this (note the difference in the lsmeans statement):

proc mixed noclprint data=temp01 ic ;
class trtpcd_f aweekc sitegr1 usubjid;
model chg=trtpcd_f aweekc sitegr1 trtpcd_faweekc base baseaweekc/s ddfm=kr;
repeated aweekc/subject=usubjid type=un;
lsmeans trtpcd_f*aweekc/ diff cl;
ods output diffs=temp02;
ods output LSMeans=temp03;
run;

In R I did the following:

First approach

test1<-lmer(CHG ~ TRTPCD_F + SITEGR1 + AWEEKC + TRTPCD_F:AWEEKC + BASE + BASE:AWEEKC + (AVISITN | USUBJID),data=adas)

Second approach using gls

test1<-gls(CHG ~ TRTPCD_F + SITEGR1 + AWEEKC + TRTPCD_F:AWEEKC + BASE + BASE:AWEEKC,
corr=corSymm(form= ~1 | USUBJID),weights=varIdent(form= ~1 | AVISITN),data=adas)

Third approach: lmer with modification as suggested by Daniel Sabanes Bove

test1<-lmer(CHG ~ TRTPCD_F + SITEGR1 + AWEEKC + TRTPCD_F:AWEEKC + BASE + BASE:AWEEKC + (0 + AWEEKC | USUBJID),data=adas, control=lmerControl(check.nobs.vs.nRE="ignore"))

LSmeans per group

test2<-emmeans::lsmeans(test1, ~TRTPCD_F:AWEEKC, lmer.df='kenward-roger')

LSmeans for differences

test3<-emmeans::contrast(test2, method="pairwise", adjust=NULL)

95% CI

test4 <- confint(test3)

The results are as follows:

In SAS:

PBO: 2.3291 [0.9680; 3.6903]
High dose: 1.5009 [-0.1475; 3.1494]
Low dose: 1.7352 [0.2247; 3.2457]
Differences:
High vs. PBO: 0.8282 [-1.2856; 2.9420] p=0.4403
Low vs. PBO: 0.5939 [-1.4136; 2.6014] p=0.5600

First approach: with lmer:

Pbo Week 24 2.32 [0.962; 3.68]
Xan_Hi Week 24 1.49 [-0.154; 3.14]
Xan_Lo Week 24 1.77 [0.263; 3.28]
Differences:
Xan_Hi Week 24 - Pbo Week 24 0.8270 [-1.283; 2.9367] p=0.4404
Xan_Lo Week 24 - Pbo Week 24 0.5459 [-1.459; 2.5510] p=0.5919

Second approach: with gls (using approximative Satterthwaite):

Pbo Week 24 2.331 [0.972; 3.69]
Xan_Hi Week 24 1.502 [-0.140; 3.14]
Xan_Lo Week 24 1.735 [0.229; 3.24]
Differences:
Xan_Hi Week 24 - Pbo Week 24 0.8294 [-1.278; 2.9371] p=0.4384
Xan_Lo Week 24 - Pbo Week 24 0.5959 [-1.407; 2.5991] P=0.5578

Third approach: lmer with modification as suggested by Daniel Sabanes Bove

Pbo Week 24 2.329 [0.968; 3.69]
Xan_Hi Week 24 1.501 [-0.147; 3.15]
Xan_Lo Week 24 1.735 [0.225; 3.25]
Differences:
Xan_Hi Week 24 - Pbo Week 24 0.8282 [-1.285; 2.9415] p=0.4402
Xan_Lo Week 24 - Pbo Week 24 0.5939 [-1.413; 2.6010] p=0.5599

@mstackhouse mstackhouse pinned this issue Jun 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant