compute.threshold.cROC {ROCnReg} | R Documentation |
Covariate-specific ROC based threshold values.
Description
This function implements methods for estimating covariate-specific ROC-based threshold values.
Usage
compute.threshold.cROC(object, criterion = c("FPF", "TPF", "YI"), FPF, TPF, newdata,
ci.level = 0.95, parallel = c("no", "multicore", "snow"), ncpus = 1, cl = NULL)
Arguments
object |
An object of class |
criterion |
A character string indicating whether the covariate-specific threshold values should be computed based on the Youden index (“YI”) or for fixed false positive fractions (“FPF”) or true positive fractions (“TPF”). |
FPF |
For |
TPF |
For |
newdata |
Optional data frame containing the values of the covariates at which the covariate-specific threshold values will be computed. If not supplied, the function |
ci.level |
An integer value (between 0 and 1) specifying the confidence level. The default is 0.95. |
parallel |
A characters string with the type of parallel operation: either "no" (default), "multicore" (not available on Windows) or "snow". |
ncpus |
An integer with the number of processes to be used in parallel operation. Defaults to 1. |
cl |
An object inheriting from class |
Details
Estimates covariate-specific ROC-based threshold values based on three different criteria, namely, the Youden index (YI), one that gives rise to a pre-specified FPF, and one that gives rise to a pre-specified TPF.
In the conditional case, the Youden index is defined as
YI(\mathbf{x}) = \max_{c}|TPF(c|\mathbf{x}) - FPF(c|\mathbf{x})| = \max_{c}|F_{\bar{D}}(c|\mathbf{x}) - F_{D}(c|\mathbf{x})|,
where
F_{D}(y|\mathbf{x}) = Pr(Y_{D} \leq y | \mathbf{X}_{D} = \mathbf{x}),
F_{\bar{D}}(y|\mathbf{x}) = Pr(Y_{\bar{D}} \leq y | \mathbf{X}_{\bar{D}} = \mathbf{x}).
The value c^{*}_{\mathbf{x}}
that achieves the maximum is called the optimal covariate-specific YI threshold. Regarding the criterion for a fixed FPF, the covariate-specific threshold values are obtained as follows
c^{*}_{\mathbf{x}} = F_{\bar{D}}^{-1}(1-FPF|\mathbf{x}),
and for a fixed TPF we have
c^{*}_{\mathbf{x}} = F_{D}^{-1}(1-TPF|\mathbf{x}),
In all cases, we use the notation c^{*}_{\mathbf{x}}
to emphasise that this value depends on covariate \mathbf{x}
.
Value
As a result, the function provides a list with the following components:
call |
The matched call. |
newdata |
Data frame containing the values of the covariates at which the covariate-specific thresholds were computed. |
thresholds |
If method = "YI", the estimated covariate-specific (optimal) threshold corresponding to the covariate-specific Youden index (the one that maximises TPF/sensitivity + TNF/specificity). If method = "FPF", the covariate-specific threshold corresponding to the specified FPF, and if method = "TPF", the covariate-specific threshold corresponding to the specified TPF. For the Bayesian approach ( |
YI |
If method = "YI", the estimated covariate-specific Youden index. For the Bayesian approach ( |
FPF |
If method = "YI" or method = "TPF", the FPF corresponding to the estimated (optimal) covariate-specific thresholds (for the Bayesian approach ( |
TPF |
If method = "YI" or method = "FPF", the covariate-specific TPF/sensitivity corresponding to the estimated covariate-specific (optimal) threshold. For the Bayesian approach ( |
References
Inacio de Carvalho, V., de Carvalho, M. and Branscum, A. J. (2017). Nonparametric Bayesian Covariate-Adjusted Estimation of the Youden Index. Biometrics, 73, 1279-1288.
Rodriguez-Alvarez, M. X., Roca-Pardinas, J., and Cadarso-Suarez, C. (2011). ROC curve and covariates: extending induced methodology to the non-parametric framework. Statistics and Computing, 21, 483–499.
Rutter, C.M. and Miglioretti, D. L. (2003). Estimating the Accuracy of Psychological Scales Using Longitudinal Data. Biostatistics, 4, 97–107.
Youden, W. J. (1950). Index for rating diagnostic tests. Cancer, 3, 32–35.
See Also
cROC.bnp
, cROC.kernel
or cROC.sp
Examples
library(ROCnReg)
data(psa)
# Select the last measurement
newpsa <- psa[!duplicated(psa$id, fromLast = TRUE),]
# Log-transform the biomarker
newpsa$l_marker1 <- log(newpsa$marker1)
cROC_bnp <- cROC.bnp(formula.h = l_marker1 ~ f(age, K = 0),
formula.d = l_marker1 ~ f(age, K = 0),
group = "status",
tag.h = 0,
data = newpsa,
standardise = TRUE,
p = seq(0,1,l=101),
mcmc = mcmccontrol(nsave = 500, nburn = 100, nskip = 1))
### Threshold values based on the YI
th_cROC_bnp_yi <- compute.threshold.cROC(cROC_bnp, criterion = "YI")
# Plot results
# Threshold values
plot(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$thresholds[,"est"],
type = "l", xlab = "Age",
ylab = "log(PSA)", ylim = c(0,3),
main = "Threshold values based on the Youden Index")
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$thresholds[,"qh"], lty = 2)
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$thresholds[,"ql"], lty = 2)
# Youden Index
plot(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$YI[,"est"],
type = "l", xlab = "Age",
ylab = "log(PSA)", ylim = c(0,1),
main = "Threshold values based on the Youden Index")
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$YI[,"qh"], lty = 2)
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_yi$YI[,"ql"], lty = 2)
### Threshold values for a fixed FPF
th_cROC_bnp_fpf <- compute.threshold.cROC(cROC_bnp, criterion = "FPF", FPF = 0.1)
# Plot results
# Threshold values
plot(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_fpf$thresholds[["0.1"]][,"est"],
type = "l", xlab = "Age",
ylab = "log(PSA)", ylim = c(0,3), main = "Threshold values for a FPF = 0.1")
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_fpf$thresholds[["0.1"]][,"qh"], lty = 2)
lines(th_cROC_bnp_yi$newdata$age, th_cROC_bnp_fpf$thresholds[["0.1"]][,"ql"], lty = 2)