Я пытаюсь приспособить модель выживания с усеченными слева данными с помощью пакета 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)
Это правильный способ указать модель с учетом структуры данных и того, что мы хотим знать? Ответ здесь говорит о том, что это правильно, но я не уверен, например, правильно ли указана переменная взаимодействия.