rconfidence-interval

Why I am getting different 95% confidence interval for some studies in meta-analysis in "meta" package in r?


I am trying to do a meta-analysis using hazard ratio, lower and upper 95% confidence interval but for example CARDIa study, obtained upper and lower 95%CI ([2.1560; 9.9858]) were different than the original values (1.33-6.16) and I do not know how to get the exact numbers.

Used code:

library(meta);library(metafor)

data<-read.table(text="studlab  HR  LCI UCI
Blazek  1.78    0.84    3.76
PRECOMBAT   1.20    0.37    3.93
LE.MANS 1.14    0.3 4.25
NOBLE   2.99    1.66    5.39
MASS-II 2.90    1.39    6.01
CARDIa  4.64    1.33    6.16
BEST    2.75    1.16    6.54
", header=T, sep="")

metagen(log(HR), lower = log(LCI), upper = log(UCI),
        studlab = studlab,data=data, sm = "HR")

Obtained results

             HR           95%-CI   %W(fixed) %W(random)
Blazek    1.7800 [0.8413; 3.7659]      16.4       16.5
PRECOMBAT 1.2000 [0.3682; 3.9109]       6.6        7.1
LE.MANS   1.1400 [0.3029; 4.2908]       5.2        5.7
NOBLE     2.9900 [1.6593; 5.3878]      26.6       25.0
MASS-II   2.9000 [1.3947; 6.0301]      17.2       17.2
CARDIa    4.6400 [2.1560; 9.9858]      15.7       15.8
BEST      2.7500 [1.1582; 6.5297]      12.3       12.7

Number of studies combined: k = 7

                         HR           95%-CI    z  p-value
Fixed effect model   2.5928 [1.9141; 3.5122] 6.15 < 0.0001
Random effects model 2.5695 [1.8611; 3.5477] 5.73 < 0.0001

Quantifying heterogeneity:
 tau^2 = 0.0181 [0.0000; 0.9384]; tau = 0.1347 [0.0000; 0.9687];
 I^2 = 9.4% [0.0%; 73.6%]; H = 1.05 [1.00; 1.94]

Test of heterogeneity:
    Q d.f. p-value
 6.63    6  0.3569

Details on meta-analytical method:
- Inverse variance method
- DerSimonian-Laird estimator for tau^2
- Jackson method for confidence interval of tau^2 and tau```


Solution

  • The CI output matches the original CI to 2 decimal places in all studies except for CARDIa, which I think has been incorrectly entered (forgive me if I'm wrong but I can't see any other explanation).

    You can see this by calculating the standard errors manually and then recalculating the confidence intervals, much like the metagen function does.

    library(meta)
    
    se <- meta:::TE.seTE.ci(log(data$LCI), log(data$UCI))$seTE; se
    #[1] 0.3823469 0.6027896 0.6762603 0.3004463 0.3735071 0.3910526 0.4412115
    
    data$lower <- round(exp(ci(TE=log(data$HR), seTE=se)$lower), 3)
    data$upper <- round(exp(ci(TE=log(data$HR), seTE=se)$upper), 3)
    
    data
        studlab   HR  LCI  UCI lower upper
    1    Blazek 1.78 0.84 3.76 0.841 3.766  # 
    2 PRECOMBAT 1.20 0.37 3.93 0.368 3.911  # 
    3   LE.MANS 1.14 0.30 4.25 0.303 4.291  # 
    4     NOBLE 2.99 1.66 5.39 1.659 5.388  # 
    5   MASS-II 2.90 1.39 6.01 1.395 6.030  # 
    6    CARDIa 4.64 1.33 6.16 2.156 9.986  # <- this one is incorrect. 
    7      BEST 2.75 1.16 6.54 1.158 6.530  # 
    

    The correct 95% CI for CARDIa should be around (2.16 - 9.99). I would verify that you have typed the values correctly.