生存分析:时间背后的数据价值!

💡 生存分析是一种研究现象或物体随时间推移而发生的变化的方法,可广泛应用于金融、医疗、保险、交通等领域,比如预测疾病复发风险、评估投资产品收益、估算保险赔付概率等。通过挖掘数据背后的价值,可以帮助我们更好地理解现象、优化决策,实现效益最大化。

机器学习:让数据焕发生机

💡 机器学习则已经渗透到我们生活的方方面面,例如:推荐系统、图像识别、语音识别等。极大地提高了数据处理效率和准确性,将机器学习应用到生存分析中,将让数据分析变得更加高效、智能。

学习

1: 从本文你可以获得什么?

数据分析的目的无外乎就是通过统计方法找差异和相关关系,进而将数据分析分为:分类,回归(预测连续值)和生存分析。生存分析本质上也是一种回归问题,但和传统回归的不同之处是数据存在删失。删失原因包括:1)失访;2)其它原因死亡;3)到研究结束为止,研究对象仍未出现终点事件。

在数据分析过程中,小编发现大家最大的问题是无法将自己的变量在不同的分析目的中顺延下去,因此,基于此生存分析合集,你将主要学会如何具体应用深度学习模型进行生存分析,并且迅速掌握用python及R语言实现用自己的数据进行生存分析,发表文章。

整个过程,公众号回复关键字可免费获得数据及脚本。关于软件安装、环境搭建和自己数据导入分析过程中的问题可加小编微信,一对一远程辅导。

2:如何学习?

    小编认为,任何一项学习都是以理论指导下的实践优化。是以掌握生存分析中的核心概念是非常有必要的。鉴于目前生存分析的解读性文章太多,本公众号主打数据分析的实践、实战、复盘以及高分文章的复盘,本文只罗列核心的几个概念,欲只更多,大家可自行检索其他。

3:核心概念

生存时间(Survival Time):从某个特定事件开始,到观察对象发生研究事件(如死亡)或被截断(如失访、实验结束)所经历的时间。

删失(Censoring):是指在观察时间内,研究对象并未发生所关心的结局事件(如疾病复发、死亡等),但由于其他原因,导致我们无法获得该对象的事件发生时间。删失可以分为左删失、区间删失和右删失。
1)左删失是指在观察开始时,研究对象已经处于某种状态,我们无法获得该对象从起始点到观察开始时的生存时间信息。换句话说,生存时间被“剪去”了左端,因此被称为左删失。
举个栗子:假设要研究某种癌症的复发,生存时间是第一次确诊和第二次确诊的间隔。但研究对象不记得第一次确诊时间,我们无法知道患者确诊的具体时间,这就是左删失。

2)区间删失是生存分析中一种特殊的删失情况,它既包括左删失,也包括右删失。在区间删失中,我们只知道研究对象事件发生时间的一个时间区间,而无法确定具体的发生时间点。换句话说,生存时间在时间区间内是未知的。
举个栗子:假设要研究某种疾病的潜伏期,研究人员对一批已经感染该疾病的患者进行随访。由于潜伏期可能受到多种因素的影响,部分患者的潜伏期仅能确定一个大致的时间范围(如:20-30天),而无法确定具体的感染和发病时间。这种情况就属于区间删失。

3)右删失是指在观察期内,研究对象并未发生所关心的事件,但由于其他原因(如失访、搬迁等),导致我们无法获得该对象的事件发生时间。换句话说,生存时间被“剪去”了右端,因此被称为右删失。右删失通常发生在长期随访研究中,部分研究对象可能在观察期内失访或因其他原因无法继续参与研究。
举个栗子:在上述研究癌症复发的例子中,如果一个接受标准治疗的患者在观察期结束前因为其他原因(如搬迁)失去了联系,我们无法获得该患者在观察期内是否发生癌症复发或死亡的信息。这种情况就称为右删失。

在数据分析和录入中,遇到删失的处理方式:删除、填补(均数、中位数、众数)、临近值或相似值估计、多重差补法、缺失作为类别进行统计或机器学习处理。

存活函数(Survival Function):存活函数是描述个体在某个给定时间点上生存的概率。它是生存时间的累积分布函数(CDF),表示在给定时间 t 上存活的概率。

风险函数(Hazard Function):风险函数是描述在给定时间点 t 上事件发生的瞬时风险。它表示在某个时间点上事件发生的概率密度函数(PDF),给出了在该时间点上事件发生的概率。

生存曲线(Survival Curve):生存曲线是描述个体随时间变化的生存概率。它是存活函数的图形表示,通常为递减的曲线。

中位生存时间(Median Survival Time):中位生存时间是指在存活函数中,使得存活概率为0.5的时间点。它表示一半个体事件发生的时间点。

