2017-07-18 118 views
1

我使用生存包中的生存函数,并得到我不明白的结果。我拥有简单的数据 - 一个具有生存时间的对象,另一个具有指示变量(0 =活着,1 =死亡)。R生存函数不生成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 

然后我就可以通过survfit运行此为:

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

然后运行绘图命令:

plot(my.surv.fit) 

我得到的东西,是的Kaplan-Meier生存曲线,但是从零开始并且向上的东西 - 它看起来像1.0-KM。 KM数据与$ pstate一致,但是我必须广泛地提取它并生成我想要的KM图。

为了解决这个问题,我已经浏览了每个论坛关于survfit软件包和多个教程,并且每个教程似乎都指出命令序列应该产生一个KM曲线。

+0

刚发现问题。我的指标变量已被R设置为一个因子(R默认情况下是这样做的)。当生存包函数看到一个因子化指示变量时,它默认为一个多状态模型。 当我从Vital_Status_RECODE中去除因式分解时,我得到了我期待的K-M图。一个微妙的领域的新手错误。 – TPL

回答

2

状态应该是一个数字向量,而不是一个因子。试试这个,你会看到不同之处:

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))