Network meta-analysis in SAS

Network meta-analysis in SAS
Danish Society of Biopharmaceutical Statistics,
Elsinore, May 27, 2014
David A. Scott MA MSc
Senior Director, ICON Health Economics
Visiting Fellow, SHTAC, University of Southampton
Network Meta-Analysis: Software
•
•
•
•
winBUGS/OpenBUGS/JAGS (DSU series)
R e.g. rmeta, netmeta, mvmeta packages
Stata mvmeta
SAS e.g. proc glimmix, proc mcmc
A brief history of NMA in SAS
• Lots of different procedures to implement
NMA in SAS
– proc mixed, proc mixed, proc nlmixed, proc
genmod, proc glimmix1-3
– Frequentist techniques
– Difficult to fit complex hierarchical models2
• MCMC techniques
– proc genmod (using Easy Bayes) -> proc mcmc
– SAS 9.2 (level 2M3), SAS 9.3 (sas stat 12)
1 Glenny
AM et al, Health Technology Assessment 2005; 9(26)
2 Jones B et al, Pharmaceutical Statistics 2011; 10:523-31
3 Piepho HP et al. Biometrics 2012; 68:1269-77
Potential barriers
• DSU series winBUGS-focused
• SAS not yet used in UK reimbursement
submissions
• ERG limited experience of SAS
• Limited published code/articles
• Validation exercise
Illustrative example 1 - binary
data
Syntax: load data
data smoking;
input Study Trt R
datalines;
1 2 11 78 3
1 3 12 85 3
1 4 29 170 3
2 1 75 731 2
…
run;
N narm;
#Mothersill 1988
#Mothersill 1988
#Mothersill 1988
#Reid 1974
Syntax: fixed effects
proc mcmc data=smoking nmc=20000 seed=246810;
random Studyeffect ~general(0) subject=Study init=(0);
random Treat ~general(0) subject=Treatment init=(0) zero="No
contact" monitor=(Treat);
mu= Studyeffect + Treat;
P=1-(1/(1+exp(mu)));
model R ~ binomial(n=N, p=P);
run;
Syntax: random effects
proc mcmc data=smoking nbi=20000 nmc=200000 thin=10
seed=246810 monitor=(mysd) dic;
random Studyeffect ~normal(0, var=10000) subject=Study init=(0) ;
random Treat ~normal(0, var=10000) subject=Treatment init=(0)
zero="No contact" monitor=(Treat);
parms mysd 0.2;
prior mysd ~ uniform(0,1);
random RE ~ normal(0,sd=mysd/sqrt(2)) subject=_OBS_ init=(0);
mu= Studyeffect + Treat +RE;
P=1-(1/(1+exp(mu)));
model R ~ binomial(n=N, p=P);
run;
Diagnostics
• Trace
• Density
• Autocorrelation
– thin= option
• DIC (relative model fit)
– dic option
Diagnostics in SAS
Practical exercise 1
• Run the code as is
• Compare results for each model
• Amend the code to generate fewer MCMC samples,
how many are sufficient? How much burn-in is
needed? Is thinning necessary in the RE model?
• Which model is the better fit, fixed or random effects?
• Change the baseline from “no contact” to “self help”.
Are the results consistent?
• Try changing the priors to other vague priors1, does this
affect results?
1
Lambert PC et al, Statistics in Medicine, 2005; 24:2401-28
Results from WinBUGS
Fixed effects
mean
sd
Self help
0.25
0.13
Individual counselling
0.75
0.06
Group counselling
1.02
0.21
DIC
485.0
Random effects
Self help
0.46
0.4
Individual counselling
0.78
0.23
Group counselling
1.09
0.51
reSD
0.79
0.18
DIC
298.6
Illustrative example 2 continuous data
RQy449hbr123oxout
Syntax: load data
data scott;
input study trt baseline y SE;
datalines;
1 2 8.5 -1.08 0.12
1 3 8.5 -1.13 0.12
1 1 8.5 0.23
0.2
2 2 8.4 -1 0.1
…
;
run;
Syntax: fixed effects
proc mcmc data=scott nmc=200000 nthin=20 seed=246810;
random Studyeffect ~general(0) subject=Study init=(0) ;
random Treat ~general(0) subject=Treatment init=(0) zero="Placebo"
monitor=(Treat);
Mu= Studyeffect + Treat ;
model Y ~ normal(mean=Mu, var=SE*SE);
run;
Syntax: random effects
proc mcmc data=scott nmc=200000 nthin=20 seed=246810
monitor=(mysd) outpost=outp7 dic;
random Studyeffect ~normal(0,var=10000) subject=Study init=(0) ;
random Treat ~normal(0,var=10000) subject=Treatment init=(0)
zero="Placebo" monitor=(Treat);
parms mysd 0.2;
prior mysd ~ uniform(0,1);
random RE ~normal(0,sd=mysd/sqrt(2)) subject=_OBS_ init=(0);
Mu= Studyeffect + Treat +RE;
model Y ~ normal(mean=Mu, sd=SE);
run;
Syntax: fixed effects meta-regression
proc mcmc data=scott nmc=200000 nthin=20 seed=246810;
random Studyeffect ~general(0) subject=Study init=(0) ;
random Treat ~general(0) subject=Treatment init=(0) zero="Placebo"
monitor=(Treat);
parms hba1c 0;
prior hba1c ~normal(0,var=10000);
Mu= Studyeffect + Treat + baseline*hba1c;
model Y ~ normal(mean=Mu, var=SE*SE);
run;
Practical exercise 2
• Run the code as is
• Compare results for each model
• Which model is the better fit, fixed or random effects, or
meta-regression?
• Amend the code to generate fewer MCMC samples, how
many are sufficient? How much burn-in is needed? Is
thinning necessary in the RE model?
• Change the baseline from “Placebo” to “Insulin Glargine”.
Are the results consistent?
• Compare results to WinBUGS output
• Try changing the priors to other vague priors1, does this
affect results?
1
Lambert PC et al, Statistics in Medicine, 2005; 24:2401-28
Results from WinBUGS
Fixed effects
mean
Liraglutide 1.2mg
-1.04
Liraglutide 1.8mg
-1.21
Insulin glargine
-0.82
Exenatide BID
-0.79
Exenatide QW
-1.12
Fixed effects adjusting for baseline hba1c
Liraglutide 1.2mg
-1.02
Liraglutide 1.8mg
-1.20
Insulin glargine
-0.83
Exenatide BID
-0.82
Exenatide QW
-1.13
delta
-0.41
sd
0.07
0.06
0.06
0.05
0.06
0.07
0.06
0.06
0.05
0.06
0.14
Random effects from paper