Я использую пакет 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?