介绍

生存分析的目标是通过事件发生率来模拟过程。在应用统计设置中,这通常意味着识别与某些与基线相比可能导致更高或更低事件率的协变量。当事件是缓解或死亡时,较高的事件发生率对应于风险较高的患者。在生存建模中一个特别的挑战是存在删失(censoring),即患者在随访时间被记录但事件尚未(或可能永远不会)发生[1]。例如,可以对高风险癌症患者监察一整年,在结束时其中一些患者已经过世而一些患者仍然活着——后者在一年时间内有一个删失观察。

医学研究中最常见的模型是比例风险模型(proportional hazards model),该模型试图捕捉患者发生事件的相对顺序。在这样的框架中,删失患者可以提供信息来模拟事件发生率,因为一个删失的患者比一个经历某事件的患者的寿命更长,他可能是风险较低的患者[2]。在许多具有多个随访点的研究中,患者的协变量信息会随时间而变化。例如,在survival package中的heart数据集中,在心脏移植的等待列表中测量患者存活率。以下是数据片段。

library(survival)
head(heart)
## start stop event        age      year    surgery transplant id
## 1     0   50     1 -17.155373 0.1232033       0          0  1
## 2     0    6     1   3.835729 0.2546201       0          0  2
## 3     0    1     0   6.297057 0.2655715       0          0  3
## 4     1   16     1   6.297057 0.2655715       0          1  3
## 5     0   36     0  -7.737166 0.4900753       0          0  4
## 6    36   39     1  -7.737166 0.4900753       0          1  4

我们可以看到id号是3的患者(第3和4行数据)在等了一个月然后接受移植手术,移植后又过了15个月后死亡;id号是4的患者(第5和6行数据)在等了36个月然后接受移植手术,移植后又过了3个月后死亡。 如上所示,时间相关数据集的格式必须用长格式(long-format),其中每个新的测量周期都被视为新观察。这个填充附加行可以被认为是添加左删失观察(除了上面讨论的标准右删失),因为这个新的“患者”在其开始时间的左边没有提供任何信息。

虽然在生存或时间 - 事件分析的许多数据集中,都具有这些与时间相关的属性,但目前使用glmnet或fastcox并不支持来估计这些模型的正则化(regularized version),这些基准库将用于拟合elastic-net模型到比例风险损失函数(proportional hazards loss function)。 在本篇中,我们将展示如何构建一个自定义的近端梯度下降算法 (proximal gradient descent algorithm),该算法可以包含时间依存协变量(time-dependent covariates)。

Elastic-net cox model

为了建立符号公式,将每个观察定义为具有以下元组(tuple):(til,tiu,δi,xi)(t_i^l, t_i^u, \delta_i, x_i)(til​,tiu​,δi​,xi​),在这里tilt_i^ltil​和tiut_i^utiu​是第i号病人的协变量的时间区间,δi\delta_iδi​是病人在tiut_i^utiu​时刻是否发生时间的指示器,xix_ixi​是病人协变量测量值矢量。cox模型的部分似然( partial likelihood)可以很容易地适用于处理这种时间依存协变量的情况。
Partial Likelihood:
L(β)=∏i=1N(exiTβ∑j∈R(ti)NexjTβ)δiL(\beta)=\prod\limits_{i=1}^N(\dfrac{e^{x_i^T \beta}}{\sum\limits_{j\in{R(t_i)}}^Ne^{x_j^T\beta}})^{\delta_i}L(β)=i=1∏N​(j∈R(ti​)∑N​exjT​βexiT​β​)δi​
Partial Log-Likelihood:
ℓ(β)=∑i=1Nδi(xiTβ−log[∑j∈R(ti)Nexp(xiTβ)])\ell(\beta)=\sum\limits_{i=1}^N\delta_i(x_i^T\beta-log[\sum\limits_{j\in R(t_i)}^N exp(x_i^T\beta)])ℓ(β)=i=1∑N​δi​(xiT​β−log[j∈R(ti​)∑N​exp(xiT​β)])

