dat.nissen2007.RdData on the effect of Rosiglitazone on infarction risk and mortality.
dat.nissen2007The data frame contains the following columns:
| study | character | study identifier |
| phase | factor | study phase |
| treatment | character | treatment group medication |
| control | character | control group medication |
| weeks | numeric | follow-up duration (weeks) |
| treat.total | numeric | total number of patients in the treatment group |
| treat.infarction | numeric | number of patients with myocardial infarction in the treatment group |
| treat.death | numeric | number of deaths in the treatment group |
| cont.total | numeric | total number of patients in the control group |
| cont.infarction | numeric | number of patients with myocardial infarction in the control group |
| cont.death | numeric | number of deaths in the control group |
Nissen and Wolski (2007) performed a systematic literature review aiming for randomized controlled trials (RCTs) investigating the effects of Rosiglitazone (Avandia) in comparison to a control treatment, and with a follow-up duration of at least 24 weeks. 42 studies were included. A meta-analysis was performed to quantify the treatment effect on the risks of myocardial infarction and cardiovascular death in terms of the associated odds ratio (OR).
The data set features a number of “zero” trials (no event observed in one of the treatment groups) as well as “double-zero” trials (no event in either treatment group), which poses a challenge for some analysis methods. The original analysis was a common-effect analysis based on the Peto method (see the rma.peto help and the example code below). The data set as well as its original analysis have subsequently been discussed by other investigators (e.g., Diamond, Bax, & Kaul, 2007; Ruecker & Schumacher, 2008; Friedrich, Beyene, & Adhikari, 2009; Nissen & Wolski, 2010). Jackson et al. (2018) later surveyed a range of (random-effects) models that may be applicable in this context; see also the examples below.
Nissen, S. E., & Wolski, K. (2007). Effect of Rosiglitazone on the risk of myocardial infarction and death from cardiovascular causes. New England Journal of Medicine, 356(24), 2457-2471. https://doi.org/10.1056/NEJMoa072761
Diamond, G. A., Bax, L., & Kaul, S. (2007). Uncertain effects of Rosiglitazone on the risk for myocardial infarction and cardiovascular death. Annals of Internal Medicine, 147(8), 578–581. https://doi.org/10.7326/0003-4819-147-8-200710160-00182
Rücker, G., & Schumacher, M. (2008). Simpson’s paradox visualized: The example of the Rosiglitazone meta-analysis. BMC Medical Research Methodology, 8, 34. https://doi.org/10.1186/1471-2288-8-34
Friedrich, J. O., Beyene, J., & Adhikari, N. K. J. (2009). Rosiglitazone: Can meta-analysis accurately estimate excess cardiovascular risk given the available data? Re-analysis of randomized trials using various methodologic approaches. BMC Research Notes, 2, 5. https://doi.org/10.1186/1756-0500-2-5
Nissen, S. E., & Wolski, K. (2010). Rosiglitazone revisited: An updated meta-analysis of risk for myocardial infarction and cardiovascular mortality. Archives of Internal Medicine, 170(14), 1191–1201. https://doi.org/10.1001/archinternmed.2010.207
Jackson, D., Law, M., Stijnen, T., Viechtbauer, W., & White, I. R. (2018). A comparison of seven random-effects models for meta-analyses that estimate the summary odds ratio. Statistics in Medicine, 37(7), 1059–1085. https://doi.org/10.1002/sim.7588
medicine, cardiology, odds ratios, Peto's method, generalized linear models
dat.nissen2007
#> study phase treatment control
#> 1 49653/011 III rosiglitazone placebo
#> 2 49653/020 III rosiglitazone glyburide
#> 3 49653/024 III rosiglitazone placebo
#> 4 49653/093 III rosiglitazone with or without metformin metformin
#> 5 49653/094 III rosiglitazone and metformin metformin
#> 6 100684 IV rosiglitazone and glyburide glyburide
#> 7 49653/143 IV rosiglitazone and glyburide glyburide
#> 8 49653/211 IV rosiglitazone and usual care usual care
#> 9 49653/284 IV rosiglitazone and metformin metformin
#> 10 712753/008 IV rosiglitazoneand metformin metformin
#> 11 AVM100264 IV rosiglitazone and metformin metformin and sulfonylurea
#> 12 BRL 49653C/185 IV rosiglitazone with or without metformin usual care with or without metformin
#> 13 BRL 49653/336 IV rosiglitazone placebo
#> 14 BRL 49653/347 IV rosiglitazone and insulin insulin
#> 15 49653/015 III rosiglitazone and sulfonylurea sulfonylurea
#> 16 49653/079 III rosiglitazone with or without glyburide glyburide
#> 17 49653/080 III rosiglitazone glyburide
#> 18 49653/082 III rosiglitazone and insulin insulin
#> 19 49653/085 III rosiglitazone and insulin insulin
#> 20 49653/095 III rosiglitazone and insulin insulin
#> 21 49653/097 III rosiglitazone glyburide
#> 22 49653/125 III rosiglitazone and sulfonylurea sulfonylurea
#> 23 49653/127 III rosiglitazone and glyburide glyburide
#> 24 49653/128 III rosiglitazone placebo
#> 25 49653/134 III rosiglitazone placebo
#> 26 49653/135 III rosiglitazone and glipizide glipizide
#> 27 49653/136 III rosiglitazone placebo
#> 28 49653/145 III rosiglitazone and gliclazide glyclazide
#> 29 49653/147 III rosiglitazone and sufonylruea sulfonylurea
#> 30 49653/162 III rosiglitazone and glyburide glyburide
#> 31 49653/234 III rosiglitazone and glimepiride glimepiride
#> 32 49653/330 III rosiglitazone placebo
#> 33 49653/331 III rosiglitazone placebo
#> 34 49653/137 III rosiglitazone and metformin glyburide and metformin
#> 35 SB-712753/002 III rosiglitazone and metformin metformin
#> 36 SB-712753/003 III rosiglitazone and metformin metformin
#> 37 SB-712753/007 III rosiglitazone with or without metformin metformin
#> 38 SB-712753/009 III rosiglitazone, metformin and isulin insulin
#> 39 49653/132 II rosiglitazone and sulfonylurea sulfonylurea
#> 40 AVA100193 II rosiglitazone placebo
#> 41 DREAM III rosiglitazone placebo
#> 42 ADOPT III rosiglitazone metformin or glyburide
#> weeks treat.total treat.infarction treat.death cont.total cont.infarction cont.death
#> 1 24 357 2 1 176 0 0
#> 2 52 391 2 0 207 1 0
#> 3 26 774 1 0 185 1 0
#> 4 26 213 0 0 109 1 0
#> 5 26 232 1 1 116 0 0
#> 6 52 43 0 0 47 1 0
#> 7 24 121 1 0 124 0 0
#> 8 52 110 5 3 114 2 2
#> 9 24 382 1 0 384 0 0
#> 10 48 284 1 0 135 0 0
#> 11 52 294 0 2 302 1 1
#> 12 32 563 2 0 142 0 0
#> 13 52 278 2 0 279 1 1
#> 14 24 418 2 0 212 0 0
#> 15 24 395 2 2 198 1 0
#> 16 26 203 1 1 106 1 1
#> 17 156 104 1 0 99 2 0
#> 18 26 212 2 1 107 0 0
#> 19 26 138 3 1 139 1 0
#> 20 26 196 0 1 96 0 0
#> 21 156 122 0 0 120 1 0
#> 22 26 175 0 0 173 1 0
#> 23 26 56 1 0 58 0 0
#> 24 28 39 1 0 38 0 0
#> 25 28 561 0 1 276 2 0
#> 26 104 116 2 2 111 3 1
#> 27 26 148 1 2 143 0 0
#> 28 26 231 1 1 242 0 0
#> 29 26 89 1 0 88 0 0
#> 30 26 168 1 1 172 0 0
#> 31 26 116 0 0 61 0 0
#> 32 52 1172 1 1 377 0 0
#> 33 52 706 0 1 325 0 0
#> 34 32 204 1 0 185 2 1
#> 35 24 288 1 1 280 0 0
#> 36 32 254 1 0 272 0 0
#> 37 32 314 1 0 154 0 0
#> 38 24 162 0 0 160 0 0
#> 39 24 442 1 1 112 0 0
#> 40 24 394 1 1 124 0 0
#> 41 156 2635 15 12 2634 9 10
#> 42 208 1456 27 2 2895 41 5
library(metafor)
############################################################
# reproduce original "Peto" analyses
# infarction
ma01 <- rma.peto(ai=treat.infarction, ci=cont.infarction,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: Some yi/vi values are NA.
ma01
#>
#> Equal-Effects Model (k = 42)
#>
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 0.79
#>
#> Test for Heterogeneity:
#> Q(df = 37) = 29.3607, p-val = 0.8102
#>
#> Model Results (log scale):
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.3565 0.1663 2.1431 0.0321 0.0305 0.6825
#>
#> Model Results (OR scale):
#>
#> estimate ci.lb ci.ub
#> 1.4283 1.0309 1.9788
#>
# mortality
ma02 <- rma.peto(ai=treat.death, ci=cont.death,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: Some yi/vi values are NA.
ma02
#>
#> Equal-Effects Model (k = 42)
#>
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 0.49
#>
#> Test for Heterogeneity:
#> Q(df = 22) = 10.7495, p-val = 0.9781
#>
#> Model Results (log scale):
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.4947 0.2627 1.8834 0.0596 -0.0201 1.0095
#>
#> Model Results (OR scale):
#>
#> estimate ci.lb ci.ub
#> 1.6400 0.9801 2.7443
#>
############################################################
# reproduce "Fixed, IV (CC)" analyses
# from Diamond/Bax/Kaul (2007), Table 1
# infarction
ma03 <- rma.uni(measure="OR", method="FE",
drop00=TRUE, # (exclude "double-zeroes")
ai=treat.infarction, ci=cont.infarction,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 4 studies with NAs omitted from model fitting.
ma03
#>
#> Fixed-Effects Model (k = 38)
#>
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 0.44
#>
#> Test for Heterogeneity:
#> Q(df = 37) = 16.2200, p-val = 0.9988
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.2512 0.1599 1.5713 0.1161 -0.0621 0.5646
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
# mortality
ma04 <- rma.uni(measure="OR", method="FE",
drop00=TRUE, # (exclude "double-zeroes")
ai=treat.death, ci=cont.death,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 19 studies with NAs omitted from model fitting.
ma04
#>
#> Fixed-Effects Model (k = 23)
#>
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 0.22
#>
#> Test for Heterogeneity:
#> Q(df = 22) = 4.7900, p-val = 1.0000
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.2686 0.2478 1.0841 0.2783 -0.2170 0.7543
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
############################################################
# estimate ORs based on a binomial GLMM
# (with *fixed* study effects)
# ("model 4" in Jackson et al., 2018)
# infarction
ma05 <- rma.glmm(measure="OR", model="UM.FS",
ai=treat.infarction, ci=cont.infarction,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 4 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
ma05
#>
#> Random-Effects Model (k = 38; tau^2 estimator: ML)
#> Model Type: Unconditional Model with Fixed Study Effects
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> Tests for Heterogeneity:
#> Wld(df = 37) = 5.7016, p-val = 1.0000
#> LRT(df = 37) = 39.1360, p-val = 0.3741
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.3554 0.1664 2.1359 0.0327 0.0293 0.6814 *
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
# mortality
ma06 <- rma.glmm(measure="OR", model="UM.FS",
ai=treat.death, ci=cont.death,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 19 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
ma06
#>
#> Random-Effects Model (k = 23; tau^2 estimator: ML)
#> Model Type: Unconditional Model with Fixed Study Effects
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> Tests for Heterogeneity:
#> Wld(df = 22) = 1.0171, p-val = 1.0000
#> LRT(df = 22) = 16.9513, p-val = 0.7660
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.5092 0.2727 1.8671 0.0619 -0.0253 1.0438 .
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
############################################################
# estimate ORs based on binomial GLMM
# (with *random* study effects)
# ("model 5" in Jackson et al., 2018)
# infarction
ma07 <- rma.glmm(measure="OR", model="UM.RS", nAGQ=1,
ai=treat.infarction, ci=cont.infarction,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 4 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
#> Warning: failure to converge in 10000 evaluations
#> Warning: convergence code 4 from Nelder_Mead: failure to converge in 10000 evaluations
#> Warning: variance-covariance matrix computed from finite-difference Hessian is
#> not positive definite or contains NA values: falling back to var-cov estimated from RX
ma07
#>
#> Random-Effects Model (k = 38; tau^2 estimator: ML)
#> Model Type: Unconditional Model with Random Study Effects
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> sigma^2 (estimated amount of study level variability): 0.4997
#> sigma (square root of estimated sigma^2 value): 0.7069
#>
#> Tests for Heterogeneity:
#> Wld(df = 37) = 23.3462, p-val = 0.9607
#> LRT(df = 37) = 33.9645, p-val = 0.6121
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.2962 0.1684 1.7593 0.0785 -0.0338 0.6262 .
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
# mortality
ma08 <- rma.glmm(measure="OR", model="UM.RS", nAGQ=1,
ai=treat.death, ci=cont.death,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 19 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
ma08
#>
#> Random-Effects Model (k = 23; tau^2 estimator: ML)
#> Model Type: Unconditional Model with Random Study Effects
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> sigma^2 (estimated amount of study level variability): 0.3040
#> sigma (square root of estimated sigma^2 value): 0.5513
#>
#> Tests for Heterogeneity:
#> Wld(df = 22) = 24.9143, p-val = 0.3012
#> LRT(df = 22) = 23.2507, p-val = 0.3877
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.4463 0.2761 1.6165 0.1060 -0.0948 0.9874
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
############################################################
# estimate ORs based on hypergeometric model
# (model 7 (approx.) in Jackson et al., 2018)
# infarction
ma09 <- rma.glmm(measure="OR", model="CM.AL",
ai=treat.infarction, ci=cont.infarction,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 4 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
ma09
#>
#> Random-Effects Model (k = 38; tau^2 estimator: ML)
#> Model Type: Conditional Model with Approximate Likelihood
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> Tests for Heterogeneity:
#> Wld(df = 37) = 5.6239, p-val = 1.0000
#> LRT(df = 37) = 38.9844, p-val = 0.3806
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.3510 0.1653 2.1235 0.0337 0.0270 0.6751 *
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
# mortality
ma10 <- rma.glmm(measure="OR", model="CM.AL",
ai=treat.death, ci=cont.death,
n1i=treat.total, n2i=cont.total,
slab=study, data=dat.nissen2007)
#> Warning: 19 studies with NAs omitted from model fitting.
#> Warning: Some yi/vi values are NA.
ma10
#>
#> Random-Effects Model (k = 23; tau^2 estimator: ML)
#> Model Type: Conditional Model with Approximate Likelihood
#>
#> tau^2 (estimated amount of total heterogeneity): 0
#> tau (square root of estimated tau^2 value): 0
#> I^2 (total heterogeneity / total variability): 0.00%
#> H^2 (total variability / sampling variability): 1.00
#>
#> Tests for Heterogeneity:
#> Wld(df = 22) = 1.0062, p-val = 1.0000
#> LRT(df = 22) = 16.9181, p-val = 0.7679
#>
#> Model Results:
#>
#> estimate se zval pval ci.lb ci.ub
#> 0.5064 0.2720 1.8617 0.0626 -0.0267 1.0395 .
#>
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
############################################################
# tabulate estimates and CIs
# log-OR infarction
logOR.inf <- rbind("Peto" =c("OR"=ma01$b, "lower"=ma01$ci.lb, "upper"=ma01$ci.ub),
"IV-CC" =c("OR"=ma03$b, "lower"=ma03$ci.lb, "upper"=ma03$ci.ub),
"M4-UM.FS"=c("OR"=ma05$b, "lower"=ma05$ci.lb, "upper"=ma05$ci.ub),
"M5-UM.RS"=c("OR"=ma07$b, "lower"=ma07$ci.lb, "upper"=ma07$ci.ub),
"M7-CM.AL"=c("OR"=ma09$b, "lower"=ma09$ci.lb, "upper"=ma09$ci.ub))
# log-OR mortality
logOR.mort <- rbind("Peto" =c("OR"=ma02$b, "lower"=ma02$ci.lb, "upper"=ma02$ci.ub),
"IV-CC" =c("OR"=ma04$b, "lower"=ma04$ci.lb, "upper"=ma04$ci.ub),
"M4-UM.FS"=c("OR"=ma06$b, "lower"=ma06$ci.lb, "upper"=ma06$ci.ub),
"M5-UM.RS"=c("OR"=ma08$b, "lower"=ma08$ci.lb, "upper"=ma08$ci.ub),
"M7-CM.AL"=c("OR"=ma10$b, "lower"=ma10$ci.lb, "upper"=ma10$ci.ub))
# show ORs (infarction)
round(exp(logOR.inf), 2)
#> OR.intrcpt lower upper
#> Peto 1.43 1.03 1.98
#> IV-CC 1.29 0.94 1.76
#> M4-UM.FS 1.43 1.03 1.98
#> M5-UM.RS 1.34 0.97 1.87
#> M7-CM.AL 1.42 1.03 1.96
# show ORs (mortality)
round(exp(logOR.mort), 2)
#> OR.intrcpt lower upper
#> Peto 1.64 0.98 2.74
#> IV-CC 1.31 0.80 2.13
#> M4-UM.FS 1.66 0.97 2.84
#> M5-UM.RS 1.56 0.91 2.68
#> M7-CM.AL 1.66 0.97 2.83