Quelqu'un peut-il m'expliquer mon modèle Cox en anglais simple?
J'ai ajusté le modèle de régression de Cox suivant à toutes mes données en utilisant la cph
fonction. Mes données sont enregistrées dans un objet appelé Data
. Les variables w
, x
et y
sont continues; z
est un facteur de deux niveaux. Le temps est mesuré en mois. Certains de mes patients n'ont pas de données pour la variable z
( NB : j'ai dûment noté la suggestion du Dr Harrell, ci-dessous, que j'impute ces valeurs afin d'éviter de biaiser mon modèle, et que je le ferai à l'avenir).
> 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
J'ai également essayé de tester l'hypothèse de risques proportionnels en utilisant la cox.zph
commande ci-dessous, mais je ne sais pas comment interpréter ses résultats. Contourner plot()
la commande donne un message d'erreur.
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
Premier problème
- Quelqu'un peut-il m'expliquer les résultats de la sortie ci-dessus en anglais simple? J'ai une formation médicale et aucune formation officielle en statistique.
Deuxième problème
Comme suggéré par le Dr Harrell, je voudrais valider en interne mon modèle en effectuant 100 itérations de validation croisée 10 fois en utilisant le
rms
package (d'après ce que je comprends, cela impliquerait de construire100 * 10 = 1000
différents modèles et de leur demander de prédire les temps de survie patients qu'ils n'avaient jamais vus).J'ai essayé d'utiliser la
validate
fonction, comme indiqué.> 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
Comment effectuez-vous le rééchantillonnage 100x? Je pense que mon code ci-dessus n'effectue la validation croisée qu'une seule fois.
J'ai ensuite voulu savoir à quel point mon modèle était bon en prédiction. J'ai essayé ce qui suit:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
Est-ce à dire que mon modèle n'est que très légèrement meilleur que de lancer une pièce?
Troisième problème
Le Dr Harrell souligne que j'ai supposé la linéarité pour les effets de covariable et que le nombre d'événements dans mon échantillon est à peine assez grand pour correspondre à un modèle fiable si tous les effets de covariable se trouvent être linéaires.
- Est-ce à dire que je devrais inclure une sorte de terme d'interaction dans mon modèle? Si oui, des conseils sur quoi mettre?
la source
cph
sortie ci-dessus dans un anglais simple, ou me pointait vers une référence qui le ferait. Dr Harrell, merci beaucoup pour votre aide jusqu'à présent!Réponses:
Pour commencer, considérez quelques points. Tout d'abord, vous excluez trop d'observations avec des données manquantes et cela entraînera un biais. Considérez l'imputation multiple. Deuxièmement, il existe une méthode de tracé pour2×2
cox.zph
ce qui est utile pour évaluer les risques proportionnels. Troisièmement, vous avez supposé la linéarité des effets de covariable. Quatrièmement, le nombre d'événements dans votre échantillon d'apprentissage est à peine suffisant pour correspondre à un modèle fiable si tous les effets de covariables se trouvent être linéaires (ce qui est rare). Et votre échantillon de test devrait avoir peut-être 400 événements avant de produire une évaluation fiable de la précision de la prédiction. Il n'est pas clair que vous disposiez de suffisamment de données pour diviser les données en deux parties. La validation du rééchantillonnage (100 répétitions de 10 fois la validation croisée, ou utilisez le bootstrap) est une meilleure solution. Les deux votre validation externe d' origine (fonctionsrcorr.cens
etval.surv
) et rééchantillonnage validation interne (fonctionsvalidate
,calibrate
) sont mises en œuvre dans le Rrms
package. Études de cas pour lerms
la source
plot(cox.zph(fit[[1]], transform="km", global=TRUE))
, cependant, cela a donnéError in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom
. Suis-je appeler cette fonction de manière incorrecte?plot(cox.zph(...), df=2)
. Voir les études de cas dans les notes de cours pour desrms
exemples ou installer le package (qui a également besoin duHmisc
package) et tapez ces commandes pour afficher les fichiers d'aide:?cph
?validate.cph
?calibrate.cph
La sortie de la fonction R cph, sur la base d' un exemple pertinent, est expliqué dans ce facile à suivre papier par J. Fox.
Je vous conseille fortement de lire ce document si vous ne l'avez pas déjà fait.
la source
cph
résultat?