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 cphfunzione. I miei dati vengono salvati in un oggetto chiamato Data. Le variabili w, xe ysono 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.zphcomando 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
rmspacchetto (da quello che ho capito, ciò comporterebbe la costruzione di100 * 10 = 1000modelli diversi e quindi chiedendo loro di prevedere i tempi di sopravvivenza di pazienti che non avevano mai visto).Ho provato a usare la
validatefunzione, 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 10Come 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.565984Questo 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?
cphoutput di cui sopra in un inglese semplice o di indicarmi un riferimento che lo farebbe. Dr. Harrell, grazie mille per il tuo aiuto finora!