2016-07-01 20 views
0

Ich versuche, das ‚relsurv‘ Paket in R zu verwenden, um das Überleben einer Kohorte zu nationalen Leben Tabellen zu vergleichen. Der folgende Code zeigt mein Problem mit dem Beispiel von Relsurv, aber die Lebenstabelle Daten ändern. Ich habe gerade zwei Jahre und zwei Altersklassen in den Lebenstabellendaten unter Verwendung der aktuellen Daten ist viel größer, sondern gibt den gleichen Fehler. Der Fehler ist ‚ungültig ratetable Argument‘ aber ich habe es gemäß dem Beispiel lebens Tabellen ‚slopop‘ und ‚survexp.us‘ formatiert.Formating Leben Tabellen in Überlebensanalyse verwenden

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) 

Antwort

0

Verwenden Sie die Funktion transrate des Pakets relsurv, um die Daten neu zu formatieren. Das sollte Ihnen einen kompatiblen Datensatz geben.

Grüße, Josh

0

Drei Dinge hinzufügen:

  1. Sie attributes(rtab)$factor = c(0,1,0) setzen sollte, da Geschlecht (die zweite Dimension) ein Faktor ist (das heißt, ändert sich nicht im Laufe der Zeit).

  2. Ein guter Weg, um zu überprüfen, ob etwas eine gültige Tariftabelle ist die is.ratetable() Funktion zu verwenden. is.ratetable(rtab, verbose = TRUE) wird auch eine Meldung zurück sagen, was falsch war.

  3. prüfen das Ergebnis is.ratetable ohne verbose mit ersten, weil es liegen über gültige Tariftabellen.

Der Rest dieses Kommentars ist über diese Lüge.

Wenn das Attribut type nicht angegeben ist, berechnet is.ratetable es mit dem Attribut factor; Sie können dies sehen, indem Sie einfach die Funktion drucken. Es scheint jedoch so falsch zu sein. Es verwendet type <- 1 * (fac == 1) + 2 * (fac == 0) + 4 * (fac > 0), wo facattributes(rtab)$factor ist.

Aber der nächste Abschnitt, der das type Attribut überprüft, ob es vorgesehen ist, sagt die einzigen gültigen Werte sind 1, 2, 3 und 4. Es ist unmöglich, 1 aus dem obigen Code zu erhalten.

Zum Beispiel, lassen Sie uns die slopop Ratetable mit dem relsurv-Paket zur Verfügung gestellt.

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

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

Ich denke, das ist, wo Ihre Preistabelle aufgehängt wird.