R - Более быстрый способ вычисления вероятностей занятости состояния в предопределенное время T? [Mstate] - PullRequest
0 голосов
/ 26 октября 2019

Я использую пакет mstate для определения вероятности того, что каждый человек находится в каждом состоянии в момент времени T.

Моя матрица перехода:

tmat <- mstate::transMat(x = list(
    c(2, 3, 4, 5, 14), #1
    c(6, 7, 8, 9, 14), #2
    c(6, 7, 8, 9, 14), #3
    c(6, 7, 8, 9, 14), #4
    c(6, 7, 8, 9, 14), #5
    c(10,11,12,13,14), #6
    c(10,11,12,13,14), #7
    c(10,11,12,13,14), #8
    c(10,11,12,13,14), #9
    c(15,16,17,18,14), #10
    c(15,16,17,18,14), #11
    c(15,16,17,18,14), #12
    c(15,16,17,18,14), #13
    c(),               #14 (termination sink)
    c(14),             #15
    c(14),             #16
    c(14),             #17
    c(14),             #18
    c(2, 3, 14)        #19
    )
)

данные df выглядят следующим образом (from и to представляют состояния в модели, trans = идентификатор перехода между состояниями):

       id from to trans status   Tstart     Tstop        var1    ...  varX
1  15933a    1  2     1      0 0.000000 1.5195072           1            0
2  15933a    1  3     2      1 0.000000 1.5195072           1            0
3  15933a    1  4     3      0 0.000000 1.5195072           1            0
4  15933a    1  5     4      0 0.000000 1.5195072           1            0
5  15933a    1 14     5      0 0.000000 1.5195072           1            0
6  15933a    3  6    11      0 1.519507 1.6125941           0            0
7  15933a    3  7    12      0 1.519507 1.6125941           0            0
8  15933a    3  8    13      0 1.519507 1.6125941           0            0
9  15933a    3  9    14      0 1.519507 1.6125941           0            0
10 15933a    3 14    15      0 1.519507 1.6125941           0            0
11 19764b    1  2     1      0 0.000000 0.4243669           0            0
12 19764b    1  3     2      0 0.000000 0.4243669           0            0
13 19764b    1  4     3      0 0.000000 0.4243669           0            0
14 19764b    1  5     4      0 0.000000 0.4243669           0            0
15 19764b    1 14     5      0 0.000000 0.4243669           0            0

Модель Кокса на данных (обратите внимание настратификация по trans):

fit <- coxph(Surv(Tstart, Tstop, status) ~ var1 + ... varX + strata(trans), data = df, method = "breslow")

Получение индивидуальной вероятности занятия каждого состояния (newdata для одного человека):

m <- msfit(object=fit, variance=F, trans=tmat, newdata=newdata)
p <- probtrans(m, predt=time) 

Все работает отлично, но у меня есть~ 60 000 человек делают прогнозы, а msfit и probtrans занимают слишком много времени (дней!). Я не верю, что вы можете включить несколько человек в пределах newdata.

Существует ли более быстрый способ определения вероятности нахождения каждого человека в состоянии X и времени T? Я думаю, что survfit может быть полезным, но, хотя вы можете включить несколько человек в newdata, я думаю, что вы должны принять одинаковое начальное состояние и время начала для всех:

sfit <- survfit(fit, newdata=new_df, id=id)  # don't think this works for my project

У кого-то есть идеи? Существуют ли другие пакеты R, которые пойдут по более прямому пути вычисления вероятности нахождения индивида в состоянии X в момент времени T?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...