Performs a meta-analysis of diagnostic tests using approaches described in Reitsma et al. (2005) and Chu and Cole (2006).
meta.dt(tp, fp, fn, tn, data, method = "biv.glmm", alpha = 0.05, ...)
This function returns a list of the meta-analysis results. When method
= "s.roc"
, the list consists of the regression intercept (inter.unwtd
), slope (slope.unwtd
), their variance-covariance matrix (vcov.unwtd
), DOR at mean of \(S_i\) (DOR.meanS.unwtd
) with its confidence interval (DOR.meanS.unwtd.ci
), Q point (Q.unwtd
) with its confidence interval (Q.unwtd.ci
), and AUC (AUC.unwtd
) for the unweighted regression; it also consists of the counterparts for the weighted regression. When method
= "biv.lmm"
or "biv.glmm"
, the list consists of the overall sensitivity (sens.overall
) with its confidence interval (sens.overall.ci
), overall specificity (spec.overall
) with its confidence interval (spec.overall.ci
), overall DOR (DOR.overall
) with its confidence interval (DOR.overall.ci
), AUC (AUC
), estimated \(\mu_{Se}\) (mu.sens
), \(\mu_{Sp}\) (mu.spec
), their variance-covariance matrix (mu.vcov
), estimated \(\sigma_{Se}\) (sig.sens
), \(\sigma_{Sp}\) (sig.spec
), and \(\rho\) (rho
). In addition, the list includes the method used to perform the meta-analysis of diagnostic tests (method
), significance level (alpha
), and original data (data
).
counts of true positives.
counts of false positives.
counts of false negatives.
counts of true negatives.
an optional data frame containing the meta-analysis dataset. If data
is specified, the previous arguments, tp
, fp
, fn
, and tn
, should be specified as their corresponding column names in data
.
a character string specifying the method used to implement the meta-analysis of diagnostic tests. It should be one of "s.roc"
(summary ROC approach), "biv.lmm"
(bivariate linear mixed model), and "biv.glmm"
(bivariate generalized linear mixed model, the default). See details.
a numeric value specifying the statistical significance level.
other arguments that can be passed to the function lm
(when method
= "s.roc"
), the function rma.mv
in the package metafor (when method
= "biv.lmm"
), or the function glmer
in the package lme4 (when method
= "biv.glmm"
).
Lifeng Lin, Kristine J. Rosenberger
Suppose a meta-analysis of diagnostic tests contains \(N\) studies. Each study reports the counts of true positives, false positives, false negatives, and true negatives, denoted by \(TP_i\), \(FP_i\), \(FN_i\), and \(TN_i\), respectively. The study-specific estimates of sensitivity and specificity are calculated as \(Se_i = TP_i/(TP_i + FN_i)\) and \(Sp_i = TN_i/(FP_i + TN_i)\) for \(i = 1, \cdots, N\). They are analyzed on the logarithmic scale in the meta-analysis. When using the summary ROC (receiver operating characteristic) approach or the bivariate linear mixed model, 0.5 needs to be added to all four counts in a study when at least one count is zero.
The summary ROC approach first calculates $$D_i = \log \left( \frac{Se_i}{1 - Se_i} \right) + \log \left( \frac{Sp_i}{1 - Sp_i} \right);$$ $$S_i = \log \left( \frac{Se_i}{1 - Se_i} \right) - \log \left( \frac{Sp_i}{1 - Sp_i} \right),$$ where \(D_i\) represents the log diagnostic odds ratio (DOR) in study \(i\). A linear regression is then fitted: $$D_i = \alpha + \beta \cdot S_i.$$ The regression could be either unweighted or weighted; this function performs both versions. If weighted, the study-specific weights are the inverse of the variances of \(D_i\), i.e., \(1/TP_i + 1/FP_i + 1/FN_i + 1/TN_i\). Based on the estimated regression intercept \(\hat{\alpha}\) and slope \(\hat{\beta}\), one may obtain the DOR at mean of \(S_i\), Q point, summary ROC curve, and area under the curve (AUC). The Q point is the point on the summary ROC curve where sensitivity and specificity are equal. The ROC curve is given by $$Se = \left\{ 1 + e^{-\hat{\alpha}/(1 - \hat{\beta})} \cdot [Sp/(1 - Sp)]^{(1 + \hat{\beta})/(1 - \hat{\beta})} \right\}^{-1}.$$ See more details of the summary ROC approach in Moses et al. (1993) and Irwig et al. (1995).
The bivariate linear mixed model described in Reitsma et al. (2005) assumes that the logit sensitivity and logit specificity independently follow normal distributions within each study: \(g(Se_i) \sim N(\theta_{i, Se}, s_{i, Se}^2)\) and \(g(Sp_i) \sim N(\theta_{i, Sp}, s_{i, Sp}^2)\), where \(g(\cdot)\) denotes the logit function. The within-study variances are calculated as \(s_{i, Se}^2 = 1/TP_i + 1/FN_i\) and \(s_{i, Sp}^2 = 1/FP_i + 1/TN_i\). The parameters \(\theta_{i, Se}\) and \(\theta_{i, Sp}\) are the underlying true sensitivity and specificity (on the logit scale) in study \(i\). They are assumed to be random effects, jointly following a bivariate normal distribution: $$\left(\theta_{i, Se}, \theta_{i, Sp}\right)^\prime \sim N\left((\mu_{Se}, \mu_{Sp})^\prime, \mathbf{\Sigma} \right),$$ where \(\mathbf{\Sigma}\) is the between-study variance-covariance matrix. The diagonal elements of \(\mathbf{\Sigma}\) are \(\sigma_{Se}^2\) and \(\sigma_{Sp}^2\), representing the heterogeneity variances of sensitivities and specificities (on the logit scale), respectively. The correlation coefficient is \(\rho\).
The bivariate generalized linear mixed model described in Chu and Cole (2006) refines the bivariate linear mixed model by directly modeling the counts of true positives and true negatives. This approach does not require the assumption that the logit sensitivity and logit specificity approximately follow normal distributions within studies, which could be seriously violated in the presence of small data counts. It also avoids corrections for zero counts. Specificially, the counts of true positives and true negatives are modeled using binomial likelihoods: $$TP_i \sim Bin(TP_i + FN_i, Se_i);$$ $$TN_i \sim Bin(FP_i + TN_i, Sp_i);$$ $$\left( g(Se_i), g(Sp_i) \right)^\prime \sim N\left((\mu_{Se}, \mu_{Sp})^\prime, \mathbf{\Sigma} \right).$$ See more details in Chu and Cole (2006) and Ma et al. (2016).
For both the bivariate linear mixed model and bivariate generalized linear mixed model, \(\mu_{Se}\) and \(\mu_{Sp}\) represent the overall sensitivity and specificity (on the logit scale) across studies, respectively, and \(\mu_{Se} + \mu_{Sp}\) represents the log DOR. The summary ROC curve may be constructed as $$Se = \left\{ 1 + e^{-\hat{\mu}_{Se} + \hat{\mu}_{Sp} \cdot \hat{\rho} \hat{\sigma}_{Se}/\hat{\sigma}_{Sp}} \cdot [Sp/(1 - Sp)]^{-\rho \hat{\sigma}_{Se}/\hat{\sigma}_{Sp}} \right\}^{-1}.$$
Chu H, Cole SR (2006). "Bivariate meta-analysis of sensitivity and specificity with sparse data: a generalized linear mixed model approach." Journal of Clinical Epidemiology, 59(12), 1331--1332. <tools:::Rd_expr_doi("10.1016/j.jclinepi.2006.06.011")>
Irwig L, Macaskill P, Glasziou P, Fahey M (1995). "Meta-analytic methods for diagnostic test accuracy." Journal of Clinical Epidemiology, 48(1), 119--130. <tools:::Rd_expr_doi("10.1016/0895-4356(94)00099-C")>
Ma X, Nie L, Cole SR, Chu H (2016). "Statistical methods for multivariate meta-analysis of diagnostic tests: an overview and tutorial." Statistical Methods in Medical Research, 25(4), 1596--1619. <tools:::Rd_expr_doi("10.1177/0962280213492588")>
Moses LE, Shapiro D, Littenberg B (1993). "Combining independent studies of a diagnostic test into a summary ROC curve: data-analytic approaches and some additional considerations." Statistics in Medicine, 12(14), 1293--1316. <tools:::Rd_expr_doi("10.1002/sim.4780121403")>
Reitsma JB, Glas AS, Rutjes AWS, Scholten RJPM, Bossuyt PM, Zwinderman AH (2005). "Bivariate analysis of sensitivity and specificity produces informative summary measures in diagnostic reviews." Journal of Clinical Epidemiology, 58(10), 982--990. <tools:::Rd_expr_doi("10.1016/j.jclinepi.2005.02.022")>
Zhang H, Lu N, Feng C, Thurston SW, Xia Y, Zhu L, Tu XM (2011). "On fitting generalized linear mixed-effects models for binary responses using different statistical packages." Statistics in Medicine, 30(20), 2562--2572. <tools:::Rd_expr_doi("10.1002/sim.4265")>
maprop.twostep
, meta.biv
, plot.meta.dt
, print.meta.dt
data("dat.scheidler")
out1 <- meta.dt(tp, fp, fn, tn, data = dat.scheidler[dat.scheidler$dt == "MRI",],
method = "s.roc")
out1
plot(out1)
out2 <- meta.dt(tp, fp, fn, tn, data = dat.scheidler[dat.scheidler$dt == "MRI",],
method = "biv.lmm")
out2
plot(out2, predict = TRUE)
out3 <- meta.dt(tp, fp, fn, tn, data = dat.scheidler[dat.scheidler$dt == "MRI",],
method = "biv.glmm")
out3
plot(out3, add = TRUE, studies = FALSE,
col.roc = "blue", col.overall = "blue", col.confid = "blue",
predict = TRUE,col.predict = "blue")
data("dat.smith")
out4 <- meta.dt(tp, fp, fn, tn, data = dat.smith, method = "biv.glmm")
out4
plot(out4, predict = TRUE)
Run the code above in your browser using DataLab