Как можно запустить модель Time-Varying-Cox-Proportional-Hazards-Model с экспоненциальным распределением базовой опасности в "линиях жизни"?
У меня есть продолжение этого вопроса.
Исходная ситуация: я хотел оценить модель пропорционального риска Кокса с экспоненциальным распределением для базовой опасности. Часть 1.) решения состояла в том, чтобы ближе рассмотреть функцию опасности, которая, как было показано,
h(t|x) = lambda_0 * exp(beta * x)
что можно оценить с использованием модели ускоренного времени отказа (AFT), где опасность:
h(t|x) = lambda_0 * exp(-beta * x)
Часть 2.) Решением было определить уникальный класс с желаемым свойством.
Текущая ситуация. Теперь я хочу расширить свою модель, чтобы включить вариации времени. Lifelines имеет документацию для этого. Опасность для таких моделей
h(t|x(t)) = lambda_0(t) * exp(beta * x(t))
,
Пытаясь решить проблему, я начинаю с части 1.), опасность (IMO)
h(t|x(t)) = lambda_0 * exp(beta * x(t))
,
так что особый случай опасности, упомянутой ранее (lambda_0(t) = lambda_0
для всех t
). Моя борьба идет с частью 2). В cox_time_varying_fitter.py, (временное изменение) базовая опасность в функции _compute_cumulative_baseline_hazard
моделируется непараметрически death_counts / hazards_at_t.sum()
, и я ожидаю, что эта функция должна быть переопределена параметрически с помощью функции, аналогичной.
def _cumulative_hazard(self, params, T, Xs):
# params is a dictionary that maps unknown parameters to a numpy vector.
# Xs is a dictionary that maps unknown parameters to a numpy 2d array
lambda_ = np.exp(np.dot(Xs['lambda_'], params['lambda_']))
return T / lambda_
но тогда я понятия не имею, где взять lambda_
от, и как это решение будет чем-то отличаться от не изменяющейся во времени модели AFT.
Пример данных:
from lifelines import CoxPHFitter
import pandas as pd
df = pd.DataFrame({
'id': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'start': [0, 1, 2, 0, 1, 2, 0, 1, 2],
'stop' : [1, 2, 3, 1, 2, 3, 1, 2, 3],
'timevarying': [-1, 0, 1, 2, 0, -2, -3, 0, 3],
'event': [0, 0, 1, 0, 0, 0, 0, 0, 1]
})
ctv = CoxTimeVaryingFitter()
ctv.fit(df, id_col="id", event_col="event", start_col="start", stop_col="stop")
Цель не состоит в том, чтобы узнать, какое ковариатное влияние влияет на шансы наблюдения события; вместо этого цель состоит в том, чтобы предсказать опасность для различных переменных во времени значений переменной timevarying
, В настоящее время мне удается получить только частичную опасность, но мне также нужна базовая опасность. Конечно, в документации указано, что прогноз в таких случаях не тривиален, но рассмотрим timevarying
быть температурой в некоторой области и случился ли первый пожар - в таких случаях я думаю, что прогноз, использующий данные прогноза погоды, является жизнеспособным.
Вопрос: как можно запустить модель изменяющегося во времени Кокса, пропорционального риска и экспоненциального распределения базовой опасности в lifelines
?