生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及「建议收藏」

生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及「建议收藏」生存分析(SurvivalAnalysis)、Cox风险比例回归模型(Coxproportionalhazardsmodel)及C-index1.生存分析生存分析指的是一系列用来探究所感兴趣的事件的发生的时间的统计方法。常见的有1)癌症患者生存时间分析2)工程中的失败时间分析等等。1.1定义给定一个实例iii,我们用一个三元组来表示(Xi,δi,Ti)(X_i,\del…

大家好,又见面了,我是你们的朋友全栈君。

生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及C-index


1. 生存分析

生存分析指的是一系列用来探究所感兴趣的事件的发生的时间的统计方法。常见的有1)癌症患者生存时间分析2)工程中的失败时间分析等等。

1.1 定义

给定一个实例 i i i,我们用一个三元组来表示 ( X i , δ i , T i ) (X_i, \delta_i, T_i) (Xi,δi,Ti),其中 X i X_i Xi表示该实例的特征向量, T i T_i Ti表示该实例的事件发生时间。

如果该实例发生了我们感兴趣的事件,那么 T i T_i Ti表示的是事件发生时间点到基准时间点之间的时间,同时 δ i = 1 \delta_i = 1 δi=1
如果该实例未发生我们感兴趣的事件,那么 T i T_i Ti表示的是事件发生时间点到观察结束时间点的时间,同时 δ i = 0 \delta_i = 0 δi=0

生存分析的研究目标就是对一个新的实例 X j X_j Xj,来估计它所发生感兴趣事件的时间。

1.2 删失(censored)

在生存分析研究中,对于某些实例,会出现在我们的研究期间,并没有出现任何感兴趣的时间,我们将这种情况称之为删失(censored)。

出现这种情况的可能原因有:
1)实例在研究阶段就是没有出现感兴趣的事件(right-censored)
2)在研究阶段,丢失了该实例
3)该实例经历了其他的事件导致无法继续跟踪

2 生存概率(Survival probability)

生存概率也叫作生存方程 S ( t ) = P r ( T > t ) S(t) = Pr(T>t) S(t)=Pr(T>t),生存方程指的是实例出现感兴趣的事件的时间 T T T不小于给定的时间 t t t的概率。

2.1 Kaplan-Meier survival estimate

KM方法是一种无参数方法(non-parametric)来从观察的生存时间来估计生存概率的方法。

对于研究中的第 n n n个时间点 t n t_n tn,生存概率可以计算为:
S ( t n ) = S ( t n − 1 ) ( 1 − d n r n ) S(t_n) = S(t_{n-1})(1-\frac{d_n}{r_n}) S(tn)=S(tn1)(1rndn)
其中, S ( t n − 1 ) S(t_{n-1}) S(tn1)指的是在 t n − 1 t_{n-1} tn1时间点的生存概率; d n d_n dn指的是在时间点 t n t_n tn所发生的事件数; r n r_n rn指的是在快要到时间点 t n t_n tn时,还存活的人(如果在 t n − 1 t_{n-1} tn1 t n t_n tn之间有实例censored,那么在计算 r n r_n rn时应该将该患者剔除出去); t 0 = 0 , S ( 0 ) = 1 t_0=0, S(0)=1 t0=0,S(0)=1

R语言实现KM生存分析示例

在这里插入图片描述

上图为构建的KM生存分析模型可视化结果。其中,

1)曲线上垂直下降的部分表明,在该时刻有感兴趣的事件发生(通过观察 S ( t n ) S(t_n) S(tn)我们能够看到,只有当 d n d_n dn不为零的时候,才会从 S ( t n − 1 ) S(t_{n-1}) S(tn1)的值才会减小得到 S ( t n ) S(t_n) S(tn);否则,没有事件发生, S ( t n − 1 ) = S ( n ) S(t_{n-1})=S(n) S(tn1)=S(n)

2)曲线上的垂直stick表示的是,在该时刻,有实例成为了censored,如果在 t n − 1 t_{n-1} tn1 t n t_n tn之间有实例censored,那么在计算 r n r_n rn时应该将该患者剔除出去

