2017-07-18 3 views
1

J'utilise la fonction survfit du paquet de survie, et j'obtiens des résultats que je ne comprends pas. J'ai des données simples - un objet avec des temps de survie, et un autre avec une variable indicatrice (0 = vivant, 1 = mort).Fonction R surviteuse ne produisant pas Kaplan-Meier

Survival_Time_Months[1:50] 
# [1] 165 3 119 92 88 3 25 3 56 18 100 114 17 97 141 145 103 156 37 91 101 43 41 143 108 93 136 4 116 
# [30] 85 166 0 92 26 9 8 55 136 10 99 1 20 6 95 85 79 119 109 41 23 

Vital_Status_RECODE[1:50] 
# [1] 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
# Levels: 0 1 

Je peux ensuite exécuter ce par survfit comme:

my.surv.fit <- survfit(Surv(Survival_Time_Months,Vital_Status_RECODE) ~ 1, data=mydata) 

Ensuite, exécutez la commande du terrain:

plot(my.surv.fit) 

je reçois quelque chose qui est pas une courbe de Kaplan-Meier, mais quelque chose qui commence à zéro et monte - il ressemble à 1.0 - KM. Les données de KM sont dans l'objet d'ajustement comme $ pstate, mais je dois beaucoup déconner pour l'extraire et générer le KM-plot que je veux. En essayant de résoudre ce problème, j'ai examiné tous les forums concernant le paquet survfit, et plusieurs tutoriels, et chacun semble indiquer que la séquence de commandes devrait produire une courbe KM.

+0

Juste découvert le problème. Ma variable indicatrice avait été définie comme facteur par R (que R aime faire par défaut). Lorsque les fonctions du package de survie voient une variable d'indicateur factorisée, elle prend par défaut un modèle multi-états. Lorsque j'ai supprimé la factorisation de Vital_Status_RECODE, j'ai obtenu les graphiques K-M auxquels je m'attendais. Une erreur de débutant dans un domaine subtil. – TPL

Répondre

2

L'état doit être un vecteur numérique et non un facteur. Essayez ceci et vous verrez la différence:

time <- c(165,3,119,92,88,3,25,3,56,18,100,114,17,97,141,145,103,156,37,91,101,43,41,143,108,93,136,4,116,85,166,0,92,26,9,8,55,136,10,99,1,20,6,95,85,79,119,109,41,23) 
status <- c(0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0) 

plot(survfit(Surv(time, status)~1))