前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >受限平均生存时间(Restricted mean survival time)简析及R语言实现

受限平均生存时间(Restricted mean survival time)简析及R语言实现

作者头像
生信技能树
发布于 2020-09-29 15:33:26
发布于 2020-09-29 15:33:26
10.2K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

前些天我的学徒写了教程:人人都可以学会生存分析(学徒数据挖掘) 吸引到了读者:武汉大学金文意,他希望可以分享一下生存分析的新玩法:

受限平均生存时间

大家好,我是武汉大学金文意。很荣幸受曾老师邀请,与大家简短地分享一下我对受限平均生存时间的一点薄见。水平有限,有不足之处敬请指正!

背景

在诸如JAMA oncology等顶级期刊中,我们经常会看到如图1所示的Restricted mean survival time(RMS time),即受限平均生存时间1。基于RMS time的组间评价方法既往多见于前瞻性的临床对照实验中,但是近年来,RMS time在预后模型(prognostic signature)领域亦逐渐开始普及

单从与生物信息学息息相关的prognostic signature领域来说,假如你构建了一个prognostic signature,该signature可将患者分成不同风险组(例如高、中、低风险)。传统的做法是直接绘制K-M生存曲线并log-rank计算组间差异,如果p-value小于0.05即可判断组间的生存率有显著差异。

但是,仅仅这样就足够了吗?log-rank test比较的是存在删失的情况下组间的生存时间分布2。对于更精确的医学研究,我们更想知道的是,截止至某一年的时间点,组间的生存差异。这个时候,就要引出我们的RMS time了。

图1

定义

RMS time, 其描述的是纳入研究的患者在随访t时间段内的平均生存时间,可以估计为生存曲线下直至预定时间点的面积,因此可以考虑该时间范围之前的所有生存信息3。这恰恰是其相对于传统生存分析的优势所在。

R语言实现

survRM2 package常用来计算RMS time,方便起见,使用包中的示例数据进行展示。

require(survRM2)

data =rmst2.sample.data() #input data

我们看一下数据结构我们只需要三列数据(生存时间、生存状态、及你的依据处理因素/风险因素的分组arm)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
head(data[,1:3])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##        time status arm
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 1  1.095140      1   1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 2 12.320329      0   1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 3  2.770705      1   1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 4  5.270363      1   1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 5  4.117728      0   0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 6  6.852841      1   0

简单调用函数进行计算,依序输入,其中,tau指的是你所设置的时间点。函数的其他参数的具体说明可自行查看R中该包的说明手册。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RMS <- rmst2(data$time, data$status, data$arm, tau=10)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(RMS)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## The truncation time: tau = 10  was specified.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                                           
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Restricted Mean Survival Time (RMST) by arm
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##               Est.    se lower .95 upper .95
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMST (arm=1) 7.146 0.283     6.592     7.701
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMST (arm=0) 7.283 0.295     6.704     7.863
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Restricted Mean Time Lost (RMTL) by arm
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##               Est.    se lower .95 upper .95
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMTL (arm=1) 2.854 0.283     2.299     3.408
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMTL (arm=0) 2.717 0.295     2.137     3.296
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Between-group contrast
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##                        Est. lower .95 upper .95     p
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMST (arm=1)-(arm=0) -0.137    -0.939     0.665 0.738
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMST (arm=1)/(arm=0)  0.981     0.878     1.096 0.738
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## RMTL (arm=1)/(arm=0)  1.050     0.787     1.402 0.738
代码语言:javascript
代码运行次数:0
运行
复制

可以看到给出的信息非常详细并给出了组间的显著性指标,一般来说,文章中只需要给出RMS time即可。

可视化的话,可以直接使用plot函数,也可依据你的个人需求编制函数进行定制,将其组合成一幅图等。我们简单的plot一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot(RMS, xlab="Years", ylab="Probability")

其中,红色部分表示RMS time,黄色部分表示RMSL(Restricted Mean Time Lost)。

总体来说,RMS time的分析过程较为简单。然而,RMS time这项指标,如同时间依赖的ROC曲线一样,恰恰是佐证你研究的一剂强心剂。

