不会发生的重大事件的生存回归

数据挖掘 回归 数据 生存分析
2021-10-12 01:47:11

我想对个人“死亡”之前的持续时间进行一些生存回归。最终目的是知道,给定一个人,他最有可能“死亡”之前需要多长时间(例如,生存函数的概率小于 0.1)。

我的问题是,在我的训练集中,我有一个变量对我的目标变量有很大影响,但不适用于测试集(并且不会在现实生活中发生)。

假设我的训练数据如下:

id   status   poison_time  death_time     sex
 0     1          90           92          f
 1     0          90          150          f 
 2     1          90           91          f  
 3     1          60          130          m
 4     0          60          150          m
 5     1          60           62          m

和 :

  • status = 1 代表死者,0 代表审查数据
  • 毒药时间 : 对应于注射毒药的时间
  • death_time : 死亡时间或最后一次随访时间
  • sex :个人的性别(这里不相关,想象一堆有用的变量)

我不能忽略poison_time: 尽管对于某些人来说,毒药不会那么有效(id 为 3 的个人,或最终被右删失的个人)的影响。它对death_time.

在我的测试数据中没有注射毒药,但我仍然想知道“一个人最有可能死亡需要多长时间”,知道我的其他变量(性别等)

像训练集这样的损坏数据是否仍然有可能得到相关结果?

1个回答

如果我正确理解您的问题,我认为这是可能的¹,但是您必须做一些额外的工作,并且您可能会受到可以使用的模型的限制。

首先,您有一个时变数据集,因此必须正确处理。你的毒在出生后很久就会出现,这对建模很重要。否则,您会偏向您的模型。例如:假设每个人都在 90 岁时中毒,如果他们活得那么长。那么仅仅是中毒的行为就是长寿的信号,而实际上,它会加速主体的死亡。也读一读,了解更多关于为什么对时变协变量建模很重要的论点。

好的,所以我获取了您的数据集,并将其建模为时变数据集(见下文)。注意:

  1. 一个主题可能有超过 1 行(在您的情况下,每个人最多有两行,一排用于中毒前,一排用于中毒后)
  2. 一个主题的每一行都是互斥的(参见startstop列)。如果他们在该status间隔结束时死亡,则为真。
  3. poisoned 是中毒后激活的布尔标志。
    start     poisoned sex   stop  id  status
0       0            0   f     90   0   False
1      90            1   f     92   0    True
2       0            0   f     90   1   False
3      90            1   f    150   1   False
4       0            0   f     90   2   False
5      90            1   f     91   2    True
6       0            0   m     60   3   False
7      60            1   m    130   3    True
8       0            0   m     60   4   False
9      60            1   m    150   4   False
10      0            0   m     60   5   False
11     60            1   m     62   5    True

上述矩阵具有完全相同的信息,但呈现方式不同。


好的,所以我们现在需要选择一个可以处理时变数据集的模型。让我们退后一步问“在训练数据上拟合模型后,我可以将其“传输”到测试数据(没有中毒)吗?我认为,是的,这是有效的,而且如果有人在中毒之前就死了,这将更有效。您的模型将做的是了解与给定变量相关的风险因素中毒/没有中毒。因此,当您转移到测试数据时,已经了解了风险因素并且可以进行预测。这是一个类比:我正在研究加拿大和美国学生的学生考试成绩,并且还有其他变量,如午餐、成绩、背景等,以及它们之间可能的相互作用。“拟合”的目标是在给定其他变量的情况下学习午餐与考试成绩的关系。所以当我在测试数据中只关注加拿大学生的模型时,我的模型仍然有效。

(但是,如果我的训练数据中没有加拿大学生,那么如果我希望在测试数据中关注加拿大学生,那么模型的有效性可能会受到质疑。这就是为什么我希望你的训练数据中有受试者在成为中毒)。


我们可以使用 Cox 的比例风险模型拟合时变数据集。(线性)模型的输出如下所示:

---
             coef exp(coef)  se(coef)     z    p  -log2(p)  lower 0.95  upper 0.95
poisoned    17.60  4.41e+07   2670.86  0.01 0.99      0.01    -5217.18     5252.38
sex         -0.82      0.44      1.25 -0.66 0.51      0.97       -3.28        1.64
---

根据您的描述,听起来您的测试数据不是随时间变化的。没关系,它仍然适合时变框架:只是每个测试对象都有一行。您可以选择将poisoned变量排除在外,或者将其始终保留为 0。后者可能更容易,特别是如果你有交互。

¹我可能会遗漏一些重要的问题,这会使这一切变得毫无用处。通常,使用时变数据很容易弄乱因果关系/数据泄漏。