2.2 Log-Rank test 比较不同的生存曲线

在利用KM方法得到多条生存曲线后,只通过直接的观察来确定多条曲线之间是否具有显著性差异是不充分的。因此,log-rank test被广泛的用来比较两条或多条生存曲线。

1)log-rank test是一种非参数检验,因此对于生存概率的分布没有任何假设;
2)同时,log-rank test 的null hypothesis(原假设)为两个曲线代表的两个组之间,在生存率上没有显著性差异。
3)log-rank test比较的是每个组中观察到的事件数,与在原假设为真的情况下,每个组期望的事件数。
4)log-rank test统计量类似于卡方检验(Chi-square test)的统计量


3 风险概率(hazard probability)

风险概率指的是在时间 t t t之前还没有发生任何事件的情况下,在时间 t t t发生感兴趣的时间的概率。
h ( t ) = lim ⁡ δ ( t ) → 0 P r ( t ≤ T ≤ t + δ ( t ) ∣ T ≥ t ) δ ( t ) h(t) = \lim_{\delta(t)\rightarrow0}\frac{Pr(t\leq T\leq t+\delta(t)|T\geq t)}{\delta(t)} h(t)=δ(t)0limδ(t)Pr(tTt+δ(t)Tt)

3.1 累积风险(cummulative hazard)

在针对单因子进行生存分析时,我们已经得到了生存方程 S ( t ) S(t) S(t),那么,根据 S ( t ) S(t) S(t),累积风险为:
H ( t ) = − log ⁡ ( S ( t ) ) H(t) = -\log(S(t)) H(t)=log(S(t))
下图为上述生存方程 S ( t ) S(t) S(t)变换得到的累积风险 H ( t ) H(t) H(t)
在这里插入图片描述


4 Cox 比例风险回归模型

4.1 为什么要用Cox 比例风险回归

上述生存分析模型,即Kaplan-Meier survival estimate,是单变量分析(univariable analysis),在做单变量分析时,模型只描述了该单变量和生存之间的关系而忽略其他变量的影响。(为什么要考虑multi-variables?比如在比较两组病人拥有和不拥有某种基因型对生存率的影响,但是其中一组的患者年龄较大,所以生存率可能受到基因型 或/和 年龄的共同影响)

同时,Kaplan-Meier方法只能针对分类变量(治疗A vs 治疗B,男 vs 女),不能分析连续变量对生存造成的影响。

为了解决上述两种问题,Cox比例风险回归模型(Cox proportional hazards regression model)就被提了出来。

4.2 Cox 模型的定义

h ( t , X i ) = h 0 ( t ) × exp ⁡ ( X i β ) h(t, X_i) = h_0(t) \times \exp(X_i \beta) h(t,Xi)=h0(t)×exp(Xiβ)
其中, h 0 ( t ) h_0(t) h0(t)是基准风险方程,可以是任意一个针对时间 t t t的非负方程; X i X_i Xi是实例 i i i的特征向量; β \beta β是参数向量,该向量是通过最大化cox部分似然得到的。

4.3 partial likelihood

实例 i i i以及其所发生事件的时间 T i T_i Ti,那么实例 i i i发生事件的概率为:
L i ( β ) = h ( T i , X i ) ∑ j : T j ≥ T i h ( T i , X j ) L_i(\beta) = \frac{h(T_i, X_i)}{\sum_{j:T_j \geq T_i}h(T_i, X_j)} Li(β)=j:TjTih(Ti,Xj)h(Ti,Xi)
其中,分子上的项,主要要确定实例 i i i发生事件的时间 T i T_i Ti,有了 T i T_i Ti才能为计算分母来选取实例。

