在生存分析中,引入一个改变生存率但发生时间不同的变量的正确方法是什么?

数据挖掘 生存分析 时间
2022-02-25 01:43:58

我正在使用具有比例风险的 cox 回归进行生存分析,我们想分析现象的引入是否会影响到个人死亡的时间。

一个类似的例子是:我们有患者在疾病的不同阶段接受了药物治疗(也在不同的年龄,有些人根本没有服用药物),应该如何引入治疗变量,以便我们可以测量“强度”的引入变化。

我有一个可能的解决方案:

  • 为引入药物的时间范围创建一个虚拟外生变量。“前 0-6 个月”、“6 m - 1 年”、“1-2 年”、“从不”,这是从患者出生开始测量的。
  • 创建相同的外生变量,但不是虚拟变量。
  • 改变时间变量,而不是从出生开始,而是从药物的引入开始测量(问题将是对于没有药物的患者的这个变量的定义)。
  • 复制服用药物的人的行。在第一次重复中,从出生到引入药物之间的时间是“审查死亡”;第二次重复将包括从引入药物到实际死亡之间的时间。

如今,该模型包括将药物作为假人引入,但没有考虑引入的时间。

1个回答

如果你不小心,你会遇到的问题是“不朽的时间偏差”。简而言之,问题在于受试者至少在观察 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')

另一种不使用虚拟变量的解决方案是创建与上述时间变量的交互,但我相信这将更难解释。