如何用限制立方样条(RCS)做生存分析?

简介: 如何用限制立方样条(RCS)做生存分析?

一、引言

在医学和统计学领域,生存分析是一种分析个体生命长度和生存时间的重要方法。了解人们生存的期限和影响因素,对于制定健康政策、优化医疗资源的分配以及个体护理方案的制定都至关重要。传统的生存分析方法如Kaplan-Meier曲线和Cox比例风险模型已经广泛应用,但它们对数据的假设有一定的限制。

为了克服传统方法的限制,限制立方样条(Restricted Cubic Splines,简称RCS)成为一种强大而灵活的工具,可以更准确地估计个体生存函数。RCS是一种非参数的灵活拟合方法,通过将生存时间转化为各个节点上的分段函数来建模生存曲线。它可以适应各种生存时间分布,而不需要过多的假设。

本文旨在探讨RCS在生存分析中的应用和优势。首先,我们将介绍RCS的基本原理和建模方法。然后,我们将讨论RCS在生存分析中的应用案例,并与传统方法进行比较。接下来,我们将探讨RCS的局限性和可能的改进方向。最后,我们将总结本文的主要内容。

二、文献分享

❝

《Association of BMI with overall and cause-specific mortality: a population-based cohort study of 3.6 million adults in the UK》

这篇文章是2018年发表在柳叶刀上的文献,是一项基于英国的人口总体队列研究,研究了BMI(身体质量指数)与总体和特定原因的死亡率之间的关联。

❞
  • 「研究对象」:360万名成年人。
  • 「研究目的」:探究BMI对死亡率的影响,并了解不同BMI范围内的死亡原因分布。研究采用了大规模队列研究的方法,跟踪参与者的BMI和死亡情况,通过对数据进行回归分析和风险评估,来评估BMI与总体和特定原因死亡率之间的关联。
  • 「研究方法」:在这项基于人口的队列研究中,我们使用了与国家死亡登记数据相连的英国一级护理数据,数据来自临床实践研究数据联机(CPRD)。我们使用调整后的Cox回归模型,检查了BMI与全因死亡率的关联,以及BMI与广泛范围的特定死因(记录为国际疾病分类第10版[ICD-10]代码)之间的关联。我们包括所有在16岁及以上收集BMI数据并进行后续随访的个体。随访开始于以下情况中的最后一个:CPRD研究标准随访开始时间,第一个BMI记录的5周年纪念日,或1998年1月1日(死亡登记数据的起始日期);随访终止于死亡或2016年3月8日。完全调整的模型按性别分层,并根据基线年龄、吸烟、酒精使用、糖尿病、多重剥夺指数和日历期调整。模型既适用于从未吸烟者,也适用于整个研究人群。我们还进行了广泛的敏感性分析。使用Poisson模型,包括BMI、年龄和性别,估计了40岁时基线的男性和女性在不同BMI范畴下的预期寿命。
  • 「研究结果」:BMI与更具体的死亡结果之间的关联显示在非线性样条模型(这里是部分结果)从图中我们可以看到,不管是在全人群还是非吸烟人群中,BMI与all-cause, communicable, and non-communicable disease mortality之间呈U型关系,死亡率最低点的BMI大概是25Kg/m2。死亡风险均随着BMI先降低后增加。

三、RCS简介

研究数据通常来自于观察某个特定群体的个体,并收集其相关信息。这些数据可以是从临床试验、队列研究、调查问卷等途径获得的。数据的特征通常包括个体的生存时间、生存状态(例如是否死亡)、危险因素(例如年龄、性别、治疗方案等)以及其他可能影响生存的变量。

  • 「限制立方样条的原理和优势」

限制立方样条是一种非参数的拟合方法,通过将连续变量(如生存时间)转化为多个分段函数来建模生存曲线。RCS在建模过程中不对数据分布作出假设,因此适用于各种类型的生存数据。与传统方法相比,RCS具有更高的灵活性,可以更准确地拟合生存曲线的形状。通过使用适当的节点数和位置,RCS可以探测到生存风险的非线性关系,并提供更精细的生存预测。

  • 「生存时间和时间截断指示符的定义」

生存时间是指从某个初始事件(如诊断、手术等)到目标事件(如死亡、复发等)之间的时间间隔。在生存分析中,我们通常使用时间截断指示符来处理那些在观察期限结束时没有遇到目标事件的个体。即使没有遇到目标事件,我们仍然希望利用这些数据对生存曲线进行建模和估计。

四、RSC建模和结果

5.1 数据集载入

library(survival)
str(gbsg)

结果展示:

> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ...
age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)

5.2 安装和加载依赖包

install.packages("remotes")
library(remotes)
remotes::install_github("liuqiang070488/ggrcs")
library(ggrcs)
library(survival)
library(rms)
library(ggplot2)
library(scales)
library(survminer)

