2016-07-01 5 views
0

Rの「relsurv」パッケージを使用して、コホートの生存を国民生活表と比較しようとしています。以下のコードは、relsurvの例を使用して私の問題を示していますが、生命表のデータを変更しています。私はちょうど2歳と2歳の人生のテーブルのデータを使用して、実際のデータははるかに大きいですが、同じエラーが発生します。エラーは 'invalid ratetable argument'ですが、サンプルのlife-tables '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) 

答えて

0

relsurvパッケージのtransrate関数を使用してデータを再フォーマットしてみてください。それはあなたに互換性のあるデータセットを与えるはずです。

よろしく、 ジョシュ

追加する
0

3つのこと:

  1. セックス(二次元)は(すなわち、時間の経過とともに変化していない)要因であるので、あなたは、attributes(rtab)$factor = c(0,1,0)を設定する必要があります。

  2. 何かが有効な料金表であるかどうかを確認する良い方法は、is.ratetable()機能を使用することです。 is.ratetable(rtab, verbose = TRUE)は何が間違っていたかを示すメッセージを返すでしょう。それは有効なレートテーブルについてがあるだろうので

  3. は、verbose最初を使用せずにis.ratetableの結果を確認してください。

このコメントの残りはこの嘘です。

type属性が指定されていない場合、is.ratetablefactor属性を使用して計算します。関数を表示するだけでこれを見ることができます。しかし、それは間違っているようです。 type <- 1 * (fac == 1) + 2 * (fac == 0) + 4 * (fac > 0)を使用します(facattributes(rtab)$factor)。

は、しかし、それは提供しています場合type属性をチェックし、次のセクションでは、唯一の有効な値は123、および4あると言います。上記のコードから1を得ることは不可能です。

たとえば、relsurvパッケージで提供されているslopopレターテーブルを調べてみましょう。

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

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

私はこれがあなたのレートテーブルがハングアップしている場所だと思います。

関連する問題