根据时间 T i T_i Ti,分母中首先找到在时间 T i T_i Ti之前还没有发生事件的实例(censored应该不计入了吧,同时应该包含 h ( T i , X i ) h(T_i,X_i) h(Ti,Xi)本身),然后分别计算他们在 T i T_i Ti时刻的风险值并求和作为分母。

这样就得到了针对发生过事件的实例 i i i的发生事件概率 L i ( β ) L_i(\beta) Li(β)
L i ( β ) = h ( T i , X i ) ∑ j : T j ≥ T i h ( T i , X j ) = h 0 ( T i ) × exp ⁡ ( X i β ) ∑ j : T j ≥ T i h 0 ( T i ) × exp ⁡ ( X j β ) = exp ⁡ ( X i β ) ∑ j : T j ≥ T i exp ⁡ ( X j β ) L_i(\beta) = \frac{h(T_i, X_i)}{\sum_{j:T_j \geq T_i}h(T_i, X_j)} = \frac{h_0(T_i)\times \exp(X_i \beta)}{\sum_{j:T_j \geq T_i}h_0(T_i) \times \exp(X_j \beta)} = \frac{\exp(X_i \beta)}{\sum_{j:T_j \geq T_i} \exp(X_j \beta)} Li(β)=j:TjTih(Ti,Xj)h(Ti,Xi)=j:TjTih0(Ti)×exp(Xjβ)h0(Ti)×exp(Xiβ)=j:TjTiexp(Xjβ)exp(Xiβ)
因此,该概率和时间无关,并不需要来对 h 0 ( t ) h_0(t) h0(t)进行建模,所以称之为partial likelihood。

在得到针对单个实例的事件发生概率之后,为了估计使得所有样本出现我们数据中这样的样本的概率最大,我们需要使用极大似然估计来估计参数。假设每个实例的是独立同分布的,那么我们可以得到针对我们样本的似然概率:

L ( β ) = ∏ i : δ i = 1 exp ⁡ ( X i β ) ∑ j : T j ≥ T i exp ⁡ ( X j β ) L(\beta) =\prod_{i:\delta_i=1} \frac{\exp(X_i \beta)}{\sum_{j:T_j \geq T_i} \exp(X_j \beta)} L(β)=i:δi=1j:TjTiexp(Xjβ)exp(Xiβ)

该公式的意思为,需要将所有出现过感兴趣事件的实例的概率相乘,即 ∏ i : δ i = 1 \prod_{i:\delta_i = 1} i:δi=1

得到上述似然概率,我们只需要选择使得 L ( β ) L(\beta) L(β)得到最大值的 β \beta β值即可,即:
arg ⁡ max ⁡ β { L ( β ) } \arg\max_\beta\{ L(\beta)\} argβmax{
L(β)}

R语言实现Cox比例风险回归模型
Cox比例风险回归模型wiki


5 C-index

英文全称为concordance index。对于存在censored实例的生存数据,一些标准的评估方法是不合适的,比如均方误差等等。

5.1 计算方法

1)将所有样本两两配对,共组成 N × ( N − 1 ) / 2 N \times (N-1)/2 N×(N1)/2
2)排除其中无法判断出谁先出现感兴趣事件的配对。比如配对中两个实例都没有出现感兴趣的事件;配对中的两个实例A、B,如果A是censored(非right-censored),时间为 T A T_A TA,B是发生事件的,其发生时间为 T B T_B TB,并且 T A &lt; T B T_A &lt; T_B TA<TB。排除无法判断谁先出现事件的配对后,得到总的可比较对数为 M M M
3)在剩下的 M M M对中,预测结果和实际结果相一致的配对数为 K K K,即我预测的生存率 S ( X A ) &lt; S ( X B ) S(X_A) &lt; S(X_B) S(XA)<S(XB),实际的 T A &lt; T B T_A &lt; T_B TA<TB,即为相一致。
4)则 c − i n d e x = K M c-index = \frac{K}{M} cindex=MK

