JoVE Logo

S'identifier

Un abonnement à JoVE est nécessaire pour voir ce contenu. Connectez-vous ou commencez votre essai gratuit.

Dans cet article

  • Résumé
  • Résumé
  • Introduction
  • Protocole
  • Résultats
  • Discussion
  • Déclarations de divulgation
  • Remerciements
  • matériels
  • Références
  • Réimpressions et Autorisations

Résumé

Le présent protocole décrit les codes en R pour évaluer les capacités de discrimination et d’étalonnage d’un modèle de risque concurrent, ainsi que les codes pour la validation interne et externe de celui-ci.

Résumé

Le modèle à risques proportionnels de Cox est largement appliqué pour les analyses de survie en milieu clinique, mais il n’est pas en mesure de faire face à de multiples résultats de survie. Différent du modèle traditionnel à risques proportionnels de Cox, les modèles de risque concurrents tiennent compte de la présence d’événements concurrents et de leur combinaison avec un nomogramme, un dispositif de calcul graphique, qui est un outil utile pour les cliniciens pour effectuer une prédiction pronostique précise. Dans cette étude, nous présentons une méthode pour établir le nomogramme de risque concurrent, c’est-à-dire l’évaluation de ses capacités de discrimination (c.-à-d. indice de concordance et aire sous la courbe) et d’étalonnage (c.-à-d. courbes d’étalonnage), ainsi que l’avantage net (c.-à-d. analyse de la courbe de décision). De plus, une validation interne à l’aide de rééchantillonnages bootstrap de l’ensemble de données original et une validation externe à l’aide d’un ensemble de données externe du nomogramme de risque concurrent établi ont également été effectuées pour démontrer sa capacité d’extrapolation. Le nomogramme du risque concurrent devrait être un outil utile pour les cliniciens afin de prédire le pronostic en tenant compte des risques concurrents.

Introduction

Au cours des dernières années, des facteurs pronostiques émergents ont été identifiés avec le développement de la médecine de précision, et les modèles pronostiques combinant des facteurs moléculaires et clinicopathologiques attirent de plus en plus l’attention dans les milieux cliniques. Cependant, les modèles non graphiques, tels que le modèle à risques proportionnels de Cox, avec les résultats des valeurs des coefficients, sont difficiles à comprendre pour les cliniciens1. En comparaison, un nomogramme est un outil de visualisation de modèles de régression (incluant le modèle de régression de Cox, le modèle de risque concurrent, etc.), un diagramme bidimensionnel conçu pour le calcul graphique approximatif d’une fonction mathématique2. Il permet d’évaluer différents niveaux de variables dans un modèle clinique et de calculer des scores de risque (RS) pour prédire le pronostic.

L’évaluation du modèle est essentielle dans la construction du modèle, et deux caractéristiques sont généralement acceptées pour l’évaluation : la discrimination et l’étalonnage. Dans les modèles cliniques, la discrimination fait référence à la capacité d’un modèle à séparer les personnes qui développent des événements de celles qui n’en développent pas, comme les patients qui meurent par rapport à ceux qui restent en vie, et l’indice de concordance (indice C) ou l’aire sous la courbe des caractéristiques opératoires du récepteur (ASC) sont généralement utilisés pour la caractériser 3,4. L’étalonnage est un processus de comparaison des probabilités prédites d’un modèle avec les probabilités réelles, et les courbes d’étalonnage ont été largement utilisées pour le représenter. De plus, la validation du modèle (validation interne et externe) est une étape importante dans la construction du modèle, et seuls les modèles validés peuvent être extrapolés5.

Le modèle à risques proportionnels de Cox est un modèle de régression utilisé en recherche médicale pour étudier les associations entre les facteurs pronostiques et le statut de survie. Cependant, le modèle à risques proportionnels de Cox ne tient compte que de deux statuts de résultat [Y (0, 1)], tandis que les sujets de l’étude font souvent face à plus de deux statuts et que des risques concurrents surviennent [Y (0, 1, 2)]1. La survie globale (SG), qui est définie comme le temps écoulé entre la date d’origine (p. ex. le traitement) et la date du décès, quelle qu’en soit la cause, est le critère d’évaluation le plus important dans l’analyse de la survie. Cependant, le système d’exploitation ne parvient pas à différencier les décès spécifiques au cancer des décès non spécifiques au cancer (par exemple, les événements cardiovasculaires et autres causes non liées), ignorant ainsi les risques concurrents6. Dans ces situations, le modèle de risque concurrent est préféré pour la prédiction du statut de survie avec la prise en compte des risques concurrents7. La méthodologie de construction et de validation des modèles à risques proportionnels de Cox est bien établie, alors qu’il y a eu peu de rapports concernant la validation de modèles de risque concurrents.

