2013-02-22 1 views
0

Я использую R-пакет survival и сгенерировал объект сурового боя с различными группами.получить общее количество событий для каждой группы объекта оставшегося в живых

Я знаю, что хочу получить доступ к количеству событий (что равно records - right censored) для каждой группы.

Когда я использую print(survobject), есть столбец events, который показывает количество событий для каждой группы. Однако мне не удается извлечь этот столбец, например, как вектор.

ответ

2

В качестве примера использованы данные из библиотеки survival страницу справки. Используя функцию print() на survfit, объект печатает часть всего объекта summary.survfit().

library(survival) 
print(survfit(Surv(futime, fustat)~rx, data=ovarian)) 
Call: survfit(formula = Surv(futime, fustat) ~ rx, data = ovarian) 

    records n.max n.start events median 0.95LCL 0.95UCL 
rx=1  13 13  13  7 638  268  NA 
rx=2  13 13  13  5  NA  475  NA 

Если сохранить summary() объект и посмотреть на структуру этого, есть элемент table.

gg<-summary(survfit(Surv(futime, fustat)~rx, data=ovarian)) 
str(gg) 
List of 15 
$ n  : int [1:2] 13 13 
$ time  : num [1:12] 59 115 156 268 329 431 638 353 365 464 ... 
$ n.risk : num [1:12] 13 12 11 10 9 8 5 13 12 9 ... 
$ n.event : num [1:12] 1 1 1 1 1 1 1 1 1 1 ... 
$ n.censor : num [1:12] 0 0 0 0 0 0 0 0 0 0 ... 
$ surv  : num [1:12] 0.923 0.846 0.769 0.692 0.615 ... 
$ type  : chr "right" 
$ strata : Factor w/ 2 levels "rx=1","rx=2": 1 1 1 1 1 1 1 2 2 2 ... 
$ std.err : num [1:12] 0.0739 0.1001 0.1169 0.128 0.1349 ... 
$ upper : num [1:12] 1 1 1 0.995 0.946 ... 
$ lower : num [1:12] 0.789 0.671 0.571 0.482 0.4 ... 
$ conf.type: chr "log" 
$ conf.int : num 0.95 
$ call  : language survfit(formula = Surv(futime, fustat) ~ rx, data = ovarian) 
$ table : num [1:2, 1:7] 13 13 13 13 13 13 7 5 638 NA ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : chr [1:2] "rx=1" "rx=2" 
    .. ..$ : chr [1:7] "records" "n.max" "n.start" "events" ... 
- attr(*, "class")= chr "summary.survfit" 

Таблица элементов содержит ту же информацию, которую вы получаете с print(). Таким образом, значения event можно получить, просто выбрав интересующую вас колонку.

gg$table 
    records n.max n.start events median 0.95LCL 0.95UCL 
rx=1  13 13  13  7 638  268  NA 
rx=2  13 13  13  5  NA  475  NA 

gg$table[,4] 
rx=1 rx=2 
    7 5 
+0

спасибо! он очень хорошо работает! – speendo

1
str(Surv(heart$start, heart$stop, heart$event)[1:10, 1:3]) 
#----------------------------- 
labelled [1:10, 1:3] 0 0 0 1 0 36 0 0 0 51 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:3] "start" "stop" "status" 
- attr(*, "units")= chr "Day" 

Это время:

Surv(heart$start, heart$stop, heart$event)[1:10, "stop"] 
# [Day] 
# [1] 50 6 1 16 36 39 18 3 51 675 
Surv(heart$start, heart$stop, heart$event)[1:10, "start"] 
# [Day] 
# [1] 0 0 0 1 0 36 0 0 0 51 

Так что, если вы хотите времена, связанные с событиями, вы просто:

> Surv(heart$start, heart$stop, heart$event)[ , "stop"][ Surv(heart$start, heart$stop, heart$event)[ , "status"] == 1] 
[Day] 
[1] 50 6 16 39 18 3 675 40 85 58 153 8 81 1387 1 308 36 
[18] 43 37 28 1032 51 733 219 263 72 35 852 16 77 12 100 66 5 
[35] 53 3 2 40 45 996 72 9 980 285 102 188 3 61 149 343 68 
[52] 2 69 584 78 32 285 68 30 90 17 2 21 96 80 334 5 110 
[69] 207 186 340 165 16 21 6 

Или, чтобы получить номер просто просуммировать маркеры событий:

sum(Surv(heart$start, heart$stop, heart$event)[ , "status"] == 1) 
[1] 75 

И для составления таблицы потенциал ковариатой:

> with(lung, table(Surv(time, status)[, "status"], ph.ecog)) 
    ph.ecog 
    0 1 2 3 
    0 26 31 6 0 
    1 37 82 44 1 
+0

спасибо! работает очень хорошо! Надеюсь, вы не против, я принимаю другой ответ ... – speendo

+0

Не возражайте. Во всяком случае, его подход был выше, чем у меня. –