Results from 26 trials examining the effectiveness of beta-blockers and sclerotherapy for the prevention of first bleeding in patients with cirrhosis

dat.pagliaro1992

Format

The data frame contains the following columns:

studynumericstudy id
trtcharactereither beta-blockers, sclerotherapy, or control
xinumericnumber of patients with first bleeding
ninumericnumber of patients treated

Details

The dataset includes the results from 26 randomized controlled trials examining the effectiveness of nonsurgical treatments for the prevention of first bleeding in patients with cirrhosis. Patients were either treated with beta-blockers, endoscopic sclerotherapy, or with a nonactive treatment (control). Two trials included all three treatment conditions, 7 trials compared beta-blockers against control, and 17 trials compared sclerotherapy against control. The dataset has been used in various papers to illustrate methods for conducting a network meta-analysis / mixed treatment comparison.

Source

Pagliaro, L., D'Amico, G., Sörensen, T. I. A., Lebrec, D., Burroughs, A. K., Morabito, A., Tiné, F., Politi, F., & Traina, M. (1992). Prevention of first bleeding in cirrhosis: A meta-analysis of randomized trials of nonsurgical treatment. Annals of Internal Medicine, 117(1), 59–70. https://doi.org/10.7326/0003-4819-117-1-59

Concepts

medicine, odds ratios, Mantel-Haenszel method, network meta-analysis

Examples

### copy data into 'dat' and examine data
dat <- dat.pagliaro1992
dat
#>    study           trt xi  ni
#> 1      1 beta-blockers  2  43
#> 2      1 sclerotherapy  9  42
#> 3      1       control 13  41
#> 4      2 beta-blockers 12  68
#> 5      2 sclerotherapy 13  73
#> 6      2       control 13  72
#> 7      3 beta-blockers  4  20
#> 8      3       control  4  16
#> 9      4 beta-blockers 20 116
#> 10     4       control 30 111
#> 11     5 beta-blockers  1  30
#> 12     5       control 11  49
#> 13     6 beta-blockers  7  53
#> 14     6       control 10  53
#> 15     7 beta-blockers 18  85
#> 16     7       control 31  89
#> 17     8 beta-blockers  2  51
#> 18     8       control 11  51
#> 19     9 beta-blockers  8  23
#> 20     9       control  2  25
#> 21    10 sclerotherapy  4  18
#> 22    10       control  0  19
#> 23    11 sclerotherapy  3  35
#> 24    11       control 22  36
#> 25    12 sclerotherapy  5  56
#> 26    12       control 30  53
#> 27    13 sclerotherapy  5  16
#> 28    13       control  6  18
#> 29    14 sclerotherapy  3  23
#> 30    14       control  9  22
#> 31    15 sclerotherapy 11  49
#> 32    15       control 31  46
#> 33    16 sclerotherapy 19  53
#> 34    16       control  9  60
#> 35    17 sclerotherapy 17  53
#> 36    17       control 26  60
#> 37    18 sclerotherapy 10  71
#> 38    18       control 29  69
#> 39    19 sclerotherapy 12  41
#> 40    19       control 14  41
#> 41    20 sclerotherapy  0  21
#> 42    20       control  3  20
#> 43    21 sclerotherapy 13  33
#> 44    21       control 14  35
#> 45    22 sclerotherapy 31 143
#> 46    22       control 23 138
#> 47    23 sclerotherapy 20  55
#> 48    23       control 19  51
#> 49    24 sclerotherapy  3  13
#> 50    24       control 12  16
#> 51    25 sclerotherapy  3  21
#> 52    25       control  5  28
#> 53    26 sclerotherapy  6  22
#> 54    26       control  2  24

### load metafor package
library(metafor)