其中,xi=xi(t)x_i=x_i(t)xi​=xi​(t)是时间函数;R(ti)R(t_i)R(ti​)是在事件时间tit_iti​存活/未发生删失的病人的风险指标,特别的:
R(ti)={j:(tju≥ti)∧(tjl<ti)}R(t_i)=\left\{j:(t_j^u\ge t_i)\land (t_j^l<t_i) \right\}R(ti​)={j:(tju​≥ti​)∧(tjl​<ti​)}
第一个条件确保患者要么经历事件,要么在稍后晚于tit_iti​的时间点被审查(因此当i号患者经历事件时是活着的);并且第二个条件确保开始时间发生在事件之前。请注意,在heart dataset中,[t3l,t3u]=(0,1][t_3^l,t_3^u]=(0,1][t3l​,t3u​]=(0,1]并且[t4l,t4u]=(1,16][t_4^l,t_4^u]=(1,16][t4l​,t4u​]=(1,16]保证了3号病人永远不会经历他自身的风险2遍。在yi(tj)=I[i∈R(tj)]时,y_i(t_j)=I[i\in R(t_j)]时,yi​(tj​)=I[i∈R(tj​)]时,使用独热(注释1)^{(注释1)}(注释1)编码[Y]ij=yi(tj)[Y]_{ij}=y_i(t_j)[Y]ij​=yi​(tj​)将极大降低计算量。

对于高维数据集和预测问题,其研究目标是找到一些β\betaβ能够平衡模型的拟合(例如使用数据集的全部信息)并且保证其高的泛化能力(例如忽略数据集特异性噪声)。正则化是一种返回系数向量的技术,该系数向量比原本返回的系数向量“更小”,从而减少了模型估计的方差并改善了泛化。此外,在具有特征数量多于观察数量的高维数据集中,正则化也是一种确保存在唯一解的方法。弹性网模型结合了系数向量的加权L1和L2惩罚项,前者可以导致稀疏性(即严格为零的系数),后者确保平滑的系数收缩。 弹性网优化如下:
Elastic-net loss for the Cox model
β~=argminβ∑i=1Nδi{xiTβ−log[∑j∈R(ti)Nexp(xjTβ)]}+λ(α∣∣β∣∣1+0.5(1−α)∣∣β∣∣22)\tilde{\beta}=arg min_\beta \sum\limits_{i=1}^N \delta_i \left\{x_i^T\beta-log[\sum\limits_{j \in R(t_i)}^Nexp(x_j^T\beta)] \right\}+\lambda(\alpha||\beta||_1+0.5(1-\alpha)||\beta||_2^2)β~​=argminβ​i=1∑N​δi​{xiT​β−log[j∈R(ti​)∑N​exp(xjT​β)]}+λ(α∣∣β∣∣1​+0.5(1−α)∣∣β∣∣22​)
其中,arg min 就是使后面这个式子达到最小值时的变量的取值,这里是β\betaβ的取值。超参数(hyperparameter)λ\lambdaλ定义为整个水平的正则化,而α\alphaα则定义为平衡稀疏解(α=1\alpha=1α=1,即Lasso模型)和零稀疏方法(α=0\alpha=0α=0,即Ridge模型)。超参数可以通过交叉验证的方法(cross-validation)最终确定。

基础代码

在survival package中,Surv()对象用于存储时间/事件信息,并可以使用以下函数转换为矩阵YYY。

risksets <- function(So) {n <- nrow(So)Y <- matrix(0,nrow=n, ncol=n)if (ncol(So) == 2) {endtime <- So[,1]event <- So[,2]for (i in seq(n)) {Y[i,] <- endtime[i] >= endtime}} else {starttime <- So[,1]endtime <- So[,2]event <- So[,3]for (i in seq(n)) {Y[i,] <- (endtime[i] >= endtime) & (starttime[i] < endtime)}}return(Y)
}

