Как преобразовать мои данные в формат процесса подсчета с начальным временем остановки для усечения интервала в R?
Я хотел бы смоделировать повторяющееся событие с субъектами, которые входят и выходят из риска в течение периода наблюдения исследования.
У меня есть данные о периодах отсутствия риска (даты начала и окончания), когда субъект не может испытать событие.
Я был бы признателен за любую помощь в том, как преобразовать мои данные в этот формат процесса подсчета с временами начала и окончания, которые отражают как возникновение события, так и усечение интервала в R. Я могу преобразовать данные в формат процесса подсчета с возникновением события, но не знаю, как разделить время начала и окончания, чтобы отразить ненаблюдаемые периоды (кроме создания вручную набора данных, которого я бы очень хотел избежать).
Это очень упрощенный пример моей структуры входных данных в широком формате:
Просмотр структуры входных данных
Вот чего я хочу добиться:
id t0 t1 outcome
1 0 36 0
2 0 5 1
2 5 15 1
2 15 36 0
3 0 9 0
3 11 20 1
3 20 36 0
На моей иллюстрации, субъект 1 никогда не испытывает событие при правильной цензуре в 36 месяцев. Субъект 2 испытывает событие дважды и остается в периоде риска в течение всего периода наблюдения. Субъект 3 испытывает событие один раз, выходит из периода риска через 9 месяцев и снова входит в период риска через 11 месяцев.
Другая полезная информация о моем исследовании:
- Предметы имеют общее время начала 0 месяцев.
- Субъекты подвергаются правильной цензуре в течение 36 месяцев, если не происходит никаких событий.
- Предметы наблюдаются в течение 3 лет.
- Субъекты могут входить и выходить из риска в течение различного количества времени и частоты в течение 3-летнего периода наблюдения.
Спасибо!
1 ответ
Возможно, мне не хватает некоторых угловых случаев, и, возможно, есть более элегантное решение, но, похоже, это работает.
Я предлагаю запустить первые две строки основной логики, затем первые три, четыре и т. Д. И проверить выходные данные на каждом этапе, чтобы сформировать понимание того, что делает каждый шаг.
library(tidyr)
library(dplyr)
subjects <- data.frame(
id = 1:3,
event = c(0, 1, 1),
time_to_event_1 = c(NA, 5, 20),
time_to_event_2 = c(NA, 15, NA),
time_to_risk_out_start_1 = c(NA, NA, 9),
time_to_risk_out_end_1 = c(NA, NA, 11),
time_to_risk_out_start_2 = NA,
time_to_risk_out_end_2 = NA
)
subjects %>%
mutate(start = 0,
end = 36) %>%
select(-event) %>%
gather(event, t0, -id) %>%
group_by(id) %>%
arrange(id, t0) %>%
filter(!is.na(t0)) %>%
mutate(t1 = lead(t0)) %>%
filter(!is.na(t1),
!grepl("time_to_risk_out_start", event)) %>%
mutate(outcome = lead(grepl("time_to_event", event), default = 0)) %>%
select(id, t0, t1, outcome) %>%
ungroup()
Также для дальнейшего использования лучше поделиться своими данными, используя dput(subjects)
чтобы людям было легче помогать - в этом случае это было довольно легко воспроизвести:)