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```
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.