This function provides summary estimates for the concordance statistic, the total observed-expected ratio or the calibration slope. Where appropriate, data transformations are applied and missing information is derived from available quantities. Unless specified otherwise, all meta-analysis models assume random effects and are fitted using restricted maximum likelihood estimation with the metafor package (Viechtbauer 2010). Further, confidence intervals for the average performance are based on the Hartung-Knapp-Sidik-Jonkman method. When conducting a Bayesian meta-analysis, the R packages runjags and rjags must be installed.
Usage
valmeta(
measure = "cstat",
cstat,
cstat.se,
cstat.cilb,
cstat.ciub,
cstat.cilv,
sd.LP,
OE,
OE.se,
OE.cilb,
OE.ciub,
OE.cilv,
citl,
citl.se,
N,
O,
E,
Po,
Po.se,
Pe,
data,
method = "REML",
test = "knha",
verbose = FALSE,
slab,
n.chains = 4,
pars,
...
)
Arguments
- measure
A character string indicating which summary performance measure should be calculated. Options are
"cstat"
(meta-analysis of the concordance statistic) and"OE"
(meta-analysis of the total observed-expected ratio). See `Details' for more information.- cstat
Optional vector with the estimated c-statistic for each valiation
- cstat.se
Optional vector with the standard error of the estimated c-statistics
- cstat.cilb
Optional vector to specify the lower limits of the confidence interval.
- cstat.ciub
Optional vector to specify the upper limits of the confidence interval.
- cstat.cilv
Optional vector to specify the levels of aformentioned confidence interval limits. (default: 0.95, which corresponds to the 95% confidence interval).
- sd.LP
Optional vector with the standard deviation of the linear predictor (prognostic index)
- OE
Optional vector with the estimated ratio of total observed versus total expected events
- OE.se
Optional vector with the standard errors of the estimated O:E ratios
- OE.cilb
Optional vector to specify the lower limits of the confidence interval for
OE
.- OE.ciub
Optional vector to specify the upper limits of the confidence interval for
OE
.- OE.cilv
Optional vector to specify the levels of aformentioned confidence interval limits. (default: 0.95, which corresponds to the 95% confidence interval).
- citl
Optional vector with the estimated calibration-in-the-large for each valiation
- citl.se
Optional vector with the standard error of the estimated calibration-in-the-large statistics
- N
Optional vector with the total number of participants for each valiation
- O
Optional vector with the total number of observed events for each valiation (if specified, during time
t.val
)- E
Optional vector with the total number of expected events for each valiation (if specified, during time
t.val
)- Po
Optional vector with the (cumulative) observed event probability for each valiation (if specified, during time
t.val
)- Po.se
Optional vector with the standard errors of
Po
.- Pe
Optional vector with the (cumulative) expected event probability for each validation (if specified, during time
t.val
)- data
optional data frame containing the variables given to the arguments above.
- method
Character string specifying whether a fixed- or a random-effects model should be fitted. A fixed-effects model is fitted when using
method="FE"
. Random-effects models are fitted by setting method equal to one of the following:"REML"
(Default),"DL"
,"HE"
,"SJ"
,"ML"
,"EB"
,"HS"
,"GENQ"
or"BAYES"
. See 'Details'.- test
Optional character string specifying how test statistics and confidence intervals for the fixed effects should be computed. By default (
test="knha"
), the method by Knapp and Hartung (2003) is used for adjusting test statistics and confidence intervals. Type '?rma
' for more details.- verbose
If TRUE then messages generated during the fitting process will be displayed.
- slab
Optional vector specifying the label for each study
- n.chains
Optional numeric specifying the number of chains to use in the Gibbs sampler (if
method="BAYES"
). More chains will improve the sensitivity of the convergence diagnostic, but will cause the simulation to run more slowly. The default number of chains is 4.- pars
A list with additional arguments. See 'Details' for more information. The following parameters configure the MCMC sampling procedure:
hp.mu.mean
(mean of the prior distribution of the random effects model, defaults to 0),hp.mu.var
(variance of the prior distribution of the random effects model, defaults to 1000),hp.tau.min
(minimum value for the between-study standard deviation, defaults to 0),hp.tau.max
(maximum value for the between-study standard deviation, defaults to 2),hp.tau.sigma
(standard deviation of the prior distribution for the between-study standard-deviation),hp.tau.dist
(prior distribution for the between-study standard-deviation. Defaults to"dunif"
),hp.tau.df
(degrees of freedom for the prior distribution for the between-study standard-deviation. Defaults to 3). Other arguments aremethod.restore.c.se
(method for restoring missing estimates for the standard error of the c-statistic. Seeccalc
for more information),model.cstat
(The likelihood/link for modeling the c-statistic; see "Details"),model.oe
(The likelihood/link for modeling the O:E ratio; see "Details"),seed
(an integer to indicate the random seed).- ...
Additional arguments that are passed to rma or runjags (if
method="BAYES"
).
Value
An object of class valmeta
with the following elements:
- "data"
array with (transformed) data used for meta-analysis, and method(s) used for restoring missing information.
- "measure"
character string specifying the performance measure that has been meta-analysed.
- "method"
character string specifying the meta-analysis method.
- "model"
character string specifying the meta-analysis model (link function).
- "est"
summary estimate for the performance statistic. For Bayesian meta-analysis, the posterior median is returned.
- "ci.lb"
lower bound of the confidence (or credibility) interval of the summary performance estimate.
- "ci.ub"
upper bound of the confidence (or credibility) interval of the summary performance estimate.
- "pi.lb"
lower bound of the (approximate) prediction interval of the summary performance estimate.
- "pi.ub"
upper bound of the (approximate) prediction interval of the summary performance estimate.
- "fit"
the full results from the fitted model.
- "slab"
vector specifying the label of each study.
Details
Meta-analysis of the concordance statistic
A summary estimate for the concorcance (c-) statistic can be obtained by specifying measure="cstat"
.
The c-statistic is a measure of discrimination, and indicates the ability of a prediction model to
distinguish between patients developing and not developing the outcome. The c-statistic typically ranges
from 0.5 (no discriminative ability) to 1 (perfect discriminative ability). When missing, the c-statistic
and/or its standard error are derived from other reported information.
See ccalc
for more information.
By default, it is assumed that the logit of the c-statistic is Normally distributed within and across studies
(pars$model.cstat = "normal/logit"
). Alternatively, it is possible to assume that the raw c-statistic
is Normally distributed across studies pars$model.cstat = "normal/identity"
.
Meta-analysis of the total observed versus expected ratio
A summary estimate for the total observed versus expected (O:E) ratio can be
obtained by specifying measure="OE"
. The total O:E ratio provides a
rough indication of the overall model calibration (across the entire range
of predicted risks). When missing, the total O:E ratio and/or its standard
error are derived from other reported information. See oecalc
for more information.
For frequentist meta-analysis, within-study variation can either be modeled
using a Normal (model.oe = "normal/log"
or
model.oe = "normal/identity"
) or a Poisson distribution
(model.oe = "poisson/log"
).
When performing a Bayesian meta-analysis, all data are modeled using a
one-stage random effects (hierarchical related regression) model.
In particular, a binomial distribution (if O
, E
and
N
is known), a Poisson distribution (if only O
and
E
are known) or a Normal distribution (if OE
and
OE.se
or OE.95CI
are known) is selected separately for
each study.
Bayesian meta-analysis
All Bayesian meta-analysis models assume the presence of random effects. Summary estimates are based on the posterior mean. Credibility and prediction intervals are directly obtained from the corresponding posterior quantiles.
The prior distribution for the (transformed) performance estimate is modeled
using a Normal distribution, with mean hp.mu.mean
(defaults to 0)
and variance hp.mu.var
(defaults to 1000).
For meta-analysis of the total O:E ratio, the maximum value for
hp.mu.var
is 100.
By default, the prior distribution for the between-study standard deviation
is modeled using a uniform distribution (hp.tau.dist="dunif"
),
with boundaries hp.tau.min
and hp.tau.max
. Alternative choices
are a truncated Student-t distribution (hp.tau.dist="dhalft"
) with a
mean of hp.tau.mean
, a standard deviation of hp.tau.sigma
and
hp.tau.df
degrees of freedom. This distribution is again restricted
to the range hp.tau.min
to hp.tau.max
.
Note
The width of calculated confidence, credibility and prediction
intervals can be specified using level
in the pars
argument
(defaults to 0.95).
References
Debray TPA, Damen JAAG, Snell KIE, Ensor J, Hooft L, Reitsma JB, et al. A guide to systematic review and meta-analysis of prediction model performance. BMJ. 2017;356:i6460. doi:10.1136/bmj.i6460
Debray TPA, Damen JAAG, Riley R, Snell KIE, Reitsma JB, Hooft L, et al. A framework for meta-analysis of prediction model studies with binary and time-to-event outcomes. Stat Methods Med Res. 2019;28:2768--86. doi:10.1177/0962280218785504
Riley RD, Tierney JF, Stewart LA. Individual participant data meta-analysis: a handbook for healthcare research. Hoboken, NJ: Wiley; 2021. ISBN: 978-1-119-33372-2.
Steyerberg EW, Nieboer D, Debray TPA, van Houwelingen HC. Assessment of heterogeneity in an individual participant data meta-analysis of prediction models: An overview and illustration. Stat Med. 2019; 38:4290--309. doi:10.1002/sim.8296
Viechtbauer W. Conducting Meta-Analyses in R with the metafor Package. Journal of Statistical Software. 2010; 36. doi:10.18637/jss.v036.i03
See also
ccalc
to calculate concordance statistics
and corresponding standard errors, oecalc
to calculate the
total O:E ratio and corresponding standard errors,
plot.valmeta
to generate forest plots
Examples
######### Validation of prediction models with a binary outcome #########
data(EuroSCORE)
# Meta-analysis of the c-statistic (random effects)
fit <- valmeta(cstat=c.index, cstat.se=se.c.index, cstat.cilb=c.index.95CIl,
cstat.ciub=c.index.95CIu, cstat.cilv=0.95, N=n, O=n.events,
slab=Study, data=EuroSCORE)
plot(fit)
# Nearly identical results when we need to estimate the SE
valmeta(cstat=c.index, N=n, O=n.events, slab=Study, data=EuroSCORE)
#> Summary c-statistic with 95% confidence and (approximate) 95% prediction interval:
#>
#> Estimate CIl CIu PIl PIu
#> 0.7889020 0.7650864 0.8109000 0.6818676 0.8669518
#>
#> Number of studies included: 23
# Two-stage meta-analysis of the total O:E ratio (random effects)
valmeta(measure="OE", O=n.events, E=e.events, N=n, slab=Study, data=EuroSCORE)
#> Summary Total O:E ratio with 95% confidence and (approximate) 95% prediction interval:
#>
#> Estimate CIl CIu PIl PIu
#> 1.1075973 0.8998973 1.3632352 0.4295250 2.8561122
#>
#> Number of studies included: 23
valmeta(measure="OE", O=n.events, E=e.events, data=EuroSCORE)
#> Summary Total O:E ratio with 95% confidence and (approximate) 95% prediction interval:
#>
#> Estimate CIl CIu PIl PIu
#> 1.1059784 0.8990028 1.3606056 0.4316383 2.8338269
#>
#> Number of studies included: 23
valmeta(measure="OE", Po=Po, Pe=Pe, N=n, data=EuroSCORE)
#> Summary Total O:E ratio with 95% confidence and (approximate) 95% prediction interval:
#>
#> Estimate CIl CIu PIl PIu
#> 1.1230955 0.9212978 1.3690944 0.4549877 2.7722586
#>
#> Number of studies included: 23
if (FALSE) {
# One-stage meta-analysis of the total O:E ratio (random effects)
valmeta(measure="OE", O=n.events, E=e.events, data=EuroSCORE, method="ML",
pars=list(model.oe="poisson/log"))
# Bayesian random effects meta-analysis of the c-statistic
fit2 <- valmeta(cstat=c.index, cstat.se=se.c.index, cstat.cilb=c.index.95CIl,
cstat.ciub=c.index.95CIu, cstat.cilv=0.95, N=n, O=n.events,
data=EuroSCORE, method="BAYES", slab=Study)
# Bayesian one-stage random effects meta-analysis of the total O:E ratio
# Consider that some (but not all) studies do not provide information on N
# A Poisson distribution will be used for studies 1, 2, 5, 10 and 20
# A Binomial distribution will be used for the remaining studies
EuroSCORE.new <- EuroSCORE
EuroSCORE.new$n[c(1, 2, 5, 10, 20)] <- NA
pars <- list(hp.tau.dist="dhalft", # Prior for the between-study standard deviation
hp.tau.sigma=1.5, # Standard deviation for 'hp.tau.dist'
hp.tau.df=3, # Degrees of freedom for 'hp.tau.dist'
hp.tau.max=10, # Maximum value for the between-study standard deviation
seed=5) # Set random seed for the simulations
fit3 <- valmeta(measure="OE", O=n.events, E=e.events, N=n, data=EuroSCORE.new,
method="BAYES", slab=Study, pars=pars)
plot(fit3)
print(fit3$fit$model) # Inspect the JAGS model
print(fit3$fit$data) # Inspect the JAGS data
}
######### Validation of prediction models with a time-to-event outcome #########
data(Framingham)
# Meta-analysis of total O:E ratio after 10 years of follow-up
valmeta(measure="OE", Po=Po, Pe=Pe, N=n, data=Framingham)
#> Warning: 8 studies with NAs omitted from model fitting.
#> Summary Total O:E ratio with 95% confidence and (approximate) 95% prediction interval:
#>
#> Estimate CIl CIu PIl PIu
#> 0.5781061 0.4400900 0.7594053 0.1935434 1.7267794
#>
#> Number of studies included: 16