### restructure dataset to a contrast-based format
dat.c <- to.wide(dat, study="study", grp="trt", grpvars=3:4)
dat.c
#>    study         trt.1 xi.1 ni.1   trt.2 xi.2 ni.2 id  comp   design
#> 1      1 beta-blockers    2   43 control   13   41  1 be-co be-sc-co
#> 2      1 sclerotherapy    9   42 control   13   41  2 sc-co be-sc-co
#> 3      2 beta-blockers   12   68 control   13   72  3 be-co be-sc-co
#> 4      2 sclerotherapy   13   73 control   13   72  4 sc-co be-sc-co
#> 5      3 beta-blockers    4   20 control    4   16  5 be-co    be-co
#> 6      4 beta-blockers   20  116 control   30  111  6 be-co    be-co
#> 7      5 beta-blockers    1   30 control   11   49  7 be-co    be-co
#> 8      6 beta-blockers    7   53 control   10   53  8 be-co    be-co
#> 9      7 beta-blockers   18   85 control   31   89  9 be-co    be-co
#> 10     8 beta-blockers    2   51 control   11   51 10 be-co    be-co
#> 11     9 beta-blockers    8   23 control    2   25 11 be-co    be-co
#> 12    10 sclerotherapy    4   18 control    0   19 12 sc-co    sc-co
#> 13    11 sclerotherapy    3   35 control   22   36 13 sc-co    sc-co
#> 14    12 sclerotherapy    5   56 control   30   53 14 sc-co    sc-co
#> 15    13 sclerotherapy    5   16 control    6   18 15 sc-co    sc-co
#> 16    14 sclerotherapy    3   23 control    9   22 16 sc-co    sc-co
#> 17    15 sclerotherapy   11   49 control   31   46 17 sc-co    sc-co
#> 18    16 sclerotherapy   19   53 control    9   60 18 sc-co    sc-co
#> 19    17 sclerotherapy   17   53 control   26   60 19 sc-co    sc-co
#> 20    18 sclerotherapy   10   71 control   29   69 20 sc-co    sc-co
#> 21    19 sclerotherapy   12   41 control   14   41 21 sc-co    sc-co
#> 22    20 sclerotherapy    0   21 control    3   20 22 sc-co    sc-co
#> 23    21 sclerotherapy   13   33 control   14   35 23 sc-co    sc-co
#> 24    22 sclerotherapy   31  143 control   23  138 24 sc-co    sc-co
#> 25    23 sclerotherapy   20   55 control   19   51 25 sc-co    sc-co
#> 26    24 sclerotherapy    3   13 control   12   16 26 sc-co    sc-co
#> 27    25 sclerotherapy    3   21 control    5   28 27 sc-co    sc-co
#> 28    26 sclerotherapy    6   22 control    2   24 28 sc-co    sc-co

### Mantel-Haenszel results for beta-blockers and sclerotherapy versus control, respectively
rma.mh(measure="OR", ai=xi.1, n1i=ni.1, ci=xi.2, n2i=ni.2,
       data=dat.c, subset=(trt.1=="beta-blockers"), digits=2)
#> 
#> Equal-Effects Model (k = 9)
#> 
#> I^2 (total heterogeneity / total variability):  57.85%
#> H^2 (total variability / sampling variability): 2.37
#> 
#> Test for Heterogeneity: 
#> Q(df = 8) = 18.98, p-val = 0.01
#> 
#> Model Results (log scale):
#> 
#> estimate    se   zval  pval  ci.lb  ci.ub 
#>    -0.62  0.16  -3.78  <.01  -0.94  -0.30 
#> 
#> Model Results (OR scale):
#> 
#> estimate  ci.lb  ci.ub 
#>     0.54   0.39   0.74 
#> 
#> Cochran-Mantel-Haenszel Test:    CMH = 14.14, df = 1, p-val < 0.01
#> Tarone's Test for Heterogeneity: X^2 = 22.76, df = 8, p-val < 0.01
#> 
rma.mh(measure="OR", ai=xi.1, n1i=ni.1, ci=xi.2, n2i=ni.2,
       data=dat.c, subset=(trt.1=="sclerotherapy"), digits=2)
#> 
#> Equal-Effects Model (k = 19)
#> 
#> I^2 (total heterogeneity / total variability):  77.94%
#> H^2 (total variability / sampling variability): 4.53
#> 
#> Test for Heterogeneity: 
#> Q(df = 18) = 81.60, p-val < .01
#> 
#> Model Results (log scale):
#> 
#> estimate    se   zval  pval  ci.lb  ci.ub 
#>    -0.53  0.11  -4.84  <.01  -0.74  -0.31 
#> 
#> Model Results (OR scale):
#> 
#> estimate  ci.lb  ci.ub 
#>     0.59   0.48   0.73 
#> 
#> Cochran-Mantel-Haenszel Test:    CMH = 24.20, df = 1,  p-val < 0.01
#> Tarone's Test for Heterogeneity: X^2 = 94.46, df = 18, p-val < 0.01
#> 

