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

news2024/11/14 16:03:44

一、引言

在医学和统计学领域,生存分析是一种分析个体生命长度和生存时间的重要方法。了解人们生存的期限和影响因素,对于制定健康政策、优化医疗资源的分配以及个体护理方案的制定都至关重要。传统的生存分析方法如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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/838985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XXL-JOB定时任务框架(Oracle定制版)

特点 xxl-job是一个轻量级、易扩展的分布式任务调度平台&#xff0c;能够快速开发和简单学习。开放源代码并被多家公司线上产品使用&#xff0c;开箱即用。尽管其确实非常好用&#xff0c;但我在工作中使用的是Oracle数据库&#xff0c;因为xxl-job是针对MySQL设计的&#xff…

北邮22信通:第五章 图 最短路径 Dijkstra算法

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏&#xff1a; 北邮22信通_青山如墨雨如画的博客-CSDN博客 一. 算法核心思想 Dijkstra算法是用来求取图中两个结点之间最短路径的算…

mysql大表的深度分页慢sql案例(跳页分页)

1 背景 有一张表&#xff0c;内容是 redis缓存中的key信息&#xff0c;数据量约1000万级&#xff0c; expiry列上有一个普通B树索引。 -- test.top definitionCREATE TABLE top (database int(11) DEFAULT NULL,type varchar(50) DEFAULT NULL,key varchar(500) DEFAULT NUL…

java+ssm校园高校足球联赛管理系统tdl2g

随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c;大量基于网络的广泛应用给生活带来了十分的便利。所以把足球联赛管理与现在网络相结合&#xff0c;利用计算机搭建足球联赛管理系统&#xff0c;实现足球联赛管理系统的信息化。则对于进一步…

直线导轨在视觉检测设备中的应用

随着科技的不断发展&#xff0c;视觉检测设备已经逐渐代替了传统的人工品检&#xff0c;成为了工业生产中的一部分&#xff0c;在五金配件、塑胶件、橡胶件、电子配件等检测工业零部件表面外观缺陷尺寸方面应用&#xff0c;视觉检测设备具有优势。 直线导轨作为视觉检测设备中重…

EVE-NG MPLS L2VPN static lsp

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 和路由协议 2.2 配置MPLS LDP 2.3 配置L2VPN PW 2.4 验证L2VPN 1 拓扑 2 配置步骤 2.1 配置接口IP 和路由协议 PE1 interface LoopBack 0ip address 1.1.1.9 32 quitinterface GigabitEthernet1/0ip address 10.1.1.1 255.255…

【数理知识】求刚体旋转矩阵和平移矩阵,已知 N>=3 个点在前后时刻的坐标,且这 N>=3 点间距离始终不变代表一个刚体

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

【深度学习_TensorFlow】感知机、全连接层、神经网络

写在前面 感知机、全连接层、神经网络是什么意思&#xff1f; 感知机&#xff1a; 是最简单的神经网络结构&#xff0c;可以对线性可分的数据进行分类。 全连接层&#xff1a; 是神经网络中的一种层结构&#xff0c;每个神经元与上一层的所有神经元相连接,实现全连接。 神经…

kibana-7.17.3版本安装及汉化

1、官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 选择安装系统类型和历史版本kibana安装版本要和es版本对应 2、上传安装包然后解压 tar -zxf kibana-7.17.3-linux-x86_64.tar.gz 3、更改目录属主 chown elk. kibana-7.17.3-linux-x86_64 -R …

C语言笔试训练【第三天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试训练的第三天&#xff0c;大家加油&#xff01; 第一题 1、已知函数的原型是&#xff1a; int fun(char b[10], int *a) &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xf…

基于Mediapipe的姿势识别并同步到Unity人体模型中

如题&#xff0c;由于是商业项目&#xff0c;无法公开源码&#xff0c;这里主要说一下实现此功能的思路。 人体关节点识别 基于Mediapipe Unity插件进行开发&#xff0c;性能比较低的CPU主机&#xff0c;无法流畅地运行Mediapipe&#xff0c;这个要注意一下。 Mediapipe33个人体…

STM32F103——基础篇

目录 1、寄存器基础知识 2、STM32F103系统架构 2.1 Cortex M3 内核&芯片 2.2 STM32F103系统架构 3、存储器映射 4、寄存器映射 4.1 寄存器描述解读 4.2 寄存器映射举例 4.3 寄存器地址计算 4.4 stm32f103xe.h 寄存器映射 1、寄存器基础知识 概念&#xff1a;寄存…

【C语言进阶】指针的高级应用(上)

本专栏介绍&#xff1a;免费专栏&#xff0c;并且会持续更新C语言基础知识&#xff0c;欢迎各位订阅关注。 关注我&#xff0c;带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章&#xff0c;坚持更新&#xff01; 大家的支持才是更新的最强动力&#xff01; 文章目录…

详解PHP反射API

PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似&#xff0c;比如get_class_vars()&#xff0c;但是更加灵活&#xff0c;而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作&…

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…

探秘企业DevOps一体化平台建设终极形态丨IDCF

笔者从事为企业提供研发效能改进解决方案相关工作十几年&#xff0c;为国内上百家企业提供过DevOps咨询及解决方案落地解决方案&#xff0c;涉及行业包括&#xff1a;金融、通信、制造、互联网、快销等多种行业。 DevOps的核心是研发效能改进&#xff0c;效能的提升离不开强大…

Linux基本开发工具(一)

文章目录 Linux基本开发工具&#xff08;一&#xff09;Linux安装和卸载软件Linux 软件包管理器 yum关于sudo命令关于yum源的换源问题 vim编辑器的使用vim三种模式&#xff08;常见&#xff09;vim的基本操作vim配置 Linux基本开发工具&#xff08;一&#xff09; Linux安装和…

Dubbo中使用netty

技术主题 netty在Dubbo中的使用,主要集中在网络通信上, 技术原理 Dubbo是什么 高性能、轻量级的开源java的RPC框架,提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 Dubbo的传输结构 1、魔数标识符(四个字节),用于区分不同…

机器人开发--兴颂雷达介绍

机器人开发--兴颂雷达介绍 1 介绍2 使用手册参考 1 介绍 佛山市兴颂机器人科技有限公司&#xff08;Hinson&#xff09;是一家集研发、设计、生产、销售机器人(AGV)导航核心零部件、并提供整体运动控制方案的自主创新型国家高新技术企业。 2 使用手册 兴颂激光雷达使…

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…