以下是两个不同时间过程的示例,一个是时间不变的(即开始时间始终为零),另一个是时间相关的。

So.ti <- Surv(time=c(1,2,3), event=c(0,1,1))
risksets(So.ti)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    1    1    0
## [3,]    1    1    1
So.td <- Surv(time=c(0,1,0), time2=c(1,10,8), event=c(0,1,1))
risksets(So.td)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    1
## [3,]    1    0    1

因为在~~文章~~ 中已经概述了使用近端梯度下降的细节,所以我将简要概括我们感兴趣的梯度更新目标。
Elastic-net Cox proximal update
β(k)=Sγαλ(β(k−1)+γ(k)[1NXT(δ−Pδ)−λ(1−α)β(k−1)])\beta^{(k)}=S_{\gamma \alpha \lambda}(\beta^{(k-1)}+\gamma^{(k)}[\cfrac{1}{N}X^T (\delta-P\delta)-\lambda(1-\alpha)\beta^{(k-1)}])β(k)=Sγαλ​(β(k−1)+γ(k)[N1​XT(δ−Pδ)−λ(1−α)β(k−1)])
其中γ(k)\gamma^{(k)}γ(k)是是每次迭代时的梯度步长。 下面我们概述了此更新步骤的每个组件所需的代码:
S():S():S():

softhresh <- function(x,t) { sign(x) * pmax(abs(x) - t, 0) }

P:P:P:

Pfun <- function(Y,tY,eta) {rsk <- exp(eta)haz <- as.vector( tY %*% rsk )Pmat <- outer(rsk,haz,'/') * Yreturn(Pmat)
}

δ−Pδ:\delta-P\delta :δ−Pδ:

resfun <- function(X, b, Y, tY, l, a, P, d, ll) {eta <- as.vector(X %*% b)Phat <- P(Y,tY,eta)nll <- ll(Phat, d, b, l, a)res <- d - Phat %*% dreturn(list(res=res, nll=nll))
}

−1NXT(δ−Pδ)+λ(1−α)β(k−1)-\cfrac{1}{N}X^T (\delta-P\delta)+\lambda(1-\alpha)\beta^{(k-1)}−N1​XT(δ−Pδ)+λ(1−α)β(k−1)

gradfun <- function(X, r, b, l, a) {      grad <- -t(X) %*% r / nrow(X) + l*(1-a)*breturn(grad)
}

等式(4):

proxstep <- function(b, g, s, a, l) {btilde <- b - s * gb2 <- softhresh(btilde, a*l*s)  return(b2)
}

等式(3):

llfun <- function(P,d,b,l,a) {    -mean(log(diag(P)[d==1])) + l*( a*sum(abs(b)) + (1-a)*sum(b^2)/2 )
}

(注释1)什么是独热编码(One-Hot)?
—————————————————————————————————————
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

