如果你不小心,你会遇到的问题是“不朽的时间偏差”。简而言之,问题在于受试者至少在观察 1 年之后才“在”“1-2 年”组中。这1年被称为永生,因为那时病人不会死。更具体地说,如果我天真地将我的人口划分为“前 0-6 个月”与“1-2 年”并衡量生存率,后一组看起来他们在第一年的生存率要好得多,因为为了获得资格对于后一组,你需要活得更久。
所以你会怎么做?您需要对数据的时变特性进行建模。查看生存数据的“长”格式。下面我有一个使用生命线的 Python 示例。有四个人,每个人将在不同的治疗期接受治疗。我们使用多行(但相同id)来表示不同的时间段(注意互斥的开始/停止)。提供了治疗期的虚拟变量。
import pandas as pd
from lifelines import CoxTimeVaryingFitter
df = pd.DataFrame([
{'id': 1, 'start': 0, 'stop': 12, 'E': 1, 't1': 0, 't2': 0, 't3': 0}, # never received treatment, died at t=12
{'id': 2, 'start': 0, 'stop': 10, 'E': 1, 't1': 1, 't2': 0, 't3': 0}, # received treatment at very start
{'id': 3, 'start': 0, 'stop': 3, 'E': 0, 't1': 0, 't2': 0, 't3': 0}, # will received treatment in second "period"
{'id': 3, 'start': 3, 'stop': 9, 'E': 1, 't1': 0, 't2': 1, 't3': 0}, # received treatment in second "period"
{'id': 4, 'start': 0, 'stop': 6, 'E': 0, 't1': 0, 't2': 0, 't3': 0}, # will received treatment in third "period"
{'id': 4, 'start': 6, 'stop': 11, 'E': 1, 't1': 0, 't2': 0, 't3': 1}, # received treatment in third "period"
])
ctv = CoxTimeVaryingFitter().fit(df, id_col='id', start_col='start', stop_col='stop', event_col='E')
另一种不使用虚拟变量的解决方案是创建与上述时间变量的交互,但我相信这将更难解释。