Trama di previsione diversa dal coxph di sopravvivenza e rms cph


9

Ho creato la mia versione leggermente migliorata del termplot che uso in questo esempio, puoi trovarla qui . Ho precedentemente pubblicato su SO, ma più ci penso e credo che ciò sia probabilmente più correlato all'interpretazione del modello di rischi proporzionali di Cox che alla codifica effettiva.

Il problema

Quando guardo un diagramma Hazard Ratio mi aspetto di avere un punto di riferimento in cui l'intervallo di confidenza è naturalmente 0 e questo è il caso quando uso cph () dal rms packagema non quando uso coxph () da survival package. Il comportamento corretto è di coxph () e in caso affermativo qual è il punto di riferimento? Inoltre, la variabile fittizia nel coxph () ha un intervallo e il valore è diverso da ?e0

Esempio

Ecco il mio codice di prova:

# Load libs
library(survival)
library(rms)

# Regular survival
survobj <- with(lung, Surv(time,status))

# Prepare the variables
lung$sex <- factor(lung$sex, levels=1:2, labels=c("Male", "Female"))
labels(lung$sex) <- "Sex"
labels(lung$age) <- "Age"

# The rms survival
ddist <- datadist(lung)
options(datadist="ddist")
rms_surv_fit <- cph(survobj~rcs(age, 4)+sex, data=lung, x=T, y=T)

La trama dei cph

Questo codice:

termplot2(rms_surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05,
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("cph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

dà questa trama:

cph () termplot2

Le trame del coxph

Questo codice:

termplot2(surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05, 
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("coxph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

dà questa trama:

coxph () termplot2

Aggiornare

Come suggerito da @Frank Harrell e dopo aver adattato il suggerimento nel suo recente commento, ho ottenuto:

p <- Predict(rms_surv_fit, age=seq(50, 70, times=20), 
             sex=c("Male", "Female"), fun=exp)
plot.Predict(p, ~ age | sex,
             col="black",
             col.fill=gray(seq(.8, .75, length=5)))

Questo ha dato questa trama molto bella:

Trama reticolare

Ho guardato contrast.rms di nuovo dopo il commento e ho provato questo codice che ha dato una trama ... anche se probabilmente c'è molto di più che si può fare :-)

w <- contrast.rms(rms_surv_fit, 
                  list(sex=c("Male", "Female"), 
                       age=seq(50, 70, times=20)))

xYplot(Cbind(Contrast, Lower, Upper) ~ age | sex, 
       data=w, method="bands")

Ha dato questa trama:

La trama del contrasto

AGGIORNAMENTO 2

Il prof. Thernau è stato così gentile da commentare la mancanza di confidenza di una vita:

Le spline di smoothing in coxph, come quelle in gam, sono normalizzate in modo tale che la somma (previsione) = 0. Quindi non ho un singolo punto fisso per il quale la varianza è molto piccola.

Anche se non ho ancora familiarità con GAM, questo sembra rispondere alla mia domanda: questo sembra essere un problema di interpretazione.


3
Diversi commenti Per prima cosa leggi biostat.mc.vanderbilt.edu/Rrms per le differenze tra i pacchetti rms e Design. In secondo luogo, utilizzare plot () anziché plot.Predict per salvare il lavoro. In terzo luogo è possibile generare facilmente grafici per entrambi i sessi, ad esempio utilizzando Predict (adattamento, età, sesso, divertimento = exp) # exp = anti-log; quindi traccia (risultato) o trama (risultato, ~ età | sesso). Non si utilizza "x = NA" in Predict. rms usa la grafica reticolare quindi i soliti parametri grafici par e mfrow non si applicano. Vedi esempi nel mio volantino sul corso rms su biostat.mc.vanderbilt.edu/rms . Per contrast.rms studia di più la documentazione.
Frank Harrell,

1
Grazie mille per il tuo contributo. Ho aggiornato il codice con esempi migliori e aggiunto il prof. La risposta di Thernau. PS Sono davvero entusiasta del fatto che tu stia pianificando una nuova versione del libro, estendere la sezione di distorsione del punto di riferimento sarà molto utile come riferimento
Max Gordon,

1
Puoi usare plote contrastinvece di plot.Predicte contrast.rms. Vorrei usare byo lengthdentro seqinvece timese darei contrastdue elenchi in modo da specificare esattamente cosa viene contrapposto. Puoi anche usare l'ombreggiatura con xYplotper le bande di confidenza.
Frank Harrell,

1
Grazie. Mi piace usare la trama.Predict perché poi ottengo il giusto aiuto in RStudio - qualcosa che nel mio caso è molto più vitale del tempo necessario per scrivere il nome completo della funzione (usando il completamento automatico (scheda) In realtà non lo faccio perdere così tanto tempo).
Max Gordon,

Risposte:


5

Penso che dovrebbe esserci sicuramente un punto in cui l'intervallo di confidenza è pari a zero. Potresti anche provare un terzo modo che consiste nell'utilizzare esclusivamente le funzioni rms. C'è un esempio nel file della guida per contrast.rms per ottenere un grafico del rapporto di rischio. Si inizia con il commento # mostra stime separate per trattamento e sesso. Dovrai eseguire l'anti-log per ottenere il rapporto.


1
La ringrazio per la risposta. Pensi che dovrei menzionare questo problema al prof. Terry Therneau se deve essere considerato come un bug / errata interpretazione? Ho anche esaminato le soluzioni grafiche nel pacchetto rms, non riesco a capire bene l'uso di contrast.rms per i grafici. The plot.Predict sembra fare un output simile a un termplot ma non riesco a farlo esattamente quello che voglio ... vedi il mio aggiornamento alla domanda.
Max Gordon,

2
Sarebbe bello scriverlo per informarsi e ringraziarlo per il passaggio all'aeroporto che mi ha dato pochi minuti fa. Commenterò sopra le altre domande.
Frank Harrell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.