IntHout 2014 - Converting DL Results to HKSJ Worked Examples
Summary
Given only a published DL forest plot (effect sizes and DL weights , e.g. in percent), you can recompute a HKSJ interval and -value by hand: form , divide by , take the square root for the SE, and use a quantile. For a zinc/common-cold review (, ) this turns DL into HKSJ ; for a log-hazard-ratio example (, ) the results barely change.
Overview
The conversion applies to continuous outcomes and to log-transformed ratio outcomes (RR, OR, HR, Poisson rate). An Excel file (Additional file 1) and R code (Appendix 3) are provided. Only three columns are needed: study ID, study result and DL weight .
Main Content
Recipe
Post-hoc HKSJ procedure (Examples 1-2)
- SE. (a) With overall DL estimate , compute for each study. (b) Sum them and divide by . (c) Divide by . This is the HKSJ variance of the pooled effect. (d) Square root = SE. (For ratio outcomes, work on the natural-log scale: , .)
- CI. Half-width = SE (Excel
TINV(0.05,k-1), SPSSIDF.T(.975,k-1), SAStinv(.975,k-1)); CI = half-width (exponentiate for ratios).- -value. ; two-sided from (Excel
TDIST(|t|,k-1,2); SPSS2*(1-CDF.T(|t|,k-1)); SAScdf('T',t,k-1)).
Example 1: continuous outcome (zinc for the common cold)
Cochrane review (Singh and Das 2011), outcome severity of cold symptoms, 513 participants, SMD. DL: 5 studies, , .
| Study | (SMD) | (DL) | ||
|---|---|---|---|---|
| Kurugol 2006a | -0.04 | 24.0 | 0.1225 | 2.94 |
| Kurugol 2007 | -0.07 | 22.2 | 0.1024 | 2.27 |
| Petrus 1998 | -0.31 | 21.3 | 0.0064 | 0.14 |
| Prasad 2000 | -1.36 | 15.5 | 0.9409 | 14.58 |
| Prasad 2008 | -0.54 | 17.0 | 0.0225 | 0.38 |
| Sum 100.0 | Sum 20.31 |
Steps: ; ; SE ; ; half-width ; CI ; ; two-sided .
| Method | Estimate | 95% CI | Test |
|---|---|---|---|
| DL | SMD -0.39 | [-0.77, -0.02] | , |
| HKSJ | SMD -0.39 | [-1.02, 0.24] | , df 4, |
“The results of the DL and HKSJ analyses differ substantially”: significance disappears.
R (metafor), Appendix 3: y <- c(-0.04,-0.07,-0.31,-1.36,-0.54); w <- c(24.0,22.2,21.3,15.5,17.0); rma.uni(y, vi=1/w, method="FE", knha=TRUE). The DL weights are supplied as fixed-effect weights with knha=TRUE, so that the HKSJ adjustment is applied to random-effects weights; the resulting warnings (“HKSJ not meant to be used with fixed effects”) can be ignored. Output (Table 5): estimate -0.3938, SE 0.2254, , , CI (the hand calculation rounds to 1.73 and 0.16).
Example 2: log-transformed outcome (hazard ratio, post-remission therapy for adult ALL, donor vs no donor)
Cochrane review (Pidala et al. 2011). DL: 10 studies, , . DL pooled HR 0.86 [0.77, 0.97], , .
| Study | HR | ||||
|---|---|---|---|---|---|
| Cornelissen 2009 | 0.81 | 5.0 | -0.21 | 0.00 | 0.02 |
| De Witte 1994 | 0.67 | 2.1 | -0.40 | 0.06 | 0.13 |
| Fielding 2009 | 0.80 | 11.5 | -0.22 | 0.01 | 0.06 |
| Goldstone 2008 | 0.91 | 46.7 | -0.09 | 0.00 | 0.15 |
| Hunault 2004 | 0.56 | 2.9 | -0.58 | 0.18 | 0.53 |
| Labar 2004 | 0.98 | 9.3 | -0.02 | 0.02 | 0.16 |
| Ribera 2005 | 1.24 | 3.9 | 0.22 | 0.13 | 0.52 |
| Sebban 1994 | 0.75 | 12.7 | -0.29 | 0.02 | 0.24 |
| Takeuchi 2002 | 0.95 | 3.9 | -0.05 | 0.01 | 0.04 |
| Ueda 1998 | 0.66 | 2.0 | -0.42 | 0.07 | 0.14 |
| () | Sum 100.0 | Sum 1.99 |
Steps: ; ; SE ; ; half-width on ln scale ; ln CI ; HR CI ; ; .
| Method | HR | 95% CI | Test |
|---|---|---|---|
| DL | 0.86 | [0.77, 0.97] | , |
| HKSJ (hand) | 0.86 | [0.77, 0.96] | , df 9, |
| HKSJ (R, Table 6) | 0.8643 | [0.7772, 0.9613] | ln estimate -0.1458, SE 0.0470, , |
“The results of the DL and HKSJ analyses hardly differ”, consistent with homogeneity (). The small hand-versus-R gap ( vs ) comes from intermediate rounding of .
Why HKSJ can be narrower than DL here (computed, not in the paper)
The DL SE implied by the DL statistics is (also from the DL CI: ). The HKSJ SE is , so : with the observed spread is smaller than the weights predict, so the HKSJ variance is smaller than the DL one. The larger quantile (2.26 vs 1.96) roughly cancels this: half-width vs on the log scale.
Examples
Independent Python reproduction
Both examples reproduce exactly: Example 1 gives , SE 0.22536, , , CI , and weighted sum 20.31; Example 2 gives ln estimate -0.14580, SE 0.046985, , , HR 0.8643 [0.7772, 0.9613].
import numpy as np
from scipy import stats
def hksj_from_dl(y, w, log_scale=False):
y = np.log(y) if log_scale else np.asarray(y); w = np.asarray(w); k = len(y)
yb = (w*y).sum()/w.sum(); var = (w*(y-yb)**2).sum()/((k-1)*w.sum()); se = var**.5
tq = stats.t.ppf(.975, k-1); t = yb/se; p = 2*stats.t.sf(abs(t), k-1)
ci = (yb-tq*se, yb+tq*se)
return (np.exp(yb), np.exp(ci[0]), np.exp(ci[1]), t, p) if log_scale else (yb, *ci, t, p)
hksj_from_dl([-0.04,-0.07,-0.31,-1.36,-0.54], [24.0,22.2,21.3,15.5,17.0]) # (-0.394, -1.019, 0.232, -1.747, 0.1555)
hksj_from_dl([.81,.67,.80,.91,.56,.98,1.24,.75,.95,.66], [5.0,2.1,11.5,46.7,2.9,9.3,3.9,12.7,3.9,2.0], log_scale=True)Connections
- Marketing: when a vendor deck gives only a forest plot of per-test lift estimates and percent weights, this recipe lets an analyst recompute a -based interval without the raw data. Caveat: the weights must be the random-effects weights from the vendor’s analysis.
- Same machinery as
knha=TRUE(Viechtbauer 2010 - Fitting Models with rma, Moderators and Knapp-Hartung).