<lifelines> Решение пропорциональной опасности Кокса после создания переменной взаимодействия со временем
Я использую пакет lifeelines для выполнения регрессии Кокса. После попытки подобрать модель, я проверил предположения CPH на предмет возможных нарушений, и она вернула некоторые проблемные переменные вместе с предложенными решениями.
Одно из решений, которое я хотел бы попробовать, - это предложенное здесь: https://lifelines.readthedocs.io/en/latest/jupyter_notebooks/Proportional%20hazard%20assumption.html
Однако в представленном здесь примере используется CoxTimeVaryingFitter, который, в отличие от CoxPHFitter, не имеет оценки соответствия, что поможет мне оценить производительность модели. Кроме того, CoxTimeVaryingFitter не имеет функции проверки предположений. Означает ли это, что при переводе в эпизодический формат все предположения автоматически выполняются?
В качестве альтернативы, после прочтения учебника SAS по анализу выживания, казалось, что их решение состоит в том, чтобы создать термин взаимодействия напрямую (умножая проблемную переменную на время выживания), не меняя формат на эпизодический формат (как показано в ссылке). Таким образом, я надеялся просто продолжать использовать CoxPHFitter из-за его способности оценивать модели.
Однако после выполнения этой альтернативы, когда я снова вызываю check_assumings в модели с переменной взаимодействия времени, предположение CPH для переменной взаимодействия времени нарушается.
Сейчас я разрываюсь между:
- Использование CoxTimeVaryingFitter без знания производительности модели (кажется плохой идеей)
- Использование CoxPHFitter, но предположение о переменной времени-взаимодействия нарушено (что, по сути, не решает проблему)
Любая помощь относительно решения этой путаницы приветствуется.
1 ответ
Вот одно предложение:
- Если вы выбираете CoxTimeVaryingFitter, то вам нужно как-то оценивать качество вашей модели. Вот один из способов. Используйте коэффициенты регрессии B и запишите свою модель. Я напишу это как S(t;x;B), где S — оценка выживания, t — время, а x — вектор ковариат (возраст, заработная плата, образование и т. д.). Теперь для каждого отдельного i у вас есть вектор ковариат x_i. Таким образом, у вас есть функция выживания для каждого индивидуума. Следовательно, вы можете предсказать, какой человек «потерпит неудачу» первым, какой «вторым» и так далее. Это дает (прогнозируемый) рейтинг выживания. Тем не менее, вы знаете реальный рейтинг выживания, поскольку знаете время отказа или время до события. Теперь подсчитайте, сколько пар (прогнозируемое выживание, истинное выживание) имеют одинаковый рейтинг. По сути, вы будете оценивать соответствие.
- Если вы решите использовать CoxPHFitter, я не думаю, что он предназначался для использования с изменяющимися во времени ковариатами. Вместо этого вы можете использовать два других подхода. Одним из них является расслоение вашей переменной, то есть cph.fit(dataframe, time_column, event_column, strata=['ваша переменная для расслоения']). Недостатком является то, что вы больше не получаете коэффициент риска для этой переменной. Другой подход заключается в использовании сплайнов. Оба эти метода объясняются здесь.