格式化生命表用于生存分析

时间:2016-07-01 01:19:25

标签: r survival-analysis

我试图使用' relsurv'在R中打包以比较一个队列的生存与国家生命表。下面的代码显示了我使用relsurv中的示例但更改生命表数据的问题。我在下面的生命表数据中只使用了两年和两年,实际数据要大得多但却给出了同样的错误。错误是“无效的费率表”参数'但是我按照示例生活表' slopop'来格式化它。和' survexp.us'。

library(survival)
library(relsurv)
data(rdata) # example data from relsurv
raw = read.table(header=T, stringsAsFactors = F, sep=' ', text='
Year Age sex qx
1980 30 1 0.00189
1980 31 1 0.00188
1981 30 1 0.00191
1981 31 1 0.00191
1980 30 2 0.00077
1980 31 2 0.00078
1981 30 2 0.00076
1981 31 2 0.00074
')

ages = c(30,40) # in years
years = c(1980, 1990)
rtab = array(data=NA, dim=c(length(ages), 2, length(years))) # set up blank array: ages, sexes, years
for (y in unique(raw$Year)){
  for (s in 1:2){
    rtab[ , s, y-min(years)+1] = -1 *  log(1-subset(raw, Year==y&sex==s)$qx) / 365.24 # probability of death in next year, transformed to hazard (see ratetables help)
  }
}
attributes(rtab)$dimnames[[1]] = as.character(ages)
attributes(rtab)$dimnames[[2]] = c('male','female')
attributes(rtab)$dimnames[[3]] = as.character(years)
attributes(rtab)$dimid <- c("age", "sex", 'year')
attributes(rtab)$dim <- c(length(ages), 2, length(years))
attributes(rtab)$factor = c(0,0,1)
attributes(rtab)$type = c(2,1,4)
attributes(rtab)$cutpoints[[1]] = ages*365.24 # must be in days
attributes(rtab)$cutpoints[[2]] = NULL
attributes(rtab)$cutpoints[[3]] = as.date(paste("1Jan", years, sep='')) # must be date
attributes(rtab)$class = "ratetable"

# example from relsurv
rsmul(Surv(time,cens) ~ sex+as.factor(agegr)+
        ratetable(age=age*365.24, sex=sex, year=year),
      data=rdata, ratetable=rtab, int=1)

2 个答案:

答案 0 :(得分:0)

尝试使用relsurv包中的transrate函数重新格式化数据。这应该会为您提供兼容的数据集。

此致 约什

答案 1 :(得分:0)

要添加三件事:

  1. 您应该设置attributes(rtab)$factor = c(0,1,0),因为性别(第二维度)是一个因素(即,不随时间变化)。

  2. 检查某些内容是否为有效费率表的好方法是使用is.ratetable()功能。 is.ratetable(rtab, verbose = TRUE)甚至会返回一条说明错误的消息。

  3. 检查is.ratetable的结果,而不首先使用verbose ,因为它谎言有效的费率表。

  4. 本评论的其余部分是关于这个谎言。

    如果未给出type属性,is.ratetable将使用factor属性计算它;你可以通过打印功能看到这一点。但是,它似乎做错了。它使用type <- 1 * (fac == 1) + 2 * (fac == 0) + 4 * (fac > 0),其中facattributes(rtab)$factor

    但下一部分检查type属性是否已提供,表示唯一有效值为123和{{1} }。从上面的代码中获取4是不可能的。

    例如,让我们检查1包提供的slopop费率表。

    relsurv

    我认为这是您的费率表被挂起的地方。