Синтаксис для анализа выживаемости с поздним входом

Я пытаюсь приспособить модель выживания с усеченными слева данными с помощью пакета survival, однако я не уверен в правильном синтаксисе.

Допустим, мы измеряем влияние возраста при приеме на работу (age) и типа работы (parttime) на продолжительность работы врачей в государственных клиниках. Ушел ли врач или подвергся цензуре, указывает переменная censor (0 для прекращения курения, 1 для цензуры). Это поведение было измерено в 18-месячном окне. Время выхода или цензуры обозначается двумя переменными: entry (время начала) и exit (время окончания), указывающими, сколько лет врач проработал в клинике. Если врачи приступили к работе после того, как окно «открылось», их entry время установлено на 0. Если они начали работу до «открытия» окна, их время entry представляет, как долго они уже работали на этой должности, когда окно «открылось», а их exit время - это время, через которое с момента первоначального приема на работу они либо уволились, либо подверглись цензуре из-за «закрытия» окна. Мы также постулируем двустороннее взаимодействие между age и продолжительностью занятости (exit).

Это набор данных игрушки. Он намного меньше, чем обычный набор данных, поэтому сами оценки не так важны, как правильность синтаксиса и переменных, включенных (с использованием пакета survival в R), с учетом структуры данных. Данные игрушек имеют ту же структуру, что и набор данных, описанный в главе 15 Прикладного лонгитюдного анализа данных Зингера и Уиллета. Я безуспешно пытался сопоставить результаты, о которых они сообщают. В Интернете не так много явной информации о том, как проводить анализ выживаемости на усеченных слева данных в R, и на веб-сайте, на котором представлен код для книги (здесь) не предоставляет код R для рассматриваемой главы. Методы моделирования изменяющихся во времени ковариат и эффектов взаимодействия в R довольно сложны, и мне просто интересно, не упускаю ли я чего-то важного.

Вот данные игрушки

id <- 1:40
entry <- c(2.3,2.5,2.5,1.2,3.5,3.1,2.5,2.5,1.5,2.5,1.4,1.6,3.5,1.5,2.5,2.5,3.5,2.5,2.5,0.5,rep(0,20))
exit <- c(5.0,5.2,5.2,3.9,4.0,3.6,4.0,3.0,4.2,4.0,2.9,4.3,6.2,4.2,3.0,3.9,4.1,4.0,3.0,2.0,0.2,1.2,0.6,1.9,1.7,1.1,0.2,2.2,0.8,1.9,1.2,2.3,2.2,0.2,1.7,1.0,0.6,0.2,1.1,1.3)
censor <- c(1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,rep(1,20))
parttime <- c(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0)
age <- c(34,28,29,38,33,33,32,28,40,30,29,34,31,33,28,29,29,31,29,29,30,37,33,38,34,37,37,40,29,38 ,49,32,30,27,35,34,35,30,35,34)

doctors <- data.frame(id,entry,exit,censor,parttime,age)

Теперь о модели.

coxph(Surv(entry, exit, 1-censor) ~ parttime + age + age:exit, data = doctors)

Это правильный способ указать модель с учетом структуры данных и того, что мы хотим знать? Ответ здесь говорит о том, что это правильно, но я не уверен, например, правильно ли указана переменная взаимодействия.


person llewmills    schedule 30.04.2018    source источник


Ответы (1)


Как это часто бывает, я сам решаю, как это сделать, только после того, как я отправлю вопрос о проблеме в SO. Если есть взаимодействие с предсказателем времени, нам нужно преобразовать набор данных в процесс подсчета, формат периода человека (то есть длинную форму). Это связано с тем, что каждому участнику нужен интервал, который отслеживает их статус по отношению к событию для каждой временной точки, когда событие произошло с кем-либо еще в наборе данных, до момента, когда они вышли из исследования.

Сначала создадим переменную события

doctors$event <- 1 - doctors$censor

Прежде чем мы запустим модель Кокса, нам нужно использовать функцию survSplit в пакете survival. Для этого нам нужно создать вектор всех моментов времени, когда произошло событие.

cutPoints <- order(unique(doctors$exit[doctors$event == 1]))

Теперь мы можем передать это в функцию survSplit, чтобы создать новый набор данных ...

docNew <- survSplit(Surv(entry, exit, event)~.,
                   data = doctors,
                   cut = cutPoints,
                   end = "exit")

... на котором мы затем запускаем нашу модель

coxph(Surv(entry,exit,event) ~ parttime + age + age:exit, data = docNew)

Вуаля!

person llewmills    schedule 01.05.2018