Een abonnement op JoVE is vereist om deze inhoud te bekijken. Log in of start vandaag met uw gratis proefperiode.

Methodenartikel

Een R-gebaseerde landschapsvalidatie van een concurrerend risicomodel

2.5K weergaven

DOI:

10.3791/64018

16 september 2022

* These authors contributed equally

In dit artikel

Samenvatting

Het huidige protocol beschrijft codes in R voor het evalueren van de discriminatie- en kalibratiecapaciteiten van een concurrerend risicomodel, evenals codes voor de interne en externe validatie ervan.

Samenvatting

Het Cox proportioneel gevarenmodel wordt veel toegepast voor overlevingsanalyses in klinische omgevingen, maar het is niet in staat om meerdere overlevingsuitkomsten aan te kunnen. Anders dan het traditionele Cox proportionele gevarenmodel, houden concurrerende risicomodellen rekening met de aanwezigheid van concurrerende gebeurtenissen en hun combinatie met een nomogram, een grafisch rekenapparaat, dat een nuttig hulpmiddel is voor clinici om een nauwkeurige prognostische voorspelling uit te voeren. In deze studie rapporteren we een methode voor het vaststellen van het concurrerende risiconomogram, dat wil zeggen de evaluatie van de discriminatie (d.w.z. concordantie-index en oppervlakte onder de curve) en kalibratiemogelijkheden (d.w.z. kalibratiecurven), evenals het nettovoordeel (d.w.z. beslissingscurveanalyse). Daarnaast werden interne validatie met behulp van bootstrap-resamples van de oorspronkelijke dataset en externe validatie met behulp van een externe dataset van het gevestigde concurrerende risiconomogram ook uitgevoerd om het extrapolatievermogen ervan aan te tonen. Het concurrerende risiconomogram moet dienen als een nuttig hulpmiddel voor clinici om de prognose te voorspellen met inachtneming van concurrerende risico's.

Inleiding

In de afgelopen jaren zijn opkomende prognostische factoren geïdentificeerd met de ontwikkeling van precisiegeneeskunde, en prognostische modellen die moleculaire en clinicopathologische factoren combineren, trekken steeds meer aandacht in klinische omgevingen. Niet-grafische modellen, zoals het Cox proportioneel gevarenmodel, met resultaten van coëfficiëntwaarden, zijn echter moeilijk te begrijpen voor clinici1. Ter vergelijking: een nomogram is een visualisatietool van regressiemodellen (inclusief het Cox-regressiemodel, concurrerend risicomodel, enz.), Een tweedimensionaal diagram dat is ontworpen voor de geschatte grafische berekening van een wiskundige functie2. Het maakt de waardering van verschillende niveaus van variabelen in een klinisch model en de berekening van risicoscores (RS) mogelijk om de prognose te voorspellen.

Modelevaluatie is essentieel in modelbouw en twee kenmerken worden algemeen aanvaard voor evaluatie: discriminatie en kalibratie. In klinische modellen verwijst discriminatie naar het vermogen van een model om individuen die gebeurtenissen ontwikkelen te scheiden van degenen die dat niet doen, zoals patiënten die sterven versus degenen die in leven blijven, en de concordantie-index (C-index) of het gebied onder de operationele karakteristieke curve van de ontvanger (AUC) worden meestal gebruikt om het te karakteriseren 3,4. Kalibratie is een proces waarbij de voorspelde waarschijnlijkheden van een model worden vergeleken met de werkelijke waarschijnlijkheden, en kalibratiecurven zijn op grote schaal gebruikt om het weer te geven. Daarnaast is modelvalidatie (interne en externe validatie) een belangrijke stap in de modelbouw en kunnen alleen gevalideerde modellen verder worden geëxtrapoleerd5.

Het Cox proportioneel gevarenmodel is een regressiemodel dat in medisch onderzoek wordt gebruikt voor het onderzoeken van de associaties tussen prognostische factoren en overlevingsstatus. Het Cox proportioneel gevarenmodel houdt echter slechts rekening met twee statussen van uitkomst [Y (0, 1)], terwijl proefpersonen vaak met meer dan twee statussen worden geconfronteerd en concurrerende risico's ontstaan [Y (0, 1, 2)]1. Totale overleving (OS), die wordt gedefinieerd als de tijd vanaf de datum van oorsprong (bijv. Behandeling) tot de datum van overlijden als gevolg van welke oorzaak dan ook, is het belangrijkste eindpunt in overlevingsanalyse. Het besturingssysteem slaagt er echter niet in om kankerspecifieke sterfte te onderscheiden van niet-kankerspecifieke sterfte (bijv. Cardiovasculaire gebeurtenissen en andere niet-gerelateerde oorzaken), waardoor concurrerende risico's worden genegeerd6. In deze situaties heeft het concurrerende risicomodel de voorkeur voor de voorspelling van de overlevingsstatus met inachtneming van concurrerende risico's7. De methodologie voor het construeren en valideren van Cox proportionele gevarenmodellen is goed ingeburgerd, terwijl er weinig rapporten zijn geweest over de validatie van concurrerende risicomodellen.

