Iniciar sesión

Se requiere una suscripción a JoVE para ver este contenido. Inicie sesión o comience su prueba gratuita.

En este artículo

  • Resumen
  • Resumen
  • Introducción
  • Protocolo
  • Resultados
  • Discusión
  • Divulgaciones
  • Agradecimientos
  • Materiales
  • Referencias
  • Reimpresiones y Permisos

Resumen

El presente protocolo describe los códigos en R para evaluar las capacidades de discriminación y calibración de un modelo de riesgo competidor, así como los códigos para la validación interna y externa del mismo.

Resumen

El modelo de riesgo proporcional de Cox se aplica ampliamente para los análisis de supervivencia en entornos clínicos, pero no es capaz de hacer frente a múltiples resultados de supervivencia. A diferencia del modelo tradicional de riesgo proporcional de Cox, los modelos de riesgo competitivos consideran la presencia de eventos competitivos y su combinación con un nomograma, un dispositivo de cálculo gráfico, que es una herramienta útil para que los médicos realicen una predicción de pronóstico precisa. En este estudio, informamos un método para establecer el nomograma de riesgo competitivo, es decir, la evaluación de sus capacidades de discriminación (es decir, índice de concordancia y área bajo la curva) y calibración (es decir, curvas de calibración), así como el beneficio neto (es decir, análisis de la curva de decisión). Además, también se realizó una validación interna utilizando remuestreos de bootstrap del conjunto de datos original y una validación externa utilizando un conjunto de datos externo del nomograma de riesgo competidor establecido para demostrar su capacidad de extrapolación. El nomograma de riesgo competitivo debe servir como una herramienta útil para que los médicos predigan el pronóstico teniendo en cuenta los riesgos competitivos.

Introducción

En los últimos años, se han identificado factores pronósticos emergentes con el desarrollo de la medicina de precisión, y los modelos pronósticos que combinan factores moleculares y clínicopatológicos están atrayendo cada vez más atención en entornos clínicos. Sin embargo, los modelos no gráficos, como el modelo de riesgo proporcional de Cox, con resultados de valores de coeficiente, son difíciles de entender para los médicos1. En comparación, un nomograma es una herramienta de visualización de modelos de regresión (incluyendo el modelo de regresión de Cox, el modelo de riesgo competitivo, etc.), un diagrama bidimensional diseñado para el cálculo gráfico aproximado de una función matemática2. Permite la valoración de diferentes niveles de variables en un modelo clínico y el cálculo de las puntuaciones de riesgo (RS) para predecir el pronóstico.

La evaluación del modelo es esencial en la construcción del modelo, y dos características son generalmente aceptadas para la evaluación: discriminación y calibración. En los modelos clínicos, la discriminación se refiere a la capacidad de un modelo para separar a los individuos que desarrollan eventos de los que no lo hacen, como los pacientes que mueren frente a los que permanecen vivos, y el índice de concordancia (índice C) o el área bajo la curva característica operativa del receptor (AUC) se utilizan típicamente para caracterizarlo 3,4. La calibración es un proceso de comparación de las probabilidades predichas de un modelo con las probabilidades reales, y las curvas de calibración se han utilizado ampliamente para representarlo. Además, la validación del modelo (validación interna y externa) es un paso importante en la construcción del modelo, y solo los modelos validados pueden extrapolarse aún más5.

El modelo de riesgo proporcional de Cox es un modelo de regresión utilizado en la investigación médica para investigar las asociaciones entre los factores pronósticos y el estado de supervivencia. Sin embargo, el modelo de riesgo proporcional de Cox solo considera dos estados de resultado [Y (0, 1)], mientras que los sujetos del estudio a menudo enfrentan más de dos estados, y surgen riesgos competitivos [Y (0, 1, 2)]1. La supervivencia general (SG), que se define como el tiempo desde la fecha de origen (p. ej., tratamiento) hasta la fecha de muerte por cualquier causa, es el criterio de valoración más importante en el análisis de supervivencia. Sin embargo, la SG no diferencia la muerte específica por cáncer de la muerte no específica por cáncer (p. ej., eventos cardiovasculares y otras causas no relacionadas), ignorando así los riesgos competitivos6. En estas situaciones, se prefiere el modelo de riesgo competitivo para la predicción del estado de supervivencia con la consideración de riesgos competitivos7. La metodología de construcción y validación de los modelos de riesgo proporcional de Cox está bien establecida, mientras que ha habido pocos informes sobre la validación de modelos de riesgo competitivos.