参考文献

1. Li B, Cui Y, Diehn M, Li R. Development and Validation of an Individualized Immune Prognostic Signature in Early-Stage Nonsquamous Non-Small Cell Lung Cancer. JAMA Oncol. 2017;3(11):1529-1537. doi:10.1001/jamaoncol.2017.1609

2. http://www.lifescienceglobal.com/pms/index.php/ijsmr/article/view/674

3. Wang Z, Wu H, Xie L, et al. Correlation of Milestone Restricted Mean Survival Time Ratio With Overall Survival Hazard Ratio in Randomized Clinical Trials of Immune Checkpoint Inhibitors: A Systematic Review and Meta-analysis. JAMA Netw Open. 2019;2(5):e193433. doi:10.1001/jamanetworkopen.2019.3433

写在文末

如果你确实想把生存分析学会,学好,我在生信技能树多次分享过生存分析的细节也值得你认真读完;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
如何利用termination GracePeriodSeconds 优雅地关闭你的服务
当涉及到分布式系统,处理故障是关键。Kubernetes通过利用可以监视系统状态并重新启动已停止执行的服务的控制器(controllers)来解决这个问题。另一方面,Kubernetes通常可以强制终止您的应用程序,作为系统正常运行的一部分。
kubernetes中文社区
2019/08/15
17.6K0
K8s Pod优雅关闭,没你想象的那么简单!
更新部署服务时,旧的 Pod 会终止,新 Pod 上位。如果在这个部署过程中老 Pod 有一个很长的操作,我们想在这个操作成功完成后杀死这个 pod(优雅关闭),如果无法做到的话,被杀死的 pod 可能会丢失一定的流量,或者外界无法感知到该 Pod 被杀死。特别是,如果我们有一个接收大量流量的 API,错误率在部署过程中会显著增加。
用户5166556
2023/03/18
2.7K0
K8s Pod优雅关闭,没你想象的那么简单!
Kubernetes 如何优雅的重启Pod
在应用程序的整个生命周期中,正在运行的 pod 会由于多种原因而终止。在某些情况下,Kubernetes 会因用户输入(例如更新或删除 Deployment 时)而终止 pod。在其他情况下,Kubernetes 需要释放给定节点上的资源时会终止 pod。无论哪种情况,Kubernetes 都允许在 pod 中运行的容器在可配置的时间内正常关闭。
kubernetes中文社区
2022/10/27
4.5K0
Kubernetes 终止信号:确保应用程序正常关闭
在容器编排领域,Kubernetes 已成为领先的平台,可实现容器化应用程序的高效管理、扩展和部署。当应用程序在容器内运行时,正确终止这些容器对于维持系统的整体健康和可靠性至关重要。在本文中,我们将深入研究 Kubernetes 终止信号的概念,并了解它们如何确保应用程序正常关闭,避免数据丢失或用户体验中断。
DevOps云学堂
2023/09/11
7290
Kubernetes 终止信号:确保应用程序正常关闭
[译] 容器和 Kubernetes 中的退出码完整指南
当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本原因。
CS实验室
2022/08/01
6.1K0
[译] 容器和 Kubernetes 中的退出码完整指南
k8s容器的钩子与优雅停机
在 Kubernetes 中,每次微服务的代码发布都意味着创建新版本的 pod 并删除旧 pod,如果部署不够优雅的话,可能出现如下两个问题:
SRE运维手记
2024/09/25
2950
k8s容器的钩子与优雅停机
如何优雅地关闭Kubernetes集群中的Pod
这是我们实现 Kubernetes 集群零停机时间更新的第二部分。在本系列的第一部分中,我们列举出了简单粗暴地使用kubectl drain 命令清除集群节点上的 Pod 的问题和挑战。在这篇文章中,我们将介绍解决这些问题和挑战的手段之一:优雅地关闭 Pod。
KevinYan
2021/03/16
3.2K0
Kubernetes 中容器的退出状态码参考指南
当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本原因。
公众号: 云原生生态圈
2024/01/23
5730
Kubernetes 中容器的退出状态码参考指南
优雅地终止:Graceful Shutdown指南
您是否曾经因沮丧而拔掉电脑的电源线?虽然这似乎是一个快速解决方案,但它会导致数据丢失和系统不稳定。在软件世界中,存在类似的概念:硬关闭。这种突然的终止会导致与物理对应物相同的问题。值得庆幸的是,有一种更好的方法:优雅关闭。
云云众生s
2024/07/18
1970
优雅地终止:Graceful Shutdown指南
K8s中优雅停机和零宕机部署
创建、删除 Pod 是 K8s 中最常见的任务之一。本文介绍了 Pod 在响应创建、删除请求时发生的内部流程,还讨论了如何在 Pod 启动或关闭时防止断开连接,以及如何正常关闭长时间运行的任务。
CNCF
2020/08/20
4K0
K8s中优雅停机和零宕机部署
容器化后无损上下线解决方案
绝大数事故发生在应用上下线发布阶段,所以要尽可能避免发布过程中由于应用自身代码问题对用户造成的影响。
SRE运维进阶之路
2023/11/21
5240
容器化后无损上下线解决方案
闲聊k8s的优雅关闭连接
当数据在进行交互的时候,如果连接发生了改变,就必然会涉及到是否是无损关闭连接,主要就是看结束连接的时候是否是四次挥手关闭,短连接其实还好,最关键的是长连接如何关闭。
SRE运维实践
2024/12/09
1730
闲聊k8s的优雅关闭连接
PHP 容器化引发线上 502 错误状态码的修复
笔者所在公司技术栈为 Golang + PHP,目前部分项目已经逐步转 Go 语言重构,部分 PHP 业务短时间无法用 Go 重写。
仁扬
2023/08/01
3900
kubernetes 最佳实践: 优雅终止
Pod 销毁时,会停止容器内的进程,通常在停止的过程中我们需要执行一些善后逻辑,比如等待存量请求处理完以避免连接中断,或通知相关依赖进行清理等,从而实现优雅终止目的。本文介绍在 Kubernetes 场景下,实现容器优雅终止的最佳实践。
imroc
2021/06/04
3.5K0
Kubernetes Pod优雅停机分析
业务容器化上云之后,时常会有版本的动态变更,如何无损升级越发重要。结合底层技术原理,本文将对Pod优雅停机展开分析,供业务团队参考。
白鹏飞
2023/06/14
9190
Kubernetes 运维遇到的问题记录(4)
Kubernetes 集群网络有很多种实现,有很大一部分都用到了 Linux 网桥:每个 Pod 的网卡都是 veth 设备,veth pair 的另一端连上宿主机上的网桥。由于网桥是虚拟的二层设备,同节点的 Pod 之间通信直接走二层转发,跨节点通信才会经过宿主机 eth0。
后端云
2023/02/10
1K0
Kubernetes 运维遇到的问题记录(4)
K8S 滚动更新如何优雅停止 Pod
优雅停止(Graceful shutdown) 这个说法来自于操作系统,我们执行关机之后都得 OS 先完成一些清理操作,而与之相对的就是硬中止(Hard shutdown),比如拔电源。
YP小站
2020/06/04
6K0
K8S 滚动更新如何优雅停止 Pod
如何在容器中执行多条指令并能优雅退出
本文主要围绕k8s command展开讨论。(deployment.spec.template.spec.containers[n].command) 主要聊聊平台在接入用户业务时,如何保证满足业务基本需求情况下增强平台易用性。
你算哪块香橙夹心饼干
2021/08/04
4.5K0
如何在容器中执行多条指令并能优雅退出
Kubernetes运维之容器编排高级Pod编写
创建 Pod 时,可以为其下的容器设置环境变量。通过配置文件的 env 或者 envFrom 字段来设置环境变量。
王先森sec
2023/04/24
6880
kubernetes集群之Pod说能不能让我体面的消亡呀?
由于 Pod 所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地终止。
囧么肥事
2022/03/14
6780
kubernetes集群之Pod说能不能让我体面的消亡呀?
推荐阅读
相关推荐
如何利用termination GracePeriodSeconds 优雅地关闭你的服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档