Dans notre étude précédente, un nomogramme de risque concurrent spécifique, une combinaison d’un nomogramme et d’un modèle de risque concurrent, et une estimation du score de risque basée sur un modèle de risque concurrent ont été établis8. Cette étude vise à présenter différentes méthodes d’évaluation et de validation du nomogramme de risque concurrent établi, qui devrait servir d’outil utile aux cliniciens pour prédire le pronostic en tenant compte des risques concurrents.

Protocole

La base de données Surveillance, Epidemiology, and End Results (SEER) est une base de données sur le cancer en libre accès qui ne contient que des données anonymisées sur les patients (ID SEER : 12296-Nov2018). Par conséquent, cette étude a été exemptée de l’approbation du comité d’examen de l’hôpital affilié Jinhua, École de médecine de l’Université du Zhejiang.

1. Préparation des données et des emballages R

  1. Préparez et importez les données.
    > Ensemble de données <- lire.csv(« .../Données sur le cancer du sein.xlsx ») #Import données .
    REMARQUE: Les données sont téléchargées dans le fichier supplémentaire 1.
  2. Installez et chargez les packages R.
    > paquets <- c(« rms »,"cmprsk »,"mstate »,"survival »,"riskRegression », »
    prodlim »)
    > req.pcg <- function(pcg){
    NEW <- PCG[!( pcg %in% installed.packages()[, « Package"])]
    if (length(new)) install.packages(new, dependencies = T)
    sapply(pcg, require, ch = T)
    }
    > req.pcg(packages)

    Remarque : Effectuez les procédures suivantes basées sur le logiciel R (version 3.6.2) à l’aide des packages rms, cmprsk, mstate, survival, riskRegression et prodlim (http://www.r-projectrg/).

2. Établir des nomogrammes de risque concurrents selon deux méthodes distinctes

  1. Établir le nomogramme de risque concurrent de manière directe.
    > mod_cph <- cph(Surv(Survivalmonths, statut) ~ facteur1+ facteur2+...,
    x=T, y=T, surv=T, data=Dataset)
    > nom <- nomogram(mod_cph, fun=list(function(x) 1-surv_cph(36, x)...),
    funlabel=c(« 3-year event1 Prob. » ...), lp=F)
    #Take le 36e mois à titre d’exemple.
    > mod_crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov)
    > score <- log(log((1-real.3y),(1-cif.min36)))/(maxbeta/100)
    > plot(nom)
  2. Établir le nomogramme de risque concurrent dans une méthode pondérée.
    > df.w <- crprep(« Survivalmonths », » fstatus »,
    data=Dataset, trans=c(1,2), cens=0,
    keep=c(« fact1 », » factor2 »...))
    > mod.w <- cph(Surv(Tstart, Tstop, status==1) ~ fact1+factor2+...,
    data=df.w, weight=weight.cens, subset=failcode==1, surv=T)
    > nom.w <- nomogram(mod.w...)

3. Capacité de discrimination du nomogramme du risque concurrent

  1. Indice C pour la discrimination
    1. Ajustez le cov de la matrice dans le modèle de risque concurrent mod_crr. et obtenez un SUV matriciel prédit.
      > SUV <- predict.crr(mod_crr, cov)
    2. Obtenez les incidences cumulées dans un certain mois à partir du SUV et calculez l’indice C avec la fonction rcorr.cens.
      > CIF36 <- SUV[which(suv[,1]==36),][-1]
      > rcorr <- rcorr.cens(1-cif36,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
      > cindex <- rcorr[1]
  2. AUC pour discrimination
    1. Évaluez les performances prédictives du modèle de risque concurrent à l’aide de la fonction Score (package riskRegression).
      > fgr.w <- FGR(Hist(Survivalmonths, fstatus) ~ factor1+ factor2+..., data=Dataset, cause=1)
      > score <- Score(list(« Fine-Gray » = fgr.w),
    2. Extrayez l’AUC du « score ».
      > score$AUC

4. Capacité d’étalonnage des modèles de risque concurrents

  1. Courbes d’étalonnage avec un intervalle de confiance à 95 % du modèle de risque concurrent
    1. Obtenez une trame de données avec les incidences cumulées de chaque individu dans un certain temps d’échec.
      > cif36 <- data.frame(cif36) #Take le 36e mois à titre d’exemple.
      > colnames(cif36.36_o)<-c(« 36m »)
    2. Divisez la cohorte en fonction des incidences cumulatives estimées en cinq sous-groupes et calculez les incidences cumulatives moyennes prévues de chaque sous-groupe.
      > groupe36 <- cut(cif36$'36m',
      quantile(CIF36$'36m', seq(0, 1, 0.2)),
      include.lowest = VRAI, étiquettes = 1:5)
      > moyenne36 <- as.vector(by(cif36 $'36m', group36, mean))
    3. Calculez les incidences cumulées observées, c’est-à-dire les incidences cumulatives réelles, à l’aide de la fonction cuminc, puis obtenez les incidences cumulées observées avec un intervalle de confiance de 95% dans un certain temps de défaillance.
      > 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. Tracez la courbe d’étalonnage avec les incidences cumulées prévues comme l’axe des x et les incidences cumulées observées comme l’axe des y en utilisant la fonction ggplot.
      > ggplot(df)+ geom_point(aes(x=mean36,y=obs36),col="red »)+
      geom_point(aes(x=mean36,y=obs36),col="red »,pch=4)+
      geom_line(col="red »,aes(x=mean36,y=obs36))+
      geom_errorbar(col="rouge »,aes(x=moyenne36,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. Courbe d’étalonnage avec scores de risque du modèle de risque concurrent
    1. Évaluez chaque niveau de toutes les variables et obtenez le RS total.
      > Dataset$factor1[Dataset$factor1==1] <- factor1.scale["Factor1_level1"]
      >
      ... #For exemple, Dataset$histology[Dataset$histology==1]<-histology.scale["Histology1"]
      > Dataset$rs <- Dataset$factor1+Dataset$factor2+Dataset$factor3+...
      REMARQUE : Obtenez le RS total pour chaque patient en additionnant les points de chaque variable.
    2. Comptez les fréquences et calculez les incidences cumulatives observées des différents scores de risque totaux.
      > 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 <- sous-ensemble(Dataset,Dataset$rs== rs.freq [i,1])
      cif.dataset <- cuminc(dataset$Survivalmonths,dataset$death3)
      cif36.dataset <- points temporels(cif.dataset,36)
      obs.36[i] <- cif36.dataset$est[1]}
    3. Définissez la plage de l’axe des x et calculez les incidences cumulatives prévues des scores de risque totaux.
      > RS <- range(nom$total.points)
      > x.36 <- seq(min(RS),max(RS),0.01)
      > pré.36 <- 1-(1-cif.min36)^exp(x.36*maxbeta/100)
    4. Tracez la courbe d’étalonnage avec les scores de risque.
      > plot(x.36, pre.36, type='l'...)
      > par(nouveau=VRAI)
      > Plot(as.vector(rs.freq[,1]), obs.36... )

5. Analyse de la courbe de décision des modèles de risque concurrents

  1. Source la fonction stdca pour effectuer l’analyse de la courbe de décision.
    > source(« stdca. R")
  2. Extrayez les équations polynomiales du nomogramme pour calculer la probabilité de survie.
    > nomogramEx(nomo = nom)
    > Dataset$predictors <- A * (Dataset$rs ^3) + B * (Dataset$rs ^2) + C * Dataset$rs + D
    #predictors sont des probabilités prédites de décès par cancer calculées par le nomogramme établi
  3. Effectuez l’analyse de la courbe de décision.
    > stdca(data = Dataset, outcome = « status », ttoutcome = « Survivalmonth », timepoint = 36,
    predictors = « predictors », cmprsk = TRUE, smooth = FALSE, probability = FALSE)

    REMARQUE : Pour évaluer un résultat en présence d’un risque concurrent, TRUE doit être choisi pour cmprsk.

6. Validation interne à l’aide de la méthode bootstrap

  1. Obtenez la moyenne des incidences cumulatives prévues à l’aide de la méthode bootstrap.
    1. Rééchantillonnez le jeu de données d’origine (Dataset) avec replace pour générer le jeu de données bootstrap (Dataset_in). Établissez un modèle de risque concurrent (mod.in_crr) avec l’ensemble de données bootstrap. Utilisez la fonction predict.crr pour prédire mod.in_crr et boucler b fois pour générer suvall.in.
      B=b
      suvall.in <- liste()
      for(j dans 1:B){
      Dataset_in <- Jeu de données[échantillon(c(1:nrow(Jeu de données)),nrow(Jeu de données),
      replace = TRUE),]
      attacher (Dataset_ in)
      Cov. dans <- model.matrix(~factor1+ factor2+...) [,-1]
      Mod. in _crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov.in)
      detach(Dataset. inner)
      SUV. dans <- predict.crr(mod. en _crr, cov)
      suvall.in[[j]] <- suv.in}
    2. Obtenez la moyenne des incidences cumulatives prévues au cours d’un mois donné.
      Cif36all. inner <- vector(mode="numeric », length=nrow(Dataset))
      for (k in 1:B) {
      Cif36all. intérieur<- cif36all. inner+ suvall. inner[[k]][which(suvall. inner[[k]][,1]==36),][-1]
      }
      cif36.in <- cif36all.in/B
  2. Calculez l’indice C en utilisant la validation croisée interne avec la fonction rcorr.cens.
    rcorr. inner <- rcorr.cens(1-cif36.in,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
    cindex. < interne - rcorr. intérieur[1]
  3. Calibrer à l’aide de la validation interne croisée.
    REMARQUE : Les codes de la courbe d’étalonnage du modèle de risque concurrent avec validation interne sont similaires aux codes de la section 4, tandis que le VUS a été remplacé par suv.in.

7. Validation externe du modèle de risque concurrent

  1. Obtenez les incidences cumulatives prévues à l’aide de données externes. Obtenez les incidences cumulatives prévues avec la matrice des variables de données externes (cov.ex).
    suv.ex <- predict.crr(mod_crr,cov.ex)
    cif36.ex <- suv.ex [which(suv.ex $time=="36 »),][-1]
  2. Calculez l’indice C à l’aide d’une validation externe.
    rcorr.ex <- rcorr.cens(1-cif36.ex,Surv(Dataset.ex$Survivalmonths,Dataset.ex$tumordeath))
    cindex.ex <- rcorr.ex[1]
  3. Calibrer à l’aide d’une validation externe.
    REMARQUE: Les codes de la courbe d’étalonnage du modèle de risque concurrent avec validation interne sont similaires aux codes de la section 4, tandis que suv est remplacé par suv.ex.

Résultats

Dans cette étude, les données des patientes atteintes d’un cancer du sein ont été extraites de la base de données SEER et ont servi d’exemple. La base de données SEER fournit des données sur le cancer représentant environ 34,6% de la population des États-Unis, et l’autorisation d’accéder à la base de données a été obtenue (numéro de référence 12296-Nov2018).

Deux nomogrammes (figure 1), tous deux comprenant le type histologique, le grade d...

Discussion

Cette étude a comparé des nomogrammes de risque concurrents établis par deux méthodes distinctes et a procédé à l’évaluation et à la validation des nomogrammes établis. Plus précisément, cette étude a fourni un tutoriel étape par étape pour établir le nomogramme basé sur une méthode directe, ainsi que pour calculer l’indice C et tracer les courbes d’étalonnage.

Le progiciel efficace du logiciel R est largement utilisé pour la construction et l’évaluation d...

Déclarations de divulgation

Les auteurs déclarent qu’ils n’ont pas d’intérêts concurrents.

Remerciements

L’étude a été financée par des subventions du Medical Science & Technology Plan Project de la province du Zhejiang (numéros de subvention 2013KYA212), du programme général de la Fondation des sciences naturelles de la province du Zhejiang (numéro de subvention Y19H160126) et du programme clé du Bureau municipal des sciences et technologies de Jinhua (numéro de subvention 2016-3-005, 2018-3-001d et 2019-3-013).

matériels

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

Références

  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).

Réimpressions et Autorisations

Demande d’autorisation pour utiliser le texte ou les figures de cet article JoVE

Demande d’autorisation

Explorer plus d’articles

Recherche sur le cancernum ro 187Mod le de risque concurrentnomogrammediscriminationtalonnagevalidation de mod le

This article has been published

Video Coming Soon

JoVE Logo

Confidentialité

Conditions d'utilisation

Politiques

Recherche

Enseignement

À PROPOS DE JoVE

Copyright © 2025 MyJoVE Corporation. Tous droits réservés.