C-index的计算可由下列公式描述:
1 M ∑ i : δ i = 1 ∑ j : T i &lt; T j I [ S ( T i , X i ) &lt; S ( T j , X j ) ] \frac{1}{M}\sum_{i:\delta_i=1}\sum_{j:T_i &lt; T_j} I[S(T_i, X_i) &lt; S(T_j, X_j)] M1i:δi=1j:Ti<TjI[S(Ti,Xi)<S(Tj,Xj)]

其中,函数 I [ C ] I[C] I[C]指的是如果 C C C为真,则 I [ C ] = 1 I[C] = 1 I[C]=1,否则 I [ C ] = 0 I[C] = 0 I[C]=0
第一个求和函数 ∑ i : δ i = 1 \sum_{i:\delta_i = 1} i:δi=1表示配对中至少要有一个实例发生了事件;
第二个求和函数 ∑ j : T i &lt; T j \sum_{j:T_i &lt; T_j} j:Ti<Tj表示配对中,另一个的记录时间 T j T_j Tj必须长于第一个实例事件发生时间;两个求和函数选择出了能够用于比较的所有配对组合。

5.2 bootstrap 重抽样

为了得到更加robust的评估结果,希望通过多次重复采样的方法来计算多组评估结果,从而得到更为有说服力的结果。

1)从原始样本中允许重复抽取的抽取一定数量的样本
2)根据抽取得到的新样本,计算统计量 T T T,这里为C-index
3)重复上述N次(一般大于1000),得到N个统计量 T T T
4)计算上述N个统计量 T T T的样本方差

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146493.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • resnet18 pytorch_如何搭建服务器

    resnet18 pytorch_如何搭建服务器参照ResNet50的搭建,由于50层以上几乎相同,叠加卷积单元数即可,所以没有写注释。101和152的搭建注释可以参照我的ResNet50搭建中的注释:训练可以参照我的ResNet18搭建中的训练部分:ResNet101和152可以依旧参照ResNet50的网络图片:上代码:ResNet101的model.py模型:importtorchimporttorch.nnasnnfromtorch.nnimportfunctionalasFclassDownSampl

  • C++ 输入的是1.3变1.29999995问题

    C++ 输入的是1.3变1.29999995问题今天一位粉丝在评论中问到了这个问题,我简单的说了原理和改进方法,将float改为double就可以了,下面我进行详细整理先说一下debug是啥意思马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而…

  • pycharm最新激活码2021_在线激活「建议收藏」

    (pycharm最新激活码2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html65MJGLILER-eyJsaWN…

  • python alpha量化交易软件_2019AI量化交易教程视频 AI量化交易模型教程 alpha量化选股模型交易系统 CTA型量化策略教程…

    python alpha量化交易软件_2019AI量化交易教程视频 AI量化交易模型教程 alpha量化选股模型交易系统 CTA型量化策略教程…第一部分:量化交易基础第1章量化交易基础:成对交易与模型自动化1.1量化交易简介1.2大纲简介与课程设置1.3成对交易算法1.4【Python实战】基于成对交易算法的目标股票池选取和自动化交易1.5成对交易问题探讨与模型优化1.6【Python实战】案例算法优化之动态成对交易模型第二部分:Alpha策略篇第2章寻找市场中的alpha2.1利用技术面数据挖掘A股中具有超额收益的股票…

  • Js Date日期格式和字符串的相互转化「建议收藏」

    Js Date日期格式和字符串的相互转化「建议收藏」Date格式转字符串varnewDate=newDate();返回的Date格式:WedDec13201716:00:00GMT+0800(中国标准时间)而且是object类型的所需求的格式为2017-12-1316:00:00转换代码varformatDate=function(date){vary=date.getFullYear();

  • java 线程池面试题

    java 线程池面试题Java多线程面试问题 1.进程和线程之间有什么不同? 一个进程是一个独立(selfcontained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。2.多线程编程的好处是什么?  在多线程程序中,多个线程被

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号