In onze vorige studie werden een specifiek concurrerend risiconomogram, een combinatie van een nomogram en een concurrerend risicomodel en een schatting van de risicoscore op basis van een concurrerend risicomodel vastgesteld8. Deze studie heeft tot doel verschillende methoden voor evaluatie en validatie van het gevestigde concurrerende risiconomogram te presenteren, wat zou moeten dienen als een nuttig hulpmiddel voor clinici om de prognose te voorspellen met inachtneming van concurrerende risico's.

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Protocol

De Surveillance, Epidemiology, and End Results (SEER) database is een open-access kankerdatabase die alleen gedeïdentificeerde patiëntgegevens bevat (SEER ID: 12296-Nov2018). Daarom werd deze studie vrijgesteld van de goedkeuring van de beoordelingsraad van het gelieerde Jinhua-ziekenhuis, Zhejiang University School of Medicine.

1. Gegevensvoorbereiding en voorbereiding van R-pakketten

  1. Bereid de gegevens voor en importeer ze.
    > Dataset <- lees.csv(".../borstkankergegevens.xlsx") #Import gegevens.
    OPMERKING: De gegevens worden geüpload in aanvullend bestand 1.
  2. Installeer en laad de R-pakketten.
    > pakketten <- c("rms","cmprsk","mstate","survival","riskRegression","
    prodlim")
    > req.pcg <- functie(pcg){
    Nieuwe <- PCG[!( pcg %in% installed.packages()[, "Pakket"])]
    if (length(new)) install.packages(new, dependencies = T)
    sapply (pcg, vereisen, ch = T)
    }
    > req.pcg(pakketten)

    OPMERKING: Voer de volgende procedures uit op basis van R-software (versie 3.6.2) met behulp van de pakketten rms, cmprsk, mstate, survival, riskRegression en prodlim (http://www.r-projectrg/).

2. Stel concurrerende risiconomogrammen vast in twee verschillende methoden

  1. Stel het concurrerende risiconomogram vast in een directe methode.
    > mod_cph <- cph(Surv(Overlevingsmaanden, 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("3-jarig evenement1 Prob." ...), lp=F)
    #Take de 36e maand als voorbeeld.
    > mod_crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov)
    > score <- log(log((1-real.3y),(1-cif.min36)))/(maxbeta/100)
    > grondstuk(nom.)
  2. Stel het concurrerende risiconomogram vast in een gewogen methode.
    > 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. Discriminatievermogen van het concurrerende risiconomogram

  1. C-index voor discriminatie
    1. Plaats de matrix cov in het concurrerende risicomodel mod_crr. en krijg een voorspelde matrix suv.
      > SUV <- predict.crr(mod_crr, cov)
    2. Haal de cumulatieve incidenties in een bepaalde maand uit suv en bereken de C-index met de functie rcorr.cens.
      > CIF36 <- SUV[Which(SUV[,1]==36),][-1]
      > rcorr <- rcorr.cens(1-cif36,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
      > cindex <- rcorr[1]
  2. AUC voor discriminatie
    1. Scoor de voorspellende prestaties van het concurrerende risicomodel met behulp van de functie Score (riskRegression package).
      > fgr.w <- FGR(Hist(Survivalmonths, fstatus) ~ factor1+ factor2+..., data=Dataset, cause=1)
      > score <- Score(lijst("Fijn-Grijs" = fgr.w),
    2. Haal de AUC uit de "score".
      > score$AUC

4. Kalibratievermogen van concurrerende risicomodellen

  1. Kalibratiecurven met een betrouwbaarheidsinterval van 95% van het concurrerende risicomodel
    1. Krijg een gegevensframe met de cumulatieve incidenties van elk individu in een bepaalde faaltijd.
      > cif36 <- data.frame(cif36) #Take de 36e maand als voorbeeld.
      > colnames(cif36.36_o)<-c("36m")
    2. Verdeel het cohort volgens de geschatte cumulatieve incidentie in vijf subgroepen en bereken de gemiddelde voorspelde cumulatieve incidentie van elke subgroep.
      > groep36 <- cut(CIF36$'36M',
      kwantiel(cif36$'36m', seq(0, 1, 0.2)),
      include.lowest = TRUE, labels = 1:5)
      > mean36 <- as.vector(by(cif36 $'36m', group36, mean))
    3. Bereken de waargenomen cumulatieve incidenties, dat wil zeggen de werkelijke cumulatieve incidenties, met behulp van de functie cuminc, en krijg vervolgens de waargenomen cumulatieve incidenties met een 95% betrouwbaarheidsinterval in een bepaalde faaltijd.
      > 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. Plot de kalibratiecurve met de voorspelde cumulatieve incidenties als de x-as en de waargenomen cumulatieve incidenties als de y-as met behulp van de functie 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="red",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. Kalibratiecurve met risicoscores van het concurrerende risicomodel
    1. Waardeer elk niveau van alle variabelen en verkrijg de totale RS.
      > Dataset$factor1[Dataset$factor1==1] <- factor1.scale["Factor1_level1"]
      >
      ... #For voorbeeld, Dataset$histology[Dataset$histology==1]<-histology.scale["Histology1"]
      > Dataset$rs <- Dataset$factor1+Dataset$factor2+Dataset$factor3+...
      OPMERKING: Verkrijg de totale RS voor elke patiënt door de punten van elke variabele op te tellen.
    2. Tel de frequenties en bereken de waargenomen cumulatieve incidenties van de verschillende totale risicoscores.
      > rs.freq <- as.data.frame(table(Dataset$rs))
      > obs.36 <- vector(mode="numeriek", length=nrow(rs.freq))
      > voor (i in 1: nrow(rs.freq)) {
      dataset <- subset(Dataset,Dataset$rs== rs.freq [i,1])
      cif.dataset <- cuminc(dataset$Survivalmonths,dataset$death3)
      cif36.dataset <- timepoints(cif.dataset,36)
      obs.36[i] <- cif36.dataset$est[1]}
    3. Stel het bereik van de x-as in en bereken de voorspelde cumulatieve incidentie van de totale risicoscores.
      > RS <- bereik(nom$total.points)
      > x.36 <- seq (min (RS), max (RS), 0.01)
      > pre.36 <- 1-(1-cif.min36)^exp(x.36*maxbeta/100)
    4. Plot de kalibratiecurve met risicoscores.
      > standplaats(x.36, pre.36, type='l'...)
      > par(new=TRUE)
      > plot(as.vector(rs.freq[,1]), obs.36... )

5. Besliscurve-analyse van concurrerende risicomodellen

  1. Bron de stdca-functie om de beslissingscurveanalyse uit te voeren.
    > source("stdca. R")
  2. Haal de polynomiale vergelijkingen uit het nomogram om de overlevingskans te berekenen.
    > nomogramEx(nomo = nom)
    > Dataset$predictors <- A * (Dataset$rs ^3) + B * (Dataset$rs ^2) + C * Dataset$rs + D
    #predictors zijn voorspelde waarschijnlijkheden van kankerspecifieke sterfte berekend door het vastgestelde nomogram
  3. Voer de beslissingscurveanalyse uit.
    > stdca(data = Dataset, outcome = "status", ttoutcome = "Survivalmonths", timepoint = 36,
    voorspellers = "voorspellers", cmprsk = WAAR, glad = ONWAAR, waarschijnlijkheid = ONWAAR)

    OPMERKING: Voor het evalueren van een uitkomst in de aanwezigheid van een concurrerend risico, moet TRUE worden gekozen voor cmprsk.

6. Interne validatie met behulp van de bootstrap-methode

  1. Krijg de gemiddelde voorspelde cumulatieve incidenties met behulp van de bootstrap-methode.
    1. Wijzig het aantal pixels van de oorspronkelijke gegevensset (gegevensset) met vervangen om de bootstrapgegevensset te genereren (Dataset_in). Stel een concurrerend risicomodel (mod.in_crr) op met de bootstrap-dataset. Gebruik de functie predict.crr om mod.in_crr te voorspellen en loop b-tijden om suvall.in te genereren.
      B=b
      suvall.in <- list()
      voor(j in 1:B){
      Dataset_in <- Dataset[sample(c(1:nrow(Dataset)),nrow(Dataset),
      vervangen = WAAR),]
      bijvoegen(Dataset_ in)
      cov. in <- model.matrix(~factor1+ factor2+...) [,-1]
      Mod. in _crr <- crr(Survivalmonths, fstatus, failcode=1, cov1=cov.in)
      loskoppelen(Dataset. binnen)
      SUV. In <- predict.crr(mod. in _crr, cov)
      suvall.in[[j]] <- suv.in}
    2. Krijg de gemiddelde voorspelde cumulatieve incidenties in een bepaalde maand.
      CIF36ALL. inner <- vector(mode="numeriek", length=nrow(Dataset))
      voor (k in 1:B) {
      CIF36ALL. Binnen<- CIF36ALL. Binnen+ Suvall. inner[[k]][which(suvall. inner[[k]][,1]==36),][-1]
      }
      cif36.in <- cif36all.in/B
  2. Bereken de C-index met behulp van interne kruisvalidatie met de functie rcorr.cens.
    Rcorr. innerlijke <- rcorr.cens(1-cif36.in,Surv(Dataset$Survivalmonths,Dataset$tumordeath))
    Cindex. Innerlijke <- Rcorr. binnen[1]
  3. Kalibreer met behulp van de interne kruisvalidatie.
    OPMERKING: De codes van de kalibratiecurve van het concurrerende risicomodel met interne validatie zijn vergelijkbaar met de codes in sectie 4, terwijl suv werd vervangen door suv.in.

7. Externe validatie van het concurrerende risicomodel

  1. Krijg de voorspelde cumulatieve incidenties met behulp van externe gegevens. Krijg de voorspelde cumulatieve incidenties met de matrix van externe gegevensvariabelen (cov.ex).
    suv.ex <- predict.crr(mod_crr,cov.ex)
    cif36.ex <- suv.ex [die(suv.ex $time=="36"),][-1]
  2. Bereken de C-index met behulp van externe validatie.
    rcorr.ex <- rcorr.cens(1-cif36.ex,Surv(Dataset.ex$Survivalmonths,Dataset.ex$tumordeath))
    cindex.ex <- rcorr.ex[1]
  3. Kalibreer met behulp van externe validatie.
    OPMERKING: De codes van de kalibratiecurve van het concurrerende risicomodel met interne validatie zijn vergelijkbaar met de codes in sectie 4, terwijl suv wordt vervangen door suv.ex.

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Resultaten

In deze studie werden gegevens van patiënten met borstkanker uit de SEER-database gehaald en dienden als voorbeeldgegevens. De SEER-database biedt gegevens over kanker die ongeveer 34,6% van de bevolking van de Verenigde Staten vertegenwoordigen en toestemming om toegang te krijgen tot de database werd verkregen (referentienummer 12296-nov2018).

Twee nomogrammen (figuur 1), beide met histologisch type, gedifferentieerde graad, T-stadium en N-stadium, werden vastge...

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Discussie

Deze studie vergeleek concurrerende risiconomogrammen die met twee verschillende methoden waren vastgesteld en voerde evaluatie en validatie van de gevestigde nomogrammen uit. In het bijzonder bood deze studie een stapsgewijze zelfstudie voor het vaststellen van het nomogram op basis van een directe methode, evenals het berekenen van de C-index en het uitzetten van de kalibratiecurven.

Het rms-pakket in R-software wordt veel gebruikt voor de constructie en evaluatie van Cox-proportion...

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Openbaarmakingen

De auteurs verklaren dat ze geen tegenstrijdige belangen hebben.

Dankbetuigingen

De studie werd ondersteund door subsidies van het Medical Science & Technology Plan Project van de provincie Zhejiang (subsidienummers 2013KYA212), het algemene programma van de Zhejiang Province Natural Science Foundation (subsidienummer Y19H160126) en het belangrijkste programma van het Jinhua Municipal Science & Technology Bureau (subsidienummer 2016-3-005, 2018-3-001d en 2019-3-013).

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Materialen

Lijst van materialen gebruikt in dit artikel
NaamBedrijfCatalogusnummerOpmerkingen
R softwareGeenNiet van toepassingVersie 3.6.2 of hoger 
ComputersysteemMicrosoft Windows 10 Windows 10 of hoger

Referenties

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

Toegang beperkt. Log in of start een proefperiode om deze inhoud te bekijken.

Herprints en machtigingen

Tags

Cox proportional hazards-modeloverlevingsanalysenomogram voor concurrerende risico'skalibratiecurveberekening van de C-indexbootstrap-validatieexterne validatiedecision curve-analyseRisk Regression Package