协变量(Covariates):协变量是可能影响生存时间的其他变量,如年龄、性别、治疗方案等。在生存分析中,可以考虑协变量对生存时间的影响。

累积风险(Cumulative Hazard):表示在给定时间范围内,事件累积发生概率的累积概率。它与生存函数互为补数。

4: 生存分析的方法

Kaplan-Meier估计:

     Kaplan-Meier方法是一种非参数方法,用于估计生存函数。它根据数据中观察到的生存时间和截断数据,绘制生存曲线,直观地展示生存情况和时间分布。

Log-Rank检验:

      Log-Rank检验是一种非参数的检验方法,不依赖于分布假设。它广泛应用于生存分析中,用于比较不同治疗组、不同风险因素或不同事件发生情况下的生存差异。

寿命表法:

     寿命表法是一种基于人群的历史数据或经验数据的方法,用于估计生存率和风险率。

半参数生存模型:

     这类模型结合了参数模型和非参数模型的优点,通常包括基线风险函数和协变量效应两部分。常见的半参数模型包括Cox比例风险模型、加速失效时间模型(AFT)等。

参数生存模型:这类模型基于特定的概率分布假设,对生存时间和风险率进行建模。常见的参数生存模型包括指数分布、威布尔分布、对数正态分布等。参数模型的优点是解析形式较简单,但可能受限于分布假设。

非参数生存模型:这类模型不基于特定的概率分布假设,可以灵活地适应各种生存时间分布。常见的非参数生存模型包括核估计方法等。非参数模型的优点是可以适应各种生存时间分布,但计算复杂度可能较高。

机器学习:

     随机生存森林(Random Survival Forest):随机生存森林是一种基于决策树的集成学习方法,用于生存分析预测。它通过构建多棵决策树,每棵树都使用随机选择的特征和样本进行训练,最后综合多棵树的预测结果得到最终的预测。

      支持向量机(Support Vector Machine,SVM):支持向量机是一种常用的机器学习算法,在生存分析中也有应用。通过将生存数据映射到高维空间,支持向量机可以在非线性情况下建立决策边界,从而进行生存时间的预测和分类。

      人工神经网络(Artificial Neural Networks,ANN):人工神经网络是一种模仿生物神经系统结构和功能的机器学习模型。在生存分析中,可以使用多层感知器(Multilayer Perceptron)等神经网络结构,通过学习和优化网络权重,进行生存时间的预测和建模。

     集成学习方法(Ensemble Learning):集成学习方法将多个基本模型的预测结果进行组合,从而得到更准确的预测。在生存分析中,可以使用基于集成学习的方法,如Bagging、Boosting等,对多个模型进行集成,提高生存时间的预测准确性。

     CoxBoost: Cox Boosting是一种集成学习方法,将Cox比例风险模型与Boosting算法相结合,用于解决生存分析问题。Boosting算法是一类迭代的统计学习方法,通过迭代地调整训练样本的权重,并结合一系列弱学习器(如决策树)来提高模型性能。

深度学习模型:

  Cox-nnet:Cox-nnet 是一种结合了深度学习和 Cox 比例风险模型的方法。它使用神经网络模型来估计 Cox 模型中的基线风险函数,然后利用经典的 Cox 模型进行相对风险的估计。Cox-nnet 可以灵活地处理各种类型的特征,包括连续型、分类型和高维稀疏型特征。
  DeepHit:DeepHit 是一种用于生存分析的深度学习模型,基于多任务学习的思想。它将生存分析任务分解为两个子任务:事件时间预测和事件状态预测。DeepHit 使用递归神经网络(Recurrent Neural Network)来学习时间相关特征,并利用深度神经网络(Deep Neural Network)来预测事件状态。

     DeepSurv:DeepSurv 是一种基于神经网络的生存分析模型,它使用多层感知器(Multilayer Perceptron)作为基本架构。它的输入是个体的特征信息和生存时间,输出是相对风险的估计值。DeepSurv 的目标是最小化 Cox 比例风险模型的负对数部分似然函数。
  以上只是生存分析的部分内容,本专栏将重点带大家在R语言及Python在Cox regression、机器学习和深度学习模型的实战复现中体会生存分析的魅力。

分析流程

R语言和Python在数据中的分析过程就像是在工具箱(packages)里取出具体的工具(function)去实现不同的目的,所以R语言和Python的数据分析速成就是在于对于包和函数的学习。

  用R或python进行数据分析的流程包括:

  1.数据加载
  2.数据清洗
  3.统计分析
  4.数据建模
  5.模型诊断
  6.数据预测
  7.预测评估
  8.模型比较

04-18 23:11