5.3 检验是否符合线性关系

#例如,我们检验数据集中age与风险的非线性关系
ggcoxfunctional(Surv(rfstime, status)~age+log(age)+sqrt(age),data=gbsg)

这个函数可以进行age和生存的线性关系诊断,采用的方法是鞅残差,从下图age的1次、log和1/2次方来看,可以看出年龄和死亡之间存在非线性关系。

5.4 利用RCS曲线确认自由度

确定RCS的自由度数量需要在灵活性和过拟合之间进行权衡。自由度数量越多,模型越灵活,可以更准确地拟合生存曲线的形状。然而,如果自由度数量过多,模型可能过度适应样本数据,导致过拟合。一种常用的方法是根据数据集的大小来选择自由度数量,通常建议在3到5之间进行试验,并选择具有最佳拟合度和预测能力的自由度数量。

#1.构建模型。【节点数为3.4.5均进行了构建和比较】
fit <- cph(Surv(rfstime, status) ~ rcs(age, 3), x=TRUE, y=TRUE,data=gbsg)
fit1 <- cph(Surv(rfstime, status) ~ rcs(age, 4), x=TRUE, y=TRUE,data=gbsg)
fit2 <- cph(Surv(rfstime, status) ~ rcs(age, 5), x=TRUE, y=TRUE,data=gbsg)
fit
fit1
fit2

结果展示:

> fit
Cox Proportional Hazards Model
cph(formula = Surv(rfstime, status) ~ rcs(age, 3), data = gbsg, 
    x = TRUE, y = TRUE)
                        Model Tests    Discrimination    
                                              Indexes    
Obs        686    LR chi2      6.67    R2       0.010    
Events     299    d.f.            2    R2(2,686)0.007    
Center -1.5409    Pr(> chi2) 0.0356    R2(2,299)0.016    
                  Score chi2   7.18    Dxy      0.047    
                  Pr(> chi2) 0.0275                      
     Coef    S.E.   Wald Z Pr(>|Z|)
age  -0.0343 0.0129 -2.66  0.0077  
age'  0.0374 0.0148  2.54  0.0112  
> fit1
Cox Proportional Hazards Model
cph(formula = Surv(rfstime, status) ~ rcs(age, 4), data = gbsg, 
    x = TRUE, y = TRUE)
                        Model Tests    Discrimination    
                                              Indexes    
Obs        686    LR chi2     21.69    R2       0.031    
Events     299    d.f.            3    R2(3,686)0.027    
Center -3.7621    Pr(> chi2) 0.0001    R2(3,299)0.061    
                  Score chi2  24.92    Dxy      0.135    
                  Pr(> chi2) 0.0000                      
      Coef    S.E.   Wald Z Pr(>|Z|)
age   -0.0931 0.0188 -4.96  <0.0001 
age'   0.2464 0.0550  4.48  <0.0001 
age'' -0.7802 0.1954 -3.99  <0.0001 
> fit2
Cox Proportional Hazards Model
cph(formula = Surv(rfstime, status) ~ rcs(age, 5), data = gbsg, 
    x = TRUE, y = TRUE)
                        Model Tests    Discrimination    
                                              Indexes    
Obs        686    LR chi2     23.01    R2       0.033    
Events     299    d.f.            4    R2(4,686)0.027    
Center -4.3585    Pr(> chi2) 0.0001    R2(4,299)0.062    
                  Score chi2  27.55    Dxy      0.125    
                  Pr(> chi2) 0.0000                      
       Coef    S.E.   Wald Z Pr(>|Z|)
