Results from 9 studies on the effectiveness of antihistamines in reducing the severity of runny nose and sneezing in the common cold.

dat.dagostino1998

Format

The data frame contains the following columns:

studynumericstudy id
coldcharacternatural or induced cold study
scale.rncharacterscale for measuring runny nose severity
scale.sncharacterscale for measuring sneezing severity
drugcharactertype of antihistamine studied
tntnumerictotal sample size of the treatment group
tncnumerictotal sample size of the control (placebo) group
outcomecharacteroutcome variable (see ‘Details’)
mtnumericmean in the treatment group
sdtnumericSD in the treatment group
mcnumericmean in the control group
sdcnumericSD in the control group
xtnumericnumber of patients reaching the therapy goal in the treatment group
xcnumericnumber of patients reaching the therapy goal in the control (placebo) group
ntnumericsample size of the treatment group for measuring the outcome
ncnumericsample size of the control group for measuring the outcome

Details

The studies for this meta-analysis were assembled to examine the effectiveness of antihistamines in reducing the severity of runny nose and sneezing in the common cold. Effectiveness was measured after one and two days of treatment in terms of 4 different outcome variables:

  1. rnic1 and rnic2 (continuous): incremental change (improvement) in runny nose severity at day 1 and day 2,

  2. rngoal1 and rngoal2 (dichotomous): reaching the goal of therapy (of at least a 50% reduction in runny nose severity) at day 1 and day 2,

  3. snic1 and snic2 (continuous): incremental change (improvement) in sneezing severity at day 1 and day 2, and

  4. rngoal1 and rngoal2 (dichotomous): reaching the goal of therapy (of at least a 50% reduction in sneezing severity) at day 1 and day 2.

For the continuous outcomes, standardized mean differences can be computed to quantify the difference between the treatment and control groups. For the dichotomous outcomes, one can compute (log) odds ratios to quantify the difference between the treatment and control groups.

Source

D'Agostino, R. B., Sr., Weintraub, M., Russell, H. K., Stepanians, M., D'Agostino, R. B., Jr., Cantilena, L. R., Jr., Graumlich, J. F., Maldonado, S., Honig, P., & Anello, C. (1998). The effectiveness of antihistamines in reducing the severity of runny nose and sneezing: A meta-analysis. Clinical Pharmacology & Therapeutics, 64(6), 579–596. https://doi.org/10.1016/S0009-9236(98)90049-2

Concepts

medicine, standardized mean differences, odds ratios, multivariate models

Examples

### copy data into 'dat' and examine data
dat <- dat.dagostino1998
head(dat, 16)
#>    study    cold scale.rn scale.sn             drug tnt tnc outcome    mt   sdt    mc   sdc  xt  xc
#> 1      1 natural      0-3      0-3 chlorpheniramine 128 136   rnic1 0.932 0.593 0.810 0.556  NA  NA
#> 2      1 natural      0-3      0-3 chlorpheniramine 128 136   rnic2 1.433 0.648 1.182 0.629  NA  NA
#> 3      1 natural      0-3      0-3 chlorpheniramine 128 136 rngoal1    NA    NA    NA    NA  54  45
#> 4      1 natural      0-3      0-3 chlorpheniramine 128 136 rngoal2    NA    NA    NA    NA  99  94
#> 5      1 natural      0-3      0-3 chlorpheniramine 128 136   snic1 0.927 0.488 0.937 0.467  NA  NA
#> 6      1 natural      0-3      0-3 chlorpheniramine 128 136   snic2 1.298 0.538 1.104 0.561  NA  NA
#> 7      1 natural      0-3      0-3 chlorpheniramine 128 136 sngoal1    NA    NA    NA    NA  87  91
#> 8      1 natural      0-3      0-3 chlorpheniramine 128 136 sngoal2    NA    NA    NA    NA 112 104
#> 9      2 natural      0-3      0-3 chlorpheniramine  63  64   rnic1 0.730 0.745 0.578 0.773  NA  NA
#> 10     2 natural      0-3      0-3 chlorpheniramine  63  64   rnic2 1.145 0.903 0.891 1.041  NA  NA
#> 11     2 natural      0-3      0-3 chlorpheniramine  63  64 rngoal1    NA    NA    NA    NA  10   9
#> 12     2 natural      0-3      0-3 chlorpheniramine  63  64 rngoal2    NA    NA    NA    NA  19  19
#> 13     2 natural      0-3      0-3 chlorpheniramine  63  64   snic1 0.540 0.800 0.297 0.634  NA  NA
#> 14     2 natural      0-3      0-3 chlorpheniramine  63  64   snic2 0.710 0.876 0.469 0.712  NA  NA
#> 15     2 natural      0-3      0-3 chlorpheniramine  63  64 sngoal1    NA    NA    NA    NA  16  12
#> 16     2 natural      0-3      0-3 chlorpheniramine  63  64 sngoal2    NA    NA    NA    NA  25  20
#>     nt  nc
#> 1  128 136
#> 2  128 133
#> 3  128 136
#> 4  128 136
#> 5  118 116
#> 6  118 118
#> 7  118 118
#> 8  118 118
#> 9   63  64
#> 10  62  64
#> 11  63  64
#> 12  62  64
#> 13  63  64
#> 14  62  64
#> 15  50  49
#> 16  49  49

### load metafor package
library(metafor)

### compute standardized mean differences and corresponding sampling variances
dat <- escalc(measure="SMD", m1i=mt, m2i=mc, sd1i=sdt, sd2i=sdc, n1i=nt, n2i=nc, data=dat,
              add.measure=TRUE)

