Модель истории дискретного времени (выживания) в R

10

Я пытаюсь вписать модель с дискретным временем в R, но я не уверен, как это сделать.

Я читал, что вы можете организовать зависимую переменную в разных строках, по одной для каждого временного наблюдения, и использовать glmфункцию со ссылкой logit или cloglog. В этом смысле, у меня есть три колонки: ID, Event(1 или 0, в каждой временной набл) и Time Elapsed(с начала наблюдения), а также других ковариаций.

Как мне написать код для соответствия модели? Какая зависимая переменная? Я думаю, я мог бы использовать Eventв качестве зависимой переменной и включить Time Elapsedв ковариат. Но что происходит с ID? Мне это нужно?

Спасибо.

Фран Вильямиль
источник
Когда вы говорите: «Я пытаюсь подобрать модель с дискретным временем» ... какую модель вы хотите установить? (Если это для какой-то темы, пожалуйста, добавьте self-studyтег.)
Glen_b -Восстановить Монику
Я хочу соответствовать логической модели выживания с дискретным временем.
Фрэн Вильямиль
1
Кажется маловероятным, что идентификатор является релевантным, но это зависит от того, что именно он представляет и является ли это тем, что вы хотите смоделировать.
Glen_b

Ответы:

8

Вы в основном правы относительно организации данных. Если у вас есть дела, организованные так:

ID M1 M2 M3 EVENT

Вы, вероятно, захотите реорганизовать данные так, чтобы они выглядели так:

ID TIME EVENT
1  1    0
1  2    1
1  3    1
2  1    0
2  2    0
.  .    .
.  .    .

Я называю это преобразованием из широкого формата в длинный. Это легко сделать в R с помощью reshape()функции или еще проще с помощью reshape2пакета.

Лично я бы оставил IDполе для его потенциального использования при определении источника вариаций в модели смешанных эффектов. Но это не обязательно (как указано @BerndWeiss). Ниже предполагается, что вы хотели бы сделать это. Если нет, используйте аналогичную модель glm(...,family=binomial)без терминов случайного эффекта.

lme4Пакет в R будет соответствовать смешанным эффектам логистической регрессионной модели , аналогичной той , что вы говорите, за исключением случайного эффекта или два для учета изменчивости коэффициентов по предметам ( ID). Ниже приведен пример кода для подбора примерной модели, если ваши данные хранятся во фрейме данных с именем df.

require(lme4)
ans <- glmer(EVENT ~ TIME + (1+TIME|ID), data=df, family=binomial)

Эта конкретная модель позволяет коэффициентам TIMEи interceptкоэффициентам изменяться случайным образом по идентификатору. Другими словами, это иерархическая линейная смешанная модель измерений, вложенная в отдельных лиц.

Альтернативная форма модели истории событий с дискретным временем разбивается TIMEна отдельные макеты и подходит для каждого в качестве параметра. По сути, это дискретный случай модели Кокса PH, поскольку кривая опасности не ограничивается линейной (или квадратичной, или, тем не менее, вы можете представить себе время преобразования). Хотя, возможно, вы захотите сгруппировать TIMEв управляемый набор (то есть небольшой) дискретных периодов времени, если их много.

Дальнейшие альтернативы включают преобразование времени, чтобы получить правильную кривую опасности. Предыдущий метод в основном освобождает вас от необходимости делать это, но предыдущий метод менее экономен, чем этот (и исходный линейный случай, который я изложил), потому что у вас может быть много временных точек и, следовательно, много неприятных параметров.

Отличным справочником по этой теме является Прикладной продольный анализ данных Джудит Сингер и Джона Уиллета : изменение моделирования и возникновение событий .

ndoogan
источник
4
Вам не нужна «модель логистической регрессии со смешанными эффектами» для оценки простой модели с дискретным временем (Fiona Steel опубликовала несколько статей на тему « Многоуровневый анализ истории событий с дискретным временем »). У вас есть ссылка? На этапе подготовки данных я также предлагаю взглянуть на функцию SurvSplit .
Бернд Вайс
6

Певица и Виллетт были опубликованы много на эту тему. Я настоятельно рекомендую вам прочитать некоторые из их статей . Вы также можете получить их книгу «Прикладной продольный анализ данных: моделирование изменений и возникновения событий» . Очевидно, один из лучших учебников в этой области.

Для большинства глав книг доступен пример кода R (см. Главы 11 и далее), который демонстрирует, как должны быть структурированы ваши данные («формат человеко-период») и как анализировать данные такого рода. Для стандартной модели с дискретным временем вам не нужна переменная ID, и вам также не нужно оценивать модель смешанных эффектов, как предлагает @ndoogan. Простая glm(event ~ time + ..., family = "binomial")работает просто отлично. Зингер и Уиллетт также обсуждают много вопросов, как моделировать переменную времени (линейная, квадратичная, ...)

Чтобы привести еще две ссылки, которые я настоятельно рекомендую:

Бернд Вайс
источник
1

(0,1],(1,2],...dynamichazard::static_glm

Этот метод отличается от @ndoogan с манекенами времени, поскольку вы получаете только один общий перехват во всех периодах времени с dynamichazard::static_glm. Вы можете, однако, получить манекен для каждого периода, вызвав dynamichazard::get_survival_case_weights_and_dataс аргументом use_weights = FALSE, добавить индикатор фиктивного времени себе возвращаемый , data.frameа затем вызвать , например glm.

Бенджамин Кристофферсен
источник
Далее вас может заинтересовать эта виньетка в моей посылке dynamichazard.
Бенджамин Кристофферсен
0

Это называется данными процесса подсчета. Пакет Survival имеет очень хорошую функцию tmerge (). Очень полезно вставлять зависимые от времени или кумулятивные ковариаты и время наблюдения за разделами соответственно. Процесс очень хорошо объяснен в этой виньетке

Корай
источник