### calculate log odds for each study arm
dat <- escalc(measure="PLO", xi=xi, ni=ni, data=dat)
dat
#> 
#>    study           trt xi  ni      yi     vi 
#> 1      1 beta-blockers  2  43 -3.0204 0.5244 
#> 2      1 sclerotherapy  9  42 -1.2993 0.1414 
#> 3      1       control 13  41 -0.7673 0.1126 
#> 4      2 beta-blockers 12  68 -1.5404 0.1012 
#> 5      2 sclerotherapy 13  73 -1.5294 0.0936 
#> 6      2       control 13  72 -1.5126 0.0939 
#> 7      3 beta-blockers  4  20 -1.3863 0.3125 
#> 8      3       control  4  16 -1.0986 0.3333 
#> 9      4 beta-blockers 20 116 -1.5686 0.0604 
#> 10     4       control 30 111 -0.9933 0.0457 
#> 11     5 beta-blockers  1  30 -3.3673 1.0345 
#> 12     5       control 11  49 -1.2397 0.1172 
#> 13     6 beta-blockers  7  53 -1.8827 0.1646 
#> 14     6       control 10  53 -1.4586 0.1233 
#> 15     7 beta-blockers 18  85 -1.3143 0.0705 
#> 16     7       control 31  89 -0.6265 0.0495 
#> 17     8 beta-blockers  2  51 -3.1987 0.5204 
#> 18     8       control 11  51 -1.2910 0.1159 
#> 19     9 beta-blockers  8  23 -0.6286 0.1917 
#> 20     9       control  2  25 -2.4423 0.5435 
#> 21    10 sclerotherapy  4  18 -1.2528 0.3214 
#> 22    10       control  0  19 -3.6636 2.0513 
#> 23    11 sclerotherapy  3  35 -2.3671 0.3646 
#> 24    11       control 22  36  0.4520 0.1169 
#> 25    12 sclerotherapy  5  56 -2.3224 0.2196 
#> 26    12       control 30  53  0.2657 0.0768 
#> 27    13 sclerotherapy  5  16 -0.7885 0.2909 
#> 28    13       control  6  18 -0.6931 0.2500 
#> 29    14 sclerotherapy  3  23 -1.8971 0.3833 
#> 30    14       control  9  22 -0.3677 0.1880 
#> 31    15 sclerotherapy 11  49 -1.2397 0.1172 
#> 32    15       control 31  46  0.7259 0.0989 
#> 33    16 sclerotherapy 19  53 -0.5819 0.0820 
#> 34    16       control  9  60 -1.7346 0.1307 
#> 35    17 sclerotherapy 17  53 -0.7503 0.0866 
#> 36    17       control 26  60 -0.2683 0.0679 
#> 37    18 sclerotherapy 10  71 -1.8083 0.1164 
#> 38    18       control 29  69 -0.3216 0.0595 
#> 39    19 sclerotherapy 12  41 -0.8824 0.1178 
#> 40    19       control 14  41 -0.6568 0.1085 
#> 41    20 sclerotherapy  0  21 -3.7612 2.0465 
#> 42    20       control  3  20 -1.7346 0.3922 
#> 43    21 sclerotherapy 13  33 -0.4308 0.1269 
#> 44    21       control 14  35 -0.4055 0.1190 
#> 45    22 sclerotherapy 31 143 -1.2845 0.0412 
#> 46    22       control 23 138 -1.6094 0.0522 
#> 47    23 sclerotherapy 20  55 -0.5596 0.0786 
#> 48    23       control 19  51 -0.5213 0.0839 
#> 49    24 sclerotherapy  3  13 -1.2040 0.4333 
#> 50    24       control 12  16  1.0986 0.3333 
#> 51    25 sclerotherapy  3  21 -1.7918 0.3889 
#> 52    25       control  5  28 -1.5261 0.2435 
#> 53    26 sclerotherapy  6  22 -0.9808 0.2292 
#> 54    26       control  2  24 -2.3979 0.5455 
#> 

### turn treatment variable into factor and set reference level
dat$trt <- relevel(factor(dat$trt), ref="control")

### add a space before each level (this makes the output a bit more legible)
levels(dat$trt) <- paste0(" ", levels(dat$trt))

