我在分析我的生存数据集时遇到了问题。我将把dataset的dput输出放在github链接中,以避免污染这个问题。
这是数据https://gist.github.com/anonymous/4fdff1c6d0853c41939e2a67d9e0e45b
在这个数据集中,我想为每个组绘制生存曲线图,所以我需要建立一个survfit()模型。
变量W1,W2,..,W43表示周数,数字表示某种度量。当我在任何一周中有一个点.时,这意味着那个人在那一周死了,因此接下来的每周都会被点.标记。
在一个生存模型中,这个死亡代表了一个事件(失败),如果个体在所有的周内生存,他代表一个被审查的数据。
为了像我知道的那样建立一个生存模型,我需要像下面这样的数据
time=c(3,4,8,8,5,2)
event=c(1,1,0,0,1,1)在这种情况下,时间代表死亡时间(以周为单位),事件为1(如果死亡),0(如果被审查)。
编辑:--我想出了一个可能的解决方案,但我不知道如何才能做到。这个想法如下
( 1)取所有列W1、W2、.、W43和put 1(如果是a数)和0(如果是点. )
2)创建一个表示时间的新变量,该变量的值将是W1到W43列的总和,因此它将是W1+W2+...+W43。
3)创建一个表示事件的新变量,如果time=43 --这意味着该个体始终存活,那么它将为0(审查),如果小于43,则表示该个体死亡,则该变量为1。
有人能帮我吗?
发布于 2016-09-30 16:49:03
我将您的dataset命名为sdat,这些操作添加了另外两个列:
sdat$time= apply(sdat[ ,grepl("W", names(sdat))], 1 , #work by rows on "W"-columns
function(r) which( r==".")[1] ) # seq-number of first "."
sdat$event <- as.numeric( !is.na(sdat$time) ) # convert NA's to logical and to 1,0
sdat$time= ifelse( is.na(sdat$time) , 43, sdat$time) # set time to 43 for survivors
# Check results
head( sdat[ , !grepl("W", names(sdat))] ) # remove "W" cols
Group Ref Sex M1 M2 M3 M4 time event
1 11 4 1 959 1940 10 184 23 1
2 11 4 1 960 1770 10 189 31 1
3 11 4 1 961 1970 10 166 23 1
4 11 4 1 962 1870 1 180 43 0
5 11 4 1 964 1780 11 239 43 0
6 12 4 1 966 1980 11 182 43 1作为一名分析师,我会问,在导致死亡的“W”型-numbers上附加什么含义,但这不是你的问题。
https://stackoverflow.com/questions/39795731
复制相似问题