age    -0.1103 0.0226 -4.88  <0.0001 
age'    0.3864 0.1151  3.36  0.0008  
age''  -1.5493 0.6874 -2.25  0.0242  
age'''  1.4925 1.1025  1.35  0.1758

3节点:R² = 0.016 和 Dxy = 0.047; 4节点:R² = 0.061 和 Dxy = 0.135; 5节点:R² = 0.062 和 Dxy = 0.125; R²和Dxy越大,拟合的模型越优。因此选择4节点。

5.5 模型拟合

dd<-datadist(gbsg)
options(datadist='dd')
fit <- cph(Surv(rfstime, status) ~ rcs(age, 4), x=TRUE, y=TRUE,data=gbsg)
ggrcs(data=gbsg,fit=fit,x="age",histcol="sky blue")

六、总结

如果想了解如何使用RCS进行建模非线性关系、优化治疗方案和预测疾病进展等,请关注和私信我,我们一起讨论学习。原创不易,如果觉得写的还行的话,请留下您的赞和再看,谢谢!

参考文献:

[1] Bhaskaran K, Dos-Santos-Silva I, Leon DA, Douglas IJ, Smeeth L. Association of BMI with overall and cause-specific mortality: a population-based cohort study of 3·6 million adults in the UK. Lancet Diabetes Endocrinol. 2018;6(12):944-953. doi:10.1016/S2213-8587(18)30288-2


目录
相关文章
一看就会R语言绘制限制性立方样条(Restricted cubic spline,RCS)
最近在研究怎么处理论文数据,各种分析软件都有使用,比如:SPSS、Origin、stata16、medcalc和R语言都有些研究,其中除R语言外都是收费的。不过经过一番功夫,我这边有SPSS、stata16、Origin和medcalc的破解版,有需要的可以关注我的公众号,私聊我来获取,我将给你一个百度网盘下载地址。
2211 0
|
机器学习/深度学习 数据可视化 算法
泰酷辣!探索七种常用的机器学习图型
泰酷辣!探索七种常用的机器学习图型
2166 0
|
5月前
|
人工智能 运维 JavaScript
阿里云无影云电脑部署OpenClaw与Hermes Agent +百炼Token Plan简易配置流程
随着AI智能体技术的普及,轻量化AI Agent框架结合大模型服务的使用场景愈发广泛。阿里云无影云电脑依托云端桌面形态,无需本地硬件支撑、环境隔离安全、即开即用,区别于传统ECS云服务器,操作逻辑更贴近个人电脑,对于不熟悉纯命令行运维的使用者十分友好,是部署各类应用程序与AI服务的优质载体。
771 2
|
5月前
|
安全 Linux 虚拟化
车载OS安全隔离:Hypervisor与容器技术在智能座舱中的安全实践
2025年某智能座舱Hypervisor被曝虚拟机逃逸漏洞,攻击者借娱乐App沙箱突破隔离,非法访问仪表盘内存——揭示“虚拟化隔离”并非绝对安全。本文深入剖析Type-1/Type-2 Hypervisor安全差异、三层纵深防御(Hypervisor+TEE+容器)、典型配置陷阱及落地建议,直击智能座舱隔离困境。(239字)
556 0
|
5月前
|
弹性计算 负载均衡 算法
阿里云SLB负载均衡网站流量分发规则配置完全指南
本文系统讲解了阿里云SLB负载均衡服务中网站流量分发规则的完整配置流程。从SLB产品体系(ALB、NLB、CLB)的选型策略入手,深入剖析了四层与七层监听的本质差异、加权轮询与加权最小连接数等调度算法的原理与适用场景、基于域名与URL路径的高级转发规则配置、会话保持机制的实现方式、健康检查参数的精细化调优等核心知识点。文章提供了详细的控制台操作步骤与阿里云CLI/Python SDK代码示例,涵盖从实例创建、监听配置、服务器组绑定到转发策略设置的全链路实操,并结合最佳实践帮助读者构建高可用、高性能的流量分发架构。
904 0
|
5月前
|
人工智能 自然语言处理 监控
AI输出可信度量化:从基准分数到泛化能力的评估体系构建
AI在医疗、金融、法律等关键场景部署日益广泛,但高基准准确率≠真实可靠。本文提出以泛化准确率为核心、融合语义熵、置信校准、响应一致性、偏见检测等多维指标的AI输出质量评估体系,助力构建可信赖AI。
407 0
|
9月前
|
索引 Perl
awk高级用法——内置变量、函数与进阶技巧
本文深入讲解awk进阶核心:内置变量(NR/FNR/NF/FS/OFS/FILENAME/ARGC/ARGV等)与内置函数(length/substr/index/gsub等),涵盖行字段统计、多文件处理、动态分隔符、字符串操作等高频场景,配丰富实操示例,助你从入门迈向精通。
|
人工智能 搜索推荐 小程序
全来店×蚂蚁百宝箱:智能体开启连锁餐饮智慧化服务新时代
2025外滩大会,全来店联合蚂蚁百宝箱发布餐饮AI智能体,打造“AI点餐吧”。依托百灵大模型,实现一句话点餐、个性化推荐、精准营销与连锁管控,重构智慧餐饮服务链,推动行业降本增效,开启消费新体验。
912 0
|
12月前
|
人工智能 算法 安全
所谓“十大GEO公司第一名”靠不靠谱?
AI搜索时代,GEO成流量新战场。各类“TOP1”宣传泛滥,实则多为算法漏洞投机者。企业应警惕虚假头衔,关注技术实力、方法论与案例真实性,选择真正具备研发能力的GEO服务商,构建长期数字竞争力。
|
人工智能 自然语言处理 API
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题
香港大学推出的AutoAgent框架通过自然语言交互实现零代码创建AI智能体,支持多模型接入与自动化工作流编排,在GAIA基准测试中表现优异。
2157 16
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题