### network meta-analysis using an arm-based random-effects model with fixed study effects
### (by setting rho=1/2, tau^2 reflects the amount of heterogeneity for all treatment comparisons)
res <- rma.mv(yi, vi, mods = ~ factor(study) + trt - 1, random = ~ trt | study, rho=1/2, data=dat)
res
#> 
#> Multivariate Meta-Analysis Model (k = 54; method: REML)
#> 
#> Variance Components:
#> 
#> outer factor: study (nlvls = 26)
#> inner factor: trt   (nlvls = 3)
#> 
#>             estim    sqrt  fixed 
#> tau^2      0.9913  0.9957     no 
#> rho        0.5000            yes 
#> 
#> Test for Residual Heterogeneity:
#> QE(df = 26) = 99.3092, p-val < .0001
#> 
#> Test of Moderators (coefficients 1:28):
#> QM(df = 28) = 56.4980, p-val = 0.0011
#> 
#> Model Results:
#> 
#>                    estimate      se     zval    pval    ci.lb    ci.ub    
#> factor(study)1      -1.1071  0.8684  -1.2748  0.2024  -2.8091   0.5950    
#> factor(study)2      -1.0951  0.8483  -1.2910  0.1967  -2.7577   0.5675    
#> factor(study)3      -0.8816  0.9712  -0.9077  0.3641  -2.7851   1.0220    
#> factor(study)4      -0.9237  0.8980  -1.0286  0.3037  -2.6838   0.8364    
#> factor(study)5      -1.6433  0.9724  -1.6900  0.0910  -3.5491   0.2625  . 
#> factor(study)6      -1.3172  0.9221  -1.4286  0.1531  -3.1244   0.4900    
#> factor(study)7      -0.6125  0.8997  -0.6808  0.4960  -2.3758   1.1509    
#> factor(study)8      -1.7386  0.9479  -1.8341  0.0666  -3.5966   0.1193  . 
#> factor(study)9      -0.9195  0.9816  -0.9367  0.3489  -2.8435   1.0045    
#> factor(study)10     -1.3962  1.0750  -1.2988  0.1940  -3.5032   0.7107    
#> factor(study)11     -0.4776  0.9305  -0.5133  0.6077  -2.3015   1.3462    
#> factor(study)12     -0.6253  0.9099  -0.6872  0.4920  -2.4086   1.1581    
#> factor(study)13     -0.4554  0.9463  -0.4812  0.6304  -2.3101   1.3994    
#> factor(study)14     -0.7814  0.9455  -0.8264  0.4086  -2.6346   1.0718    
#> factor(study)15      0.0456  0.9027   0.0505  0.9597  -1.7238   1.8149    
#> factor(study)16     -0.8312  0.9032  -0.9203  0.3574  -2.6014   0.9390    
#> factor(study)17     -0.2181  0.8941  -0.2440  0.8072  -1.9706   1.5343    
#> factor(study)18     -0.7510  0.8961  -0.8380  0.4020  -2.5074   1.0055    
#> factor(study)19     -0.4790  0.9043  -0.5297  0.5963  -2.2514   1.2934    
#> factor(study)20     -2.1080  1.0763  -1.9585  0.0502  -4.2176   0.0016  . 
#> factor(study)21     -0.1279  0.9071  -0.1410  0.8878  -1.9057   1.6499    
#> factor(study)22     -1.1504  0.8861  -1.2983  0.1942  -2.8871   0.5863    
#> factor(study)23     -0.2472  0.8957  -0.2760  0.7825  -2.0028   1.5083    
#> factor(study)24      0.2882  0.9746   0.2957  0.7675  -1.6219   2.1983    
#> factor(study)25     -1.3812  0.9557  -1.4453  0.1484  -3.2542   0.4919    
#> factor(study)26     -1.2182  0.9737  -1.2511  0.2109  -3.1266   0.6902    
#> trt beta-blockers   -0.7163  0.3871  -1.8508  0.0642  -1.4750   0.0423  . 
#> trt sclerotherapy   -0.5839  0.2684  -2.1753  0.0296  -1.1101  -0.0578  * 
#> 
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 

### average odds ratio comparing beta-blockers and sclerotherapy versus control, respectively
predict(res, newmods=c(rep(0,26), 1, 0), transf=exp, digits=2)
#> 
#>  pred ci.lb ci.ub pi.lb pi.ub 
#>  0.49  0.23  1.04  0.06  3.96 
#> 
predict(res, newmods=c(rep(0,26), 0, 1), transf=exp, digits=2)
#> 
#>  pred ci.lb ci.ub pi.lb pi.ub 
#>  0.56  0.33  0.94  0.07  4.21 
#> 

### average odds ratio comparing beta-blockers versus sclerotherapy
predict(res, newmods=c(rep(0,26), 1, -1), transf=exp, digits=2)
#> 
#>  pred ci.lb ci.ub pi.lb pi.ub 
#>  0.88  0.36  2.11  0.10  7.45 
#>