### compute log odds ratios and corresponding sampling variances
dat <- escalc(measure="OR",  ai=xt, ci=xc, n1i=nt, n2i=nc, data=dat,
              replace=FALSE, add.measure=TRUE, add=1/2, to="all")

### inspect data for the first study
head(dat, 8)
#> 
#>   study    cold scale.rn scale.sn             drug tnt tnc outcome    mt   sdt    mc   sdc  xt  xc 
#> 1     1 natural      0-3      0-3 chlorpheniramine 128 136   rnic1 0.932 0.593 0.810 0.556  NA  NA 
#> 2     1 natural      0-3      0-3 chlorpheniramine 128 136   rnic2 1.433 0.648 1.182 0.629  NA  NA 
#> 3     1 natural      0-3      0-3 chlorpheniramine 128 136 rngoal1    NA    NA    NA    NA  54  45 
#> 4     1 natural      0-3      0-3 chlorpheniramine 128 136 rngoal2    NA    NA    NA    NA  99  94 
#> 5     1 natural      0-3      0-3 chlorpheniramine 128 136   snic1 0.927 0.488 0.937 0.467  NA  NA 
#> 6     1 natural      0-3      0-3 chlorpheniramine 128 136   snic2 1.298 0.538 1.104 0.561  NA  NA 
#> 7     1 natural      0-3      0-3 chlorpheniramine 128 136 sngoal1    NA    NA    NA    NA  87  91 
#> 8     1 natural      0-3      0-3 chlorpheniramine 128 136 sngoal2    NA    NA    NA    NA 112 104 
#>    nt  nc      yi     vi measure 
#> 1 128 136  0.2118 0.0153     SMD 
#> 2 128 133  0.3920 0.0156     SMD 
#> 3 128 136  0.3860 0.0647      OR 
#> 4 128 136  0.4167 0.0781      OR 
#> 5 118 116 -0.0209 0.0171     SMD 
#> 6 118 118  0.3518 0.0172     SMD 
#> 7 118 118 -0.1805 0.0905      OR 
#> 8 118 118  0.8761 0.2413      OR 
#> 

### fit a random-effects model for incremental change in runny nose severity at day 1
res <- rma(yi, vi, data=dat, subset=outcome=="rnic1")
res
#> 
#> Random-Effects Model (k = 9; tau^2 estimator: REML)
#> 
#> tau^2 (estimated amount of total heterogeneity): 0.0000 (SE = 0.0147)
#> tau (square root of estimated tau^2 value):      0.0023
#> I^2 (total heterogeneity / total variability):   0.01%
#> H^2 (total variability / sampling variability):  1.00
#> 
#> Test for Heterogeneity:
#> Q(df = 8) = 9.5056, p-val = 0.3015
#> 
#> Model Results:
#> 
#> estimate      se    zval    pval   ci.lb   ci.ub      
#>   0.2325  0.0630  3.6919  0.0002  0.1091  0.3559  *** 
#> 
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 

### fit a random-effects model for reaching the goal of therapy for runny nose severity at day 1
res <- rma(yi, vi, data=dat, subset=outcome=="rngoal1")
res
#> 
#> Random-Effects Model (k = 9; tau^2 estimator: REML)
#> 
#> tau^2 (estimated amount of total heterogeneity): 0.0000 (SE = 0.0829)
#> tau (square root of estimated tau^2 value):      0.0008
#> I^2 (total heterogeneity / total variability):   0.00%
#> H^2 (total variability / sampling variability):  1.00
#> 
#> Test for Heterogeneity:
#> Q(df = 8) = 10.8895, p-val = 0.2080
#> 
#> Model Results:
#> 
#> estimate      se    zval    pval   ci.lb   ci.ub      
#>   0.5313  0.1530  3.4726  0.0005  0.2314  0.8312  *** 
#> 
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
predict(res, transf=exp)
#> 
#>    pred  ci.lb  ci.ub  pi.lb  pi.ub 
#>  1.7012 1.2604 2.2961 1.2604 2.2961 
#> 

### construct approximate V matrix assuming a correlation of 0.7 for sampling errors within studies
dat$esid <- ave(dat$study, dat$study, FUN=seq)
V <- vcalc(vi, cluster=study, obs=esid, rho=0.7, data=dat)

### fit a model for incremental change in runny nose severity at day 1 and at day 2, allowing for
### correlated sampling errors (no random effects added, since there does not appear to be any
### noteworthy heterogeneity in these data)
res <- rma.mv(yi, V, mods = ~ outcome - 1, data=dat, subset=outcome %in% c("rnic1","rnic2"))
#> Warning: Redundant predictors dropped from the model.
res
#> 
#> Multivariate Meta-Analysis Model (k = 18; method: REML)
#> 
#> Variance Components: none
#> 
#> Test for Residual Heterogeneity:
#> QE(df = 16) = 15.6883, p-val = 0.4749
#> 
#> Test of Moderators (coefficients 1:2):
#> QM(df = 2) = 17.4520, p-val = 0.0002
#> 
#> Model Results:
#> 
#>               estimate      se    zval    pval   ci.lb   ci.ub      
#> outcomernic1    0.2315  0.0630  3.6773  0.0002  0.1081  0.3549  *** 
#> outcomernic2    0.2528  0.0634  3.9896  <.0001  0.1286  0.3769  *** 
#> 
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 

### test if there is a difference in effects at day 1 and day 2
anova(res, X=c(1,-1))
#> 
#> Hypothesis:                                   
#> 1: outcomernic1 - outcomernic2 = 0 
#> 
#> Results:
#>    estimate     se    zval   pval 
#> 1:  -0.0212 0.0489 -0.4342 0.6642 
#> 
#> Test of Hypothesis:
#> QM(df = 1) = 0.1885, p-val = 0.6642
#>