如何使用 Kaplan-Meier 方法获得数据中每个个体的生存时间预测?

数据挖掘 机器学习 Python 预测建模 数据分析 生存分析
2022-02-12 01:40:39

我正在尝试学习如何在生命线包中使用 Kaplan-Meier 生存估计模型。文档说该函数KaplanMeierFitter.fit返回“ a modified self, with new properties like 'survival_function_'.”我检查了它survival_function_的内容是什么 -它似乎包含数据集中所有玩家在每个时间间隔的平均生存概率。例如,在我的数据集中,有 66 个月和大约 250,000 名玩家(即我们试图预测其死亡事件的个人 - 其中 75% 已经死亡,其余 25% 是删失数据,即他们的死亡有未观察到),因此survival_function_包含以下内容:

>>> kmf.survival_function_

        KM_estimate
timeline            
-1.0    1.000000
0.0     0.995473
1.0     0.779609
2.0     0.621312
3.0     0.508698
4.0     0.424205
5.0     0.366714
6.0     0.324090
7.0     0.289432
8.0     0.259339
9.0     0.234256
10.0    0.212542
11.0    0.192735
12.0    0.172880
13.0    0.157821
14.0    0.144604
15.0    0.132614
16.0    0.121743
17.0    0.112202
18.0    0.103710
19.0    0.095829
20.0    0.088811
21.0    0.082302
22.0    0.076773
23.0    0.071249
24.0    0.065752
25.0    0.060534
26.0    0.056082
27.0    0.051978
28.0    0.048073
...     ...
37.0    0.023696
38.0    0.020562
39.0    0.017846
40.0    0.015783
41.0    0.013817
42.0    0.012253
43.0    0.010645
44.0    0.009354
45.0    0.008186
46.0    0.007195
47.0    0.006274
48.0    0.005486
49.0    0.004656
50.0    0.003948
51.0    0.003391
52.0    0.002823
53.0    0.002352
54.0    0.002004
55.0    0.001655
56.0    0.001388
57.0    0.001114
58.0    0.000932
59.0    0.000707
60.0    0.000536
61.0    0.000343
62.0    0.000193
63.0    0.000080
64.0    0.000038
65.0    0.000016
66.0    0.000000

68 rows × 1 columns

它告诉我们整个人口在每个时间段的平均生存概率,包括死亡和审查的玩家。它没有告诉我们每个被审查玩家的生存概率,这是我感兴趣的。我如何找到它?它可以详细到给出每个玩家在 66 个月中每个月的生存概率。或者,如果这不可能,我可以让每个玩家在未来某个固定时间(比如 3 个月或其他任何时间)的生存概率(这是 66 个时间段中的一个)。

换句话说,不是输出是66x1平均生存概率的向量,而是我可以得到一个维度的输出矩阵txn,其中t是时间段n的数量,是数据集中被审查的玩家的数量,以及条目 (i,j ) 是玩家i在时间段内的生存概率j吗?

如果 KM 方法无法做到这一点,请随时建议其他方法,以便获得每个人的生存估计。谢谢你。

1个回答

Kaplan Meier 曲线是一个汇总统计量,类似于平均值。因此,它是一个无条件的统计量。如果您对条件生存感兴趣,我们也可以使用 Kaplan Meier 曲线来做到这一点。先说一些符号。T是未知的死亡时间,并且S(t)=P(T>t)无条件生存曲线。

给定一个主题已经过去了一段时间s,我们想知道P(T>t|T>s). 我们可以扩展这个条件概率:

P(T>t|T>s)=P(T>t and T>s)P(T>s)=P(T>t)P(T>s) ,since t > s=S(t)S(s)

也就是说,我们按比例缩放整个生存曲线S(s).

在实践中,如果您有一个审查对象,并且您想知道他们之后的条件生存,您只需按他们审查时间的生存函数进行缩放。

在生命线中,有一个属性KaplanMeierFitter.conditional_time_to_event_可以计算给定生存时间的中位剩余生存时间t. 这可以用作条件预测。

kmf = KaplanMeierFitter().fit(t, e)
censored_times = t[~e.astype(bool)]
predicted_life_remaining = kmf.conditional_time_to_event_.asof(censored_times)