Qualcuno può spiegarmi il mio modello Cox in un inglese semplice?
Ho adattato il seguente modello di regressione di Cox a tutti i miei dati usando la cph
funzione. I miei dati vengono salvati in un oggetto chiamato Data
. Le variabili w
, x
e y
sono continue; z
è un fattore di due livelli. Il tempo è misurato in mesi. Ad alcuni dei miei pazienti mancano i dati per la variabile z
( NB : ho debitamente notato il suggerimento del Dr. Harrell, di seguito, che imputo questi valori in modo da evitare di influenzare il mio modello e lo farò in futuro).
> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)
Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event) w x y z
0 0 0 0 14
Model Tests Discrimination
Indexes
Obs 152 LR chi2 8.33 R2 0.054
Events 64 d.f. 4 g 0.437
Center 0.7261 Pr(> chi2) 0.0803 gr 1.548
Score chi2 8.07
Pr(> chi2) 0.0891
Coef S.E. Wald Z Pr(>|Z|)
w -0.0133 0.0503 -0.26 0.7914
x -0.0388 0.0351 -1.11 0.2679
y -0.0363 0.0491 -0.74 0.4600
z=1 0.3208 0.2540 1.26 0.2067
Ho anche provato a testare l'assunzione di rischi proporzionali usando il cox.zph
comando di seguito, ma non so come interpretarne i risultati. Mettendo plot()
attorno al comando viene visualizzato un messaggio di errore.
cox.zph(fit, transform="km", global=TRUE)
rho chisq p
w -0.1125 1.312 0.2520
x 0.0402 0.179 0.6725
y 0.2349 4.527 0.0334
z=1 0.0906 0.512 0.4742
GLOBAL NA 5.558 0.2347
Primo problema
- Qualcuno può spiegarmi i risultati dell'output di cui sopra in un inglese semplice? Ho un background medico e nessuna formazione formale in statistica.
Secondo problema
Come suggerito dal Dr. Harrell, vorrei validare internamente il mio modello eseguendo 100 iterazioni di 10 convalide incrociate usando il
rms
pacchetto (da quello che ho capito, ciò comporterebbe la costruzione di100 * 10 = 1000
modelli diversi e quindi chiedendo loro di prevedere i tempi di sopravvivenza di pazienti che non avevano mai visto).Ho provato a usare la
validate
funzione, come mostrato.> v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T) > v1 index.orig training test optimism index.corrected n Dxy -0.2542 -0.2578 -0.1356 -0.1223 -0.1320 10 R2 0.0543 0.0565 0.1372 -0.0806 0.1350 10 Slope 1.0000 1.0000 0.9107 0.0893 0.9107 10 D 0.0122 0.0128 0.0404 -0.0276 0.0397 10 U -0.0033 -0.0038 0.0873 -0.0911 0.0878 10 Q 0.0155 0.0166 -0.0470 0.0636 -0.0481 10 g 0.4369 0.4424 0.6754 -0.2331 0.6700 10
Come si esegue il ricampionamento 100x? Penso che il mio codice sopra esegua la convalida incrociata solo una volta.
Volevo quindi sapere quanto fosse buono il mio modello nella previsione. Ho provato quanto segue:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
Questo significa che il mio modello è solo leggermente migliore rispetto al lancio di una moneta?
Terzo problema
Il Dr. Harrell sottolinea che ho assunto la linearità per gli effetti della covariata e che il numero di eventi nel mio campione è appena abbastanza grande da adattarsi a un modello affidabile se tutti gli effetti della covariata risultano essere lineari.
- Questo significa che dovrei includere una sorta di termine di interazione nel mio modello? In tal caso, qualche consiglio su cosa mettere?
cph
output di cui sopra in un inglese semplice o di indicarmi un riferimento che lo farebbe. Dr. Harrell, grazie mille per il tuo aiuto finora!