En nuestro estudio anterior, se estableció un nomograma de riesgo competitivo específico, una combinación de un nomograma y un modelo de riesgo competitivo, y una estimación de puntaje de riesgo basada en un modelo de riesgo competitivo8. Este estudio tiene como objetivo presentar diferentes métodos de evaluación y validación del nomograma de riesgo competitivo establecido, que debe servir como una herramienta útil para que los médicos predigan el pronóstico con la consideración de los riesgos competitivos.

Protocolo

La base de datos de Vigilancia, Epidemiología y Resultados Finales (SEER) es una base de datos de cáncer de acceso abierto que solo contiene datos de pacientes no identificados (ID de SEER: 12296-Nov2018). Por lo tanto, este estudio fue eximido de la aprobación de la junta de revisión del Hospital Jinhua Afiliado, Facultad de Medicina de la Universidad de Zhejiang.

1. Preparación de datos y preparación de paquetes R

  1. Prepare e importe los datos.
    > Dataset <- read.csv(".../Breast cancer Data.xlsx") #Import datos.
    NOTA: Los datos se cargan en el Archivo Suplementario 1.
  2. Instale y cargue los paquetes de R.
    > paquetes <- c("rms","cmprsk","mstate","survival","riskRegression","
    prodlim")
    > req.pcg <- function(pcg){
    Nueva <- PCG[!( pcg %in% installed.packages()[, "Package"])]
    if (length(new)) install.packages(new, dependencies = T)
    sapply(pcg, require, ch = T)
    }
    > req.pcg(paquetes)

    Nota : realice los procedimientos siguientes basados en el software de R (versión 3.6.2) utilizando los paquetes rms, cmprsk, mstate, survival, riskRegression y prodlim (http://www.r-projectrg/).

2. Establecer nomogramas de riesgo competitivos en dos métodos distintos

  1. Establezca el nomograma de riesgo competitivo en un método directo.
    > mod_cph <- cph(Surv(Survivalmonths, status) ~ factor1+ factor2+...,
    x=T, y=T, surv=T, data=Dataset)
    > nom <- nomogram(mod_cph, fun=list(function(x) 1-surv_cph(36, x)...),
    funlabel=c("evento de 3 años1 Prob." ...), lp=F)
    #Take el mes 36 como ejemplo.
    > mod_crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov)
    > puntuación <- log(log((1-real.3y),(1-cif.min36)))/(maxbeta/100)
    > parcela(nom)
  2. Establecer el nomograma de riesgo competitivo en un método ponderado.
    > df.w <- crprep("Survivalmonths"," fstatus",
    data=Dataset, trans=c(1,2), cens=0,
    keep=c("factor1"," factor2"...))
    > mod.w <- cph(Surv(Tstart, Tstop, status==1) ~ factor1+factor2+...,
    data=df.w, weight=weight.cens, subset=failcode==1, surv=T)
    > nom.w <- nomogram(mod.w...)

3. Capacidad de discriminación del nomograma de riesgo concurrente

  1. Índice C de discriminación
    1. Ajuste la matriz cov en el modelo de riesgo competidor mod_crr. y obtenga un SUV de matriz predicho.
      > SUV <- predict.crr(mod_crr, cov)
    2. Obtenga las incidencias acumuladas en un mes determinado desde suv y calcule el índice C con la función rcorr.cens.
      > cif36 <- suv[which(suv[,1]==36),][-1]
      > rcorr <- rcorr.cens(1-cif36,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
      > cindex <- rcorr[1]
  2. AUC por la discriminación
    1. Puntúe el rendimiento predictivo del modelo de riesgo competidor utilizando la función Score (paquete riskRegression).
      > fgr.w <- FGR(Hist(Survivalmonths, fstatus) ~ factor1+ factor2+..., data=Dataset, cause=1)
      > score <- Score(list("Fine-Gray" = fgr.w),
    2. Extraiga el AUC de la "puntuación".
      > score$AUC

4. Capacidad de calibración de modelos de riesgo competidores

  1. Curvas de calibración con un intervalo de confianza del 95% del modelo de riesgo competidor
    1. Obtener un marco de datos con las incidencias acumuladas de cada individuo en un determinado tiempo de falla.
      > cif36 <- data.frame(cif36) #Take el mes 36 como ejemplo.
      > colnames(cif36.36_o)<-c("36m")
    2. Divida la cohorte de acuerdo con las incidencias acumuladas estimadas en cinco subgrupos y calcule el promedio de incidencias acumuladas previstas de cada subgrupo.
      > grupo36 <- corte(cif36$'36m',
      cuantil(cif36$'36m', seq(0, 1, 0.2)),
      include.lower = TRUE, labels = 1:5)
      > media36 <- as.vector(by(cif36 $'36m', grupo36, media))
    3. Calcule las incidencias acumuladas observadas, es decir, las incidencias acumuladas reales, utilizando la función cuminc, y luego obtenga las incidencias acumuladas observadas con un intervalo de confianza del 95% en un determinado tiempo de falla.
      > cum36 <- cuminc(Dataset$Survivalmonths,Dataset$fstatus,group36)
      > obs36 <- timepoints(cum36,Dataset$Survivalmonths)$est[c(1:5),36]
      > obs36var <- timepoints(cum36,Dataset$Survivalmonths)$var[c(1:5),36]
      > df <- data.frame(mean36, obs36, obs36var)
    4. Trazar la curva de calibración con las incidencias acumuladas previstas como eje x y las incidencias acumuladas observadas como eje y utilizando la función ggplot.
      > ggplot(df)+ geom_point(aes(x=mean36,y=obs36),col="red")+
      geom_point(aes(x=mean36,y=obs36),col="rojo",pch=4)+
      geom_line(col="rojo",aes(x=mean36,y=obs36))+
      geom_errorbar(col="rojo",aes(x=mean36,y=obs36+1.96
      *sqrt(obs36var)),
      ymin =obs36-1.96*sqrt(obs36var), ymax = obs36+1.96
      *sqrt(obs36var))
      geom_abline(lty=3,lwd=2,col=c(rgb(0,118,192,
      maxColorValue=255)))
  2. Curva de calibración con puntuaciones de riesgo del modelo de riesgo competidor
    1. Valorar cada nivel de todas las variables y obtener el RS total.
      > Dataset$factor1[Dataset$factor1==1] <- factor1.scale["Factor1_level1"]
      >
      ... #For ejemplo, Dataset$histology[Dataset$histology==1]<-histology.scale["Histology1"]
      > Dataset$rs <- Dataset$factor1+Dataset$factor2+Dataset$factor3+...
      NOTA: Obtenga el RS total para cada paciente sumando los puntos de cada variable.
    2. Contar las frecuencias y calcular las incidencias acumuladas observadas de las diferentes puntuaciones totales de riesgo.
      > rs.freq <- as.data.frame(table(Dataset$rs))
      > obs.36 <- vector(mode="numeric", length=nrow(rs.freq))
      > for (i in 1: nrow(rs.freq)) {
      dataset <- subset(Dataset,Dataset$rs== rs.freq [i,1])
      cif.dataset <- cuminc(dataset$Survivalmonths,dataset$death3)
      cif36.dataset <- puntos de tiempo(cif.dataset,36)
      obs.36[i] <- cif36.dataset$est[1]}
    3. Establezca el rango del eje x y calcule las incidencias acumuladas previstas de las puntuaciones de riesgo totales.
      > RS <- rango(nom$total.points)
      > x.36 <- seq(min(RS),max(RS),0.01)
      > pre.36 <- 1-(1-cif.min36)^exp(x.36*maxbeta/100)
    4. Trazar la curva de calibración con puntuaciones de riesgo.
      > plot(x.36, pre.36, type='l'...)
      > par(new=TRUE)
      > plot(as.vector(rs.freq[,1]), obs.36... )

5. Análisis de la curva de decisión de modelos de riesgo competidores

  1. Fuente de la función stdca para realizar el análisis de la curva de decisión.
    > fuente("STDCA. R")
  2. Extraiga las ecuaciones polinómicas del nomograma para calcular la probabilidad de supervivencia.
    > nomogramEx(nomo = nom)
    > Dataset$predictors <- A * (Dataset$rs ^3) + B * (Dataset$rs ^2) + C * Dataset$rs + D
    #predictors son probabilidades predichas de muerte específica por cáncer calculadas por el nomograma establecido
  3. Realizar el análisis de la curva de decisión.
    > stdca(data = Dataset, outcome = "status", ttoutcome = "Survivalmonths", timepoint = 36,
    predictors = "predictors", cmprsk = TRUE, smooth = FALSE, probability = FALSE)

    NOTA: Para evaluar un resultado en presencia de un riesgo competitivo, se debe elegir TRUE para cmprsk.

6. Validación interna mediante el método bootstrap

  1. Obtenga el promedio de incidencias acumuladas previstas utilizando el método bootstrap.
    1. Vuelva a muestrear el conjunto de datos original (Dataset) con replace para generar el dataset de arranque (Dataset_in). Establezca un modelo de riesgo competitivo (mod.in_crr) con el conjunto de datos bootstrap. Utilice la función predict.crr para predecir tiempos de mod.in_crr y bucle b para generar suvall.in.
      B=b
      suvall.in <- lista()
      for(j en 1:B){
      Dataset_in <- Dataset[sample(c(1:nrow(Dataset)),nrow(Dataset),
      reemplazar = VERDADERO),]
      adjuntar(Dataset_ entrada)
      cov. en <- model.matrix(~factor1+ factor2+...) [,-1]
      Mod. en _crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov.in)
      detach(Dataset. interno)
      SUV. en <- predict.crr(mod. en _crr, cov)
      suvall.in[[j]] <- suv.in}
    2. Obtén el promedio de incidencias acumuladas pronosticadas en un mes determinado.
      CIF36ALL. < internas - vector(mode="numeric", length=nrow(Dataset))
      para (k en 1:B) {
      CIF36ALL. Interior<- CIF36ALL. Inner+ Suvall. inner[[k]][which(suvall. inner[[k]][,1]==36),][-1]
      }
      cif36.in <- cif36all.in/B
  2. Calcule el índice C mediante validación cruzada interna con la función rcorr.cens.
    rcorr. < internas- rcorr.cens(1-cif36.in,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
    cindex. < interior- rcorr. Interior[1]
  3. Calibrar utilizando la validación interna cruzada.
    NOTA: Los códigos de la curva de calibración del modelo de riesgo competidor con validación interna son similares a los códigos de la sección 4, mientras que el SUV fue reemplazado por suv.in.

7. Validación externa del modelo de riesgo competidor

  1. Obtenga las incidencias acumuladas previstas utilizando datos externos. Obtenga las incidencias acumuladas previstas con la matriz de variables de datos externos (cov.ex).
    suv.ex <- predict.crr(mod_crr,cov.ex)
    cif36.ex <- suv.ex [which(suv.ex $time=="36"),][-1]
  2. Calcule el índice C mediante validación externa.
    rcorr.ex <- rcorr.cens(1-cif36.ex,Surv(Dataset.ex$Survivalmonths,Dataset.ex$tumordeath))
    cindex.ex <- rcorr.ex[1]
  3. Calibrar mediante validación externa.
    NOTA: Los códigos de la curva de calibración del modelo de riesgo competidor con validación interna son similares a los códigos de la sección 4, mientras que el suv se reemplaza por suv.ex.

Resultados

En este estudio, los datos de pacientes con cáncer de mama se recuperaron de la base de datos SEER y sirvieron como datos de ejemplo. La base de datos SEER proporciona datos sobre el cáncer que representa alrededor del 34,6% de la población de los Estados Unidos, y se obtuvo permiso para acceder a la base de datos (número de referencia 12296-Nov2018).

Se establecieron dos nomogramas (Figura 1), ambos incluyendo tipo histológico, grado diferenciado, estadio T ...

Discusión

Este estudio comparó nomogramas de riesgo competitivos establecidos por dos métodos distintos y realizó una evaluación y validación de los nomogramas establecidos. Específicamente, este estudio proporcionó un tutorial paso a paso para establecer el nomograma basado en un método directo, así como para calcular el índice C y trazar las curvas de calibración.

El paquete rms en el software R es ampliamente utilizado para la construcción y evaluación de modelos de riesgo propo...

Divulgaciones

Los autores declaran que no tienen intereses contrapuestos.

Agradecimientos

El estudio fue apoyado por subvenciones del Proyecto del Plan de Ciencia y Tecnología Médica de la provincia de Zhejiang (números de subvención 2013KYA212), el programa general de la Fundación de Ciencias Naturales de la provincia de Zhejiang (número de subvención Y19H160126) y el programa clave de la Oficina Municipal de Ciencia y Tecnología de Jinhua (número de subvención 2016-3-005, 2018-3-001d y 2019-3-013).

Materiales

NameCompanyCatalog NumberComments
R softwareNoneNot ApplicableVersion 3.6.2 or higher 
Computer systemMicrosoft Windows 10 Windows 10 or higher

Referencias

  1. Andersen, P. K., Gill, R. D. Cox's regression model for counting processes: A large sample study. The Annals of Statistics. 10 (4), 1100-1120 (1982).
  2. Lubsen, J., Pool, J., vander Does, E. A practical device for the application of a diagnostic or prognostic function. Methods of Information in Medicine. 17 (2), 127-129 (1978).
  3. Harrell, F. E., Lee, K. L., Mark, D. B. Multivariable prognostic models: Issues in developing models, evaluating assumptions and adequacy, and measuring and reducing errors. Statistics In Medicine. 15 (4), 361-387 (1996).
  4. Hung, H., Chiang, C. -. T. Estimation methods for time-dependent AUC models with survival data. The Canadian Journal of Statistics / La Revue Canadienne de Statistique. 38 (1), 8-26 (2010).
  5. Moons, K. G. M., et al. Risk prediction models: I. Development, internal validation, and assessing the incremental value of a new (bio)marker. Heart. 98 (9), 683-690 (2012).
  6. Fu, J., et al. Real-world impact of non-breast cancer-specific death on overall survival in resectable breast cancer. Cancer. 123 (13), 2432-2443 (2017).
  7. Fine, J. P., Gray, R. J. A proportional hazards model for the subdistribution of a competing risk. Journal of the American Statistical Association. 94 (446), 496-509 (1999).
  8. Wu, L., et al. Establishing a competing risk regression nomogram model for survival data. Journal of Visualized Experiments. (164), e60684 (2020).
  9. Zhang, Z., Geskus, R. B., Kattan, M. W., Zhang, H., Liu, T. Nomogram for survival analysis in the presence of competing risks. Annals of Translational Medicine. 5 (20), 403 (2017).
  10. Zhang, Z. H., et al. Overview of model validation for survival regression model with competing risks using melanoma study data. Annals Of Translational Medicine. 6 (16), 325 (2018).
  11. Newson, R. Confidence intervals for rank statistics: Somers' D and extensions. Stata Journal. 6 (3), 309-334 (2006).
  12. Davison, A. C., Hinkley, D. V., Schechtman, E. Efficient bootstrap simulation. Biometrika. 73 (3), 555-566 (1986).
  13. Roecker, E. B. Prediction error and its estimation for subset-selected models. Technometrics. 33 (4), 459-468 (1991).
  14. Steyerberg, E. W., Harrell, F. E. Prediction models need appropriate internal, internal-external, and external validation. Journal of Clinical Epidemiology. 69, 245-247 (2016).
  15. Zhang, Z., Chen, L., Xu, P., Hong, Y. Predictive analytics with ensemble modeling in laparoscopic surgery: A technical note. Laparoscopic, Endoscopic and Robotic Surgery. 5 (1), 25-34 (2022).

Reimpresiones y Permisos

Solicitar permiso para reutilizar el texto o las figuras de este JoVE artículos

Solicitar permiso

Explorar más artículos

Investigaci n del c ncerN mero 187Modelo de riesgo competitivonomogramadiscriminaci ncalibraci nvalidaci n del modelo

This article has been published

Video Coming Soon

JoVE Logo

Privacidad

Condiciones de uso

Políticas

Investigación

Educación

ACERCA DE JoVE

Copyright © 2025 MyJoVE Corporation. Todos los derechos reservados