Herramientas · Bioestadística abierta
Valores predictivos a partir de sensibilidad, especificidad y prevalencia (con IC de Mercaldo y frecuencias naturales)
Captura la sensibilidad, la especificidad y la prevalencia donde se usará la prueba (y, si los conoces, los tamaños del estudio de validación) y obtén el VPP y el VPN con su intervalo de confianza, las razones de verosimilitud, las frecuencias naturales por 1,000 personas, la curva de ambos valores frente a la prevalencia, la interpretación y el código de R equivalente.
https://udgca1190.com.mx/herramientas/bioestadistica/valores-predictivos
Este enlace no incluye los datos pegados: son demasiado largos para una URL.
Resultados
Valor predictivo positivo (VPP)
87.9 %
76.9 % a 94.1 %
IC 95 % · logit de Mercaldo
Valor predictivo negativo (VPN)
93.7 %
89.8 % a 96.1 %
IC 95 % · logit de Mercaldo
LR+
17.00
LR−
0.16
Verdaderos positivos por 1,000
255
de cada 1,000 personas evaluadas
Falsos positivos por 1,000
35
de cada 1,000 personas evaluadas
Falsos negativos por 1,000
45
de cada 1,000 personas evaluadas
Verdaderos negativos por 1,000
665
de cada 1,000 personas evaluadas
Interpretación
Si la prueba (Sn 85.0 %, Sp 95.0 %) se aplica a 1,000 personas con una prevalencia de 30.0 %, se esperan 255 verdaderos positivos y 35 falsos positivos: 87.9 % de los resultados positivos corresponderán a personas con la enfermedad (VPP). Habrá 45 falsos negativos y 665 verdaderos negativos: 93.7 % de los resultados negativos corresponderán a personas sin la enfermedad (VPN).
Con 80 enfermos y 120 sanos en el estudio de validación, el IC 95 % del VPP es 76.9 % a 94.1 % y el del VPN, 89.8 % a 96.1 % (método logit de Mercaldo 2007, con la prevalencia tomada como fija).
LR+ = 17.00 y LR− = 0.16: estas dos cifras no dependen de la prevalencia y son las que se trasladan a cualquier probabilidad preprueba con la calculadora «Probabilidad posprueba».
La prevalencia debe ser la de la población donde se usará la prueba (o la probabilidad preprueba del paciente), no la del estudio de validación: con la misma Sn y Sp, el VPP cae cuando la enfermedad es rara y el VPN cae cuando es frecuente (Vecchio 1966). La gráfica muestra ambos valores para cualquier prevalencia.
Explicación
La sensibilidad y la especificidad describen la prueba, pero la pregunta del clínico es otra: si el resultado es positivo, ¿qué probabilidad hay de que la persona esté enferma? Ese es el valor predictivo positivo (VPP); el negativo (VPN) es la probabilidad de estar sana con un resultado negativo. Ambos dependen de la prevalencia (Vecchio 1966): con la misma prueba, el VPP cae cuando la enfermedad es rara y el VPN cae cuando es frecuente.
Por eso los valores predictivos del estudio de validación no se trasladan a la consulta: hay que recalcularlos con la prevalencia de la población donde se aplicará la prueba (o con la probabilidad preprueba del paciente). Esta calculadora hace ese cálculo con el teorema de Bayes.
Las frecuencias naturales (Gigerenzer y Edwards 2003) lo explican sin fórmulas: de cada 1,000 personas evaluadas, cuántas tendrán la enfermedad y darán positivo, cuántas darán positivo sin tenerla, y así con los negativos. El VPP es simplemente la fracción de positivos que sí están enfermos.
Si se conocen los tamaños del estudio de validación (enfermos y sanos con los que se estimaron Sn y Sp), el intervalo de confianza de cada valor predictivo se calcula por el método logit de Mercaldo, Lau y Zhou (2007), que propaga la incertidumbre de Sn y Sp tomando la prevalencia como fija. Cuando Sn o Sp valen 0 o 1 se usa su variante ajustada (0.5 sumado a cada celda).
Ecuaciones
- sensibilidad y especificidad
- prevalencia (probabilidad preprueba) donde se usará la prueba
- enfermos y sanos del estudio de validación
- escala logit; el intervalo se construye en esa escala y se devuelve a probabilidad con expit(x) = 1/(1 + e^{−x})
Código R
# Predictive values from sensitivity, specificity and prevalence - Bioestadistica abierta, UDG-CA-1190
# Runs as is in R, RStudio or webR; prints the results as JSON at the end.
library(jsonlite)
sn <- 0.85; sp <- 0.95; prev <- 0.3 # sensitivity, specificity and prevalence where the test will be used (0-1)
n_d <- 80; n_nd <- 120 # diseased and non-diseased in the validation study; 0 = unknown (no CI)
nivel <- 0.95
z <- qnorm(1 - (1 - nivel) / 2)
vpp_punto <- sn * prev / (sn * prev + (1 - sp) * (1 - prev)) # Bayes' theorem
vpn_punto <- sp * (1 - prev) / (sp * (1 - prev) + (1 - sn) * prev)
lr_pos <- sn / (1 - sp)
lr_neg <- (1 - sn) / sp
# Logit confidence interval of Mercaldo, Lau & Zhou (2007); with Sn or Sp at 0 or 1 the standard
# error is undefined and the adjusted logit is used (0.5 added to each cell of the validation study)
logit <- function(p) log(p / (1 - p))
expit <- function(x) 1 / (1 + exp(-x))
ic_logit <- function(s, e, d, nd) { # s = Sn, e = Sp, d = diseased, nd = non-diseased
vpp <- s * prev / (s * prev + (1 - e) * (1 - prev))
vpn <- e * (1 - prev) / (e * (1 - prev) + (1 - s) * prev)
ee_vpp <- sqrt((1 - s) / (s * d) + e / ((1 - e) * nd))
ee_vpn <- sqrt((1 - e) / (e * nd) + s / ((1 - s) * d))
list(vpp = c(expit(logit(vpp) - z * ee_vpp), expit(logit(vpp) + z * ee_vpp)),
vpn = c(expit(logit(vpn) - z * ee_vpn), expit(logit(vpn) + z * ee_vpn)))
}
if (n_d > 0 && n_nd > 0) {
ajustado <- sn %in% c(0, 1) || sp %in% c(0, 1)
ic <- if (ajustado) ic_logit((sn * n_d + 0.5) / (n_d + 1), (sp * n_nd + 0.5) / (n_nd + 1), n_d + 1, n_nd + 1) else ic_logit(sn, sp, n_d, n_nd)
vpp <- c(vpp_punto, ic$vpp); vpn <- c(vpn_punto, ic$vpn)
} else {
vpp <- vpp_punto; vpn <- vpn_punto # without the study sizes there is no interval
}
# Natural frequencies per 1,000 people tested (Gigerenzer & Edwards 2003)
vp_mil <- 1000 * prev * sn; fn_mil <- 1000 * prev * (1 - sn)
fp_mil <- 1000 * (1 - prev) * (1 - sp); vn_mil <- 1000 * (1 - prev) * sp
res <- list(vpp = vpp, vpn = vpn, lr_pos = lr_pos, lr_neg = lr_neg,
vp_mil = vp_mil, fp_mil = fp_mil, fn_mil = fn_mil, vn_mil = vn_mil)
cat(toJSON(res, auto_unbox = TRUE, digits = NA))
Este es el mismo código que valida la calculadora: cópialo y ejecútalo en R o RStudio para reproducir el resultado.
La verificación con R dentro del navegador llegará en una próxima versión; mientras tanto, copia el código y ejecútalo en RStudio.
Métodos para manuscrito
Los valores predictivos se derivaron de la sensibilidad, la especificidad y la prevalencia supuesta mediante el teorema de Bayes [4,1]. Los intervalos de confianza al 95 % se calcularon con el método logit de Mercaldo et al. [2] a partir de los tamaños del estudio de validación (80 con la enfermedad y 120 sin ella), con la prevalencia tomada como fija. Los resultados se expresaron también como frecuencias naturales por cada 1,000 personas [3]. Los cálculos se realizaron con la calculadora «Valores predictivos» de Bioestadística abierta (Cuerpo Académico UDG-CA-1190, https://udgca1190.com.mx/herramientas/bioestadistica/valores-predictivos), verificada contra R.
Párrafo listo para la sección de Métodos; los números entre corchetes remiten a la lista de referencias.
Referencias
- 01 Vecchio TJ. Predictive value of a single diagnostic test in unselected populations. New England Journal of Medicine. 1966;274(21):1171–1173. doi:10.1056/NEJM196605262742104 PMID: 5934954 Fuente original
- 02 Mercaldo ND, Lau KF, Zhou XH. Confidence intervals for predictive values with an emphasis to case-control studies. Statistics in Medicine. 2007;26(10):2170–2183. doi:10.1002/sim.2677 PMID: 16927452 Fuente original
- 03 Gigerenzer G, Edwards A. Simple tools for understanding risks: from innumeracy to insight. BMJ. 2003;327(7417):741–744. doi:10.1136/bmj.327.7417.741 PMID: 14512488 Fuente original
- 04 Bayes T. An essay towards solving a problem in the doctrine of chances. Philosophical Transactions of the Royal Society of London. 1763;53:370–418. doi:10.1098/rstl.1763.0053 Fuente original
- 05 Altman DG, Bland JM. Diagnostic tests 2: predictive values. BMJ. 1994;309(6947):102. doi:10.1136/bmj.309.6947.102 PMID: 8038641 Lectura didáctica
- 06 Fletcher RH, Fletcher SW, Fletcher GS. Clinical Epidemiology: The Essentials. 5.ª ed. Philadelphia: Lippincott Williams & Wilkins; 2014. Lectura didáctica