Составление таблиц дожития для использования при анализе выживаемости

Я пытаюсь использовать пакет relsurv в R, чтобы сравнить выживаемость когорты с национальными таблицами дожития. В приведенном ниже коде показана моя проблема с использованием примера из relsurv, но с изменением данных таблицы жизни. Я только что использовал два года и два возраста в приведенных ниже данных таблицы смертности, фактические данные намного больше, но дают ту же ошибку. Ошибка - «недопустимый аргумент в таблице оценок», но я отформатировал ее в соответствии с примерами таблиц жизни «slopop» и «Surveyxp.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)

person agbarnett    schedule 01.07.2016    source источник


Ответы (2)


Попробуйте использовать функцию transrate из пакета relsurv, чтобы переформатировать данные. Это должно дать вам совместимый набор данных.

С уважением, Джош

person Josh    schedule 01.07.2016

Три вещи, которые нужно добавить:

  1. Вы должны установить attributes(rtab)$factor = c(0,1,0), поскольку пол (второе измерение) является фактором (т.е. не меняется со временем).

  2. Хороший способ проверить, является ли что-то действительной таблицей тарифов, - использовать функцию is.ratetable(). is.ratetable(rtab, verbose = TRUE) даже вернет сообщение о том, что было не так.

  3. Проверьте результат is.ratetable без использования verbose вначале, потому что он лжет о действительных таблицах ставок.

Остальная часть этого комментария посвящена этой лжи.

Если атрибут type не указан, is.ratetable вычислит его с использованием атрибута factor; вы можете увидеть это, просто распечатав функцию. Однако, похоже, это делается неправильно. Он использует type <- 1 * (fac == 1) + 2 * (fac == 0) + 4 * (fac > 0), где fac attributes(rtab)$factor.

Но в следующем разделе, который проверяет атрибут type, если он указан, говорится, что единственными допустимыми значениями являются 1, 2, 3 и 4. Невозможно получить 1 из приведенного выше кода.

Например, давайте рассмотрим таблицу ставок slopop, поставляемую с пакетом relsurv.

library(relsurv)
data(slopop)
is.ratetable(slopop)
# [1] TRUE

is.ratetable(slopop, verbose = TRUE)
# [1] "wrong length for cutpoints 3"

Думаю, тут вешают ваш прейскурант.

person Nathan Werth    schedule 21.10.2016