zhaojingyi
数据框tdata如下:
tt1 cc1 g1
1 0.1616 1 1
2 0.3151 1 1
3 0.4274 1 1
4 0.7342 1 1
5 0.9014 1 1
6 1.1808 1 1
7 1.2274 0 1
8 1.3068 0 1
9 1.7479 1 1
10 2.2000 0 1
11 2.3425 0 1
12 2.8493 0 1
13 3.0301 0 1
> tt1<-c(sample.true,sample.censoring)
> cc1<-c(rep(1,length(sample.true)),rep(0,length(sample.censoring)))
> temp<-order(tt1)
> tt1<-tt1[temp];cc1<-cc1[temp]
> nn1<-length(tt1)
> KME<-tt1
> KME[1]<-1-cc1[1]/nn1
> for(ii in 2:nn1){KME[ii]<-KME[ii-1]*(1-cc1[ii]/(nn1-ii+1))}
> KME<-1-KME
> KME
计算出来的KME明显不对。
特请教各位老师,谢谢!
momozilla
for(ii in 2:nn1){KME[ii]<-KME[ii-1]*(1-cc1[ii]/(nn1-ii+1))}
1. 你的代码组织得没有条理。你不说,我们只能去猜 sample.true 和 sample.censoring 大概是什么
只有当事件发生时,risk set 才会减小相应的事件发生数,你这里是最简单的,没有tied data。但是,你对KM估计的理解有误。如果我没看错的话,你在每一个时间点都减一,但是在有些时间点是没有事件发生的,比如1.2274,1.3068 等。最直接的办法就是加个条件判断
在前面的一个帖子里,我曾推荐过 Therneau 关于 survival analysis 的文档,你去找了看看吧