构建具有时间依存协变量的Elastic-net Cox模型相关推荐

  1. R语言进行COX时变系数模型(含时间依存协变量的Cox回归模型)

    我们在临床研究中,经常要研究疾病与生存率的关系,cox回归是用得比较常见的模型之一.Cox 比例风险模型依赖于风险随时间变化的假设(PH假设),意思是协变量对结局的影响随着时间变化是固定的.然而现实中 ...

  2. python基于pingouin包进行统计分析:使用mediation_analysis函数构建包含协变量的mediation analysis(中介分析)模型、covar参数指定协变量

    python基于pingouin包进行统计分析:使用mediation_analysis函数构建包含协变量的mediation analysis(中介分析)模型.covar参数指定协变量.以dataf ...

  3. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线

    R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值.使用cox模型.并添加协变量.R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线 目录

  4. 有时间依存效应或时间依存风险因素的生存分析

    摘要 在传统的KM或Cox回归分析中,通常我们在研究的起始点测量一个风险因素,并分析它对之后的事件发生(例如死亡事件)的影响.但是在之后的跟踪随访过程中,事情可能在变化:在基线固定的风险因素对事件发生 ...

  5. 多变量时间序列、预训练模型和协变量

    darts官方地址 GitHub:https://github.com/unit8co/darts 文档:https://unit8co.github.io/darts/index.html 本笔记可 ...

  6. 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量

    一文详解时依协变量,兼谈分层Cox回归 医小咖 ​ 在常见的线性回归.logistic回归等这些方法中,因变量只有一个,就是结局怎么样,比如发病与否.血糖值多少等等,没有时间变量.自变量也没有时间概念 ...

  7. matlab 去除协变量,求助协变量调整

    花了一个礼拜的时间重新学习了一下协方差,回归,感觉自己的理解很多都是不对的. 协方差分析是方差分析+线性回归,但它要求很多,比如至少有两个分组(一个分组就是线性回归了),协变量要是连续变量自变量和因变 ...

  8. R语言使用lm构建线性回归模型、并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary)、模型训练(测试)集自由度计算、模型训练(测试)集残差标准误计算

    R语言使用lm构建线性回归模型.并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary).模型训练(测试)集自由度计算.模型训练(测试)集残差标准误计算(Resi ...

  9. R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型

    R语言使用survival包的Surv函数创建生存对象.建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异.使用drop1函数计算cox回归模型自变量似然比检验结果.删除冗余变量重新构建 ...

  10. 笔记 GWAS 操作流程5-2:利用GEMMA软件进行LMM+PCA+协变量

    这里,我们用正常的GWAS分析,考虑所有的协变量(数值协变量+因子协变量)+ PCA协变量,然后用混合线性模型进行分析. 1. 协变量文件 c.txt文件 1 1 0 0 -0.0169445 0.0 ...

最新文章

  1. 怎么获取html的某个元素,MSHTML怎么获取一个网页元素对象
  2. 她们,在字节跳动写代码
  3. ipython notebook使用
  4. 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导
  5. springboot使用shiro配置多个过滤器和session同步案例
  6. kubernetes(八)问题排查
  7. PRML-系列一之1.5.5~1.5.6
  8. 2017年上半年信息安全工程师考试真题含答案(下午题)
  9. OSI参考模型(1)
  10. Unreal Engine 4 手绘风滤镜(Paint Filter)即 桑原滤镜(Kuwahara Filter)教程(下)
  11. 灰色系统理论及其应用 (一) :灰色系统概论、关联分析、与传统统计方法的比较
  12. Android测试方法总结汇总
  13. 低功耗基础概念——Level Shifter cell补充
  14. java 实现 PTF远程连接带有中文下载,解决文件损失
  15. (转载)file_get_contents(php://input)
  16. 蒙特卡罗(洛)方法及其在布丰投针试验中的应用(一)
  17. html会员积分模板,人人商城会员中心头部模板显隐会员积分等项 - YangJunwei
  18. 2021福州金桥学校高考成绩查询,2021年福建高考成绩排名及成绩公布时间什么时候出来...
  19. hlgoj 1766 Cubing
  20. 【域自适应】Dual Path Learning for Domain Adaptation of Semantic Segmentation

热门文章

  1. router 路由守卫
  2. 2021全国特种设备-R1快开门式压力容器充装模拟考试题库一[安考星]
  3. 【知乎答案】2018校招,笔试应该怎么准备?|牛客网回答
  4. windows易升_直播用“易升”工具升级至Windows10 2020年5月更新
  5. EKF扩展卡尔曼滤波估算SOC/锂电池SOC估算估计/EKF估算SOC 基于二阶RC模型搭建
  6. html图片指定refere,前端解决第三方图片防盗链的办法 - html referrer 访问图片资源 403 问题...
  7. Android采用消息推送实现类似微信视频接听功能
  8. 电子基础元器件——电阻器
  9. 自然辩证法对计算机科学技术的应用,自然辩证法与计算机科学技术
  10. 平面设计师主要做什么?平面设计的工作内容有哪些?