【问题标题】:Creating censored DV for survival analysis (in long form)为生存分析创建审查 DV(长格式)
【发布时间】:2012-07-13 00:27:59
【问题描述】:

另一个 R 新手问题。

我正在做一个需要我使用生存分析的项目。具体来说,我需要使用离散单元生存分析(因此 Cox 回归或假设我的 DV 是连续的其他方法是不可能的)。

我已将我的数据集转换为长格式,我需要通过(步骤 1)找到最后一次变量 ("q") =1; 创建一个删失的 DV ("dv"); (步骤 2)在 time+1 将我的“dv”重新编码为“0”; (步骤 3)在 time+2...n 将我的“dv”重新编码为“NA”; (步骤 4)删除“dv”=NA 时的所有观察值(行)。

在我这样做之前,我似乎应该创建一个默认分配给“1”的DV。在第 3 步之后,我的数据将如下所示:

 id  time q  dv   
 1    1   1   1
 1    2   0   1
 1    3   1   1
 1    4   0   0
 1    5   0   NA
 1    6   0   NA
 2    1   1   1
 2    2   1   1
 2    3   0   0
 2    4   0   NA
 2    5   0   NA
 2    6   0   NA

请注意,“q”可以随时间在“0”或“1”之间变化(参见时间=2 时 id=1 的观察结果),但由于生存分析的性质,“dv”不能。我需要做的是创建一个变量,找到“q”在“1”和“0”之间变化的最后时间,然后进行相应的审查。在第 4 步之后,我的数据应如下所示:

 id  time q  dv   
 1    1   1   1
 1    2   0   1
 1    3   1   1
 1    4   0   0
 2    1   1   1
 2    2   1   1
 2    3   0   0

感谢所有可能的帮助!

【问题讨论】:

  • 假设 dv 是您在 DTSA 中发生的事件,您确定概述的步骤是最实用的方法吗?原始(宽)数据如何?
  • 虽然我不是专家,但从我所做的阅读来看,我认为他们是。每个问题还具有随时间变化的属性,这些属性将用作模型中的预测变量,并且随着它们不时变化,因此需要较长的形式。
  • 长格式是你的生存模型所需要的,而不是你的录音工作所必需的......不过我拍了一张,见下文。

标签: r


【解决方案1】:

这比预期的更冗长,但它为您完成了长格式 sn-p 的工作:

我从提供的数据开始,但使用宽而不是长。

zz <- textConnection("id  time q  dv   
1    1   1   1
1    2   0   1
1    3   1   1
1    4   0   0
1    5   0   NA
1    6   0   NA
2    1   1   1
2    2   1   1
2    3   0   0
2    4   0   NA
2    5   0   NA
2    6   0   NA
")
d <- read.table(zz, header = TRUE)
d$dv <- NULL
close(zz)

# start out with wide instead of long
dw <- reshape(d, direction='wide', timevar="time", sep="") 
dw
##   id q1 q2 q3 q4 q5 q6
## 1  1  1  0  1  0  0  0
## 7  2  1  1  0  0  0  0

使用一个函数,为每个宽行/观察生成适当的“dv”变量。

censor <- function(periods) {
  n <- length(periods)
  cperiods <- periods*1:n # multiply to get positions
  n.obs <- max(cperiods) # position of last q=1, and one q=0  
  periods[(n.obs+1):n] <- NA # NA's for periods outside observed range
  n.cens <- n - n.obs - 1 # number censored
  c(rep(1, n.obs-1), 0, rep(NA, n.cens+1)) # fill "dv" accordingly
}

应用所述函数,生成经过适当审查的广泛数据集。

# 应用 censored(),创建宽格式的 dv 变量 dw.censored
##   X1 X2 X3 X4 X5 X6 X7
## 1  1  1  1  0 NA NA NA
## 7  1  1  0 NA NA NA NA

现在回到长格式(带有美学格式、排序等)

dl.censored <- reshape(dw.censored, varying = 1:7, timevar = "time", 
                       sep = "", direction = "long")
dl.censored <- dl.censored[order(dl.censored$id, dl.censored$time),]
dl.censored$dv <- dl.censored$X
rownames(dl.censored) <- dl.censored$X <- NULL
dl.censored

##    time id dv
## 1     1  1  1
## 2     2  1  1
## 3     3  1  1
## 4     4  1  0
## 5     5  1 NA
## 6     6  1 NA
## 7     7  1 NA
## 8     1  2  1
## 9     2  2  1
## 10    3  2  0
## 11    4  2 NA
## 12    5  2 NA
## 13    6  2 NA
## 14    7  2 NA

而且没有 NA:

dl.censored 

##    time id dv
## 1     1  1  1
## 2     2  1  1
## 3     3  1  1
## 4     4  1  0
## 8     1  2  1
## 9     2  2  1
## 10    3  2  0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多