Типичные этапы подготовки для mstate
включают преобразование данных «широкого» формата (1 строка на «пациента») в данные в формате «нескольких состояний» (несколько строк на «пациента» для каждого возможного перехода в мульти-состояниимодель).
Например, данные в широком формате:
library(mstate)
data(ebmt4)
ebmt <- ebmt4
> head(ebmt)
id rec rec.s ae ae.s recae recae.s rel rel.s srv srv.s year agecl proph match
1 1 22 1 995 0 995 0 995 0 995 0 1995-1998 20-40 no no gender mismatch
2 2 29 1 12 1 29 1 422 1 579 1 1995-1998 20-40 no no gender mismatch
3 3 1264 0 27 1 1264 0 1264 0 1264 0 1995-1998 20-40 no no gender mismatch
4 4 50 1 42 1 50 1 84 1 117 1 1995-1998 20-40 no gender mismatch
5 5 22 1 1133 0 1133 0 114 1 1133 0 1995-1998 >40 no gender mismatch
6 6 33 1 27 1 33 1 1427 0 1427 0 1995-1998 20-40 no no gender mismatch
преобразуются в формат с несколькими состояниями:
tmat <- transMat(x = list(c(2, 3, 5, 6), c(4, 5, 6), c(4, 5, 6), c(5, 6), c(), c()), names = c("Tx", "Rec", "AE", "Rec+AE", "Rel", "Death"))
msebmt <- msprep(data = ebmt, trans = tmat, time = c(NA, "rec", "ae", "recae", "rel", "srv"), status = c(NA, "rec.s", "ae.s", "recae.s", "rel.s", "srv.s"), keep = c("match", "proph", "year", "agecl"))
> head(msebmt)
An object of class 'msdata'
Data:
id from to trans Tstart Tstop time status match proph year agecl
1 1 1 2 1 0 22 22 1 no gender mismatch no 1995-1998 20-40
2 1 1 3 2 0 22 22 0 no gender mismatch no 1995-1998 20-40
3 1 1 5 3 0 22 22 0 no gender mismatch no 1995-1998 20-40
4 1 1 6 4 0 22 22 0 no gender mismatch no 1995-1998 20-40
5 1 2 4 5 22 995 973 0 no gender mismatch no 1995-1998 20-40
6 1 2 5 6 22 995 973 0 no gender mismatch no 1995-1998 20-40
Но что если мой исходный набор данных имеетизменяющиеся во времени ковариаты (т. е. длинный формат), и я хочу отформатировать данные в режиме с несколькими состояниями?Все учебники, которые я нашел в Интернете, предназначены только для преобразования первоначально широких данных в данные с несколькими состояниями (не изначально длинные данные);например, пакет mstate виньетка .
Итак, допустим, у меня есть следующие данные df
, где id для «пациента», (start
, stop
]сообщите нам периоды времени, state
- это состояние, в котором находится пациент в конце периода времени, а tv.cov
- их изменяющийся во времени ковариат (предполагается постоянным в течение периода времени). Обратите внимание, что только пациент id=5
имеет 3х записей и tv.cov
изменений этого человека.
id start stop state tv.cov
1 0 1 1 1
2 0 4 1 2
3 0 7 1 1
4 0 10 1 5
5 0 6 1 4
5 6 10 2 10
5 10 15 3 12
Предполагая базовую модель перехода "болезнь-смерть":
tmat <- mstate::trans.illdeath(names = c("healthy", "sick", "death"))
> tmat
to
from healthy sick death
healthy NA 1 2
sick NA NA 3
death NA NA NA
Как я могу подготовить df
в несколькоформат состояния?
Как хак, я должен настроить данные в «широкоформатном» формате, отформатировать данные в «многоуровневом» формате, используя msprep
, а затем присоединить к нему другой кадр, содержащий времяпеременные ковариаты для каждого пациента на каждом временном интервале?