R 生存分析3:Cox等比例风险回归及等比例风险检验

虽然Kaplan-Meier分析方法目前应用很广,但是该方法存在一下局限:

  1. 对于一些连续型变量,必须分类下可以进行生存率对比

  2. 是一种单变量分析,无法同时对多组变量进行分析

  3. 是一种非参数分析方法,必须有患者个体数据才能进行分析

英国统计学家David Cox在1972年进一步拓展了Kaplan-Meier,将性别和年龄等因素包含在内,也就是Cox Proportional Hazard Model(Cox回归),该方法可以用来预测一个或多个不同变量在某一时间对死亡率的影响。它同时适用于数值变量和类别变量,可以同时评估几种风险因素对生存时间的影响,检验特定因素如何影响特定时间点特定事件(例如,感染,死亡)的发生率因此广泛应用于生物医学的统计和分析。

图片

   (Remembering Sir David Cox, 1924–2022)

值得注意的是Cox回归的是一种半参数法,其分布本身同样也不含参数假设,只是性别、年龄等影响因素对生存概率的影响是用参数来表达的。本文主要内容是对COX回归及该方法使用前提等比例风险假设进行介绍,具体包括以下内容:

  • COX回归的原理及假设

  • 如何在R语言中实现单变量COX回归

  • 如何在R语言中实现多变量COX回归

  • 绘制森林图展示多变量COX回归结果

  • 如何在R语言中对生存数据进行等比例风险检验

2.原理及假设

在生存分析文献中,预测变量(或因子)通常称为协变量,发生率被称为风险率。Cox 模型核心是由h(t)表示的危险函数,可理解为在时间 t 死亡的风险,其模型算法如下:

在上述模型中称为基线风险函数,与其他形式的回归一样存在β项乘以每个预测变量。由于基线风险表示协变量值均为 0 或处于参考水平的个体的风险,所以类似于线性回归模型中的截距。另外由于基线风险函数不依赖于任何参数,并且在估计模型参数时完全消失,因此,Cox 回归输出不包括截距。在上述模型中, β 表示风险比 (hazard ratio,HR),HR> 1的协变量被称为不良预后因素;HR<1的协变量被称为良好的预后因子。

目前风险比(HR)通常用于报告肿瘤学随机临床试验的结果。在肿瘤学随机临床试验(RCT)中,经常使用风险比(HR)来估计至事件发生时间终点的治疗效果,如总生存期(OS)和无进展生存期(PFS)。HR提供了整个研究期间试验组和对照组之间风险率比值的估计值,例如OS终点的HR = 0.75,意味着试验组的死亡风险相比对照组降低约25%。

3. COX回归R语言实现

本文依然采用上篇研究中的bladder1 数据集进行分析,采用患者复发作为关注的事件:

library(tidyverse)
library(survival)
library(survminer)
data(cancer, package="survival")
bladder1 <-bladder1 %>% mutate(recurr = if_else(status == 1, 1, 0),time = stop - start,rtumor = as.numeric(na_if(rtumor, ".")),rsize = as.numeric(na_if(rsize, "."))) %>% filter(start == 0)
  1.   单变量COX回归

使用coxph函数对干预措施进行单变量COX回归:

bladder1.cox.1 <- coxph(Surv(time, recurr) ~ treatment, data = bladder1)
summary(bladder1.cox.1)
Call:
coxph(formula = Surv(time, recurr) ~ treatment, data = bladder1)n= 118, number of events= 62 coef exp(coef) se(coef)      z
treatmentpyridoxine -0.3532    0.7024   0.3202 -1.103
treatmentthiotepa   -0.3830    0.6818   0.3025 -1.266Pr(>|z|)
treatmentpyridoxine    0.270
treatmentthiotepa      0.205exp(coef) exp(-coef) lower .95
treatmentpyridoxine    0.7024      1.424    0.3750
treatmentthiotepa      0.6818      1.467    0.3769upper .95
treatmentpyridoxine     1.316
treatmentthiotepa       1.234Concordance= 0.533  (se = 0.038 )
Likelihood ratio test= 2.05  on 2 df,   p=0.4
Wald test            = 2.07  on 2 df,   p=0.4
Score (logrank) test = 2.09  on 2 df,   p=0.4

通过HR的置信区间和P值可以看出三种干预措施对减少患者转移风险上没有统计学差异。

2. 多变量COX回归 

使用coxph函数对所有变量进行多变量COX回归

bladder1.cox.2 <- coxph(Surv(time, recurr) ~ treatment + number + size, data = bladder1)
summary(bladder1.cox.2)
Call:
coxph(formula = Surv(time, recurr) ~ treatment + number + size, data = bladder1)n= 118, number of events= 62 coef exp(coef) se(coef)      z
treatmentpyridoxine -0.34130   0.71085  0.32227 -1.059
treatmentthiotepa   -0.55105   0.57634  0.31257 -1.763
number               0.25249   1.28723  0.06498  3.886
size                 0.05892   1.06069  0.07414  0.795Pr(>|z|)    
treatmentpyridoxine 0.289585    
treatmentthiotepa   0.077904 .  
number              0.000102 ***
size                0.426761    
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1exp(coef) exp(-coef) lower .95
treatmentpyridoxine    0.7108     1.4068    0.3780
treatmentthiotepa      0.5763     1.7351    0.3123
number                 1.2872     0.7769    1.1333
size                   1.0607     0.9428    0.9172upper .95
treatmentpyridoxine     1.337
treatmentthiotepa       1.064
number                  1.462
size                    1.227Concordance= 0.642  (se = 0.038 )
Likelihood ratio test= 14.94  on 4 df,   p=0.005
Wald test            = 16.55  on 4 df,   p=0.002
Score (logrank) test = 17.75  on 4 df,   p=0.001

多变量COX回归结果显示,初始肿瘤数量增加了风险,因此预后更差。

3. 森林图(forest plot)绘制

使用ggforest函数对回归结果进行森林图绘制

ggforest(bladder1.cox.2, data = bladder1)

图片

4. 等比例风险检验R语言实现

等比例风险(PH):在任意一个时间点,两组人群发生时间的风险比例是恒定的;或者说其危险曲线应该是成比例而且是不能交叉的;也就是如果一个体在某个时间点的死亡风险是另外一个体的两倍,那么在其他任意时间点的死亡风险也同样是2倍 ,但是有时在研究过程中会遇到延迟反应、假性进展,从而导致生存曲线(如PFS)早期就纠缠在一起,几个月后才分开,这时Cox模型的假设就不成立了。

在进行COX回归前,通常需要进行以下三种检验:

  • 使用Schoenfeld residuals 检查等比例风险(proportional hazards)

  • 使用Deviance residual 检查异常值(outliers);

  • 使用Martingale residual检查风险与协变量之间的非线性关系( non-linearity)

  1. 使用Schoenfeld residuals进行等比例风险检验

test.ph.2 <- cox.zph(bladder1.cox.2)
print(test.ph.2)
           chisq df    p
treatment 1.0940  2 0.58
number    0.0865  1 0.77
size      1.1794  1 0.28
GLOBAL    2.4600  4 0.65

从上述输出来看,对每个协变量的检验都没有统计学意义,而全局检验也没有统计学差异,因此,我们可以假设成比例的风险。同时可以使用ggcoxzph函数绘制各变量scaled Schoenfeld residuals残差图。

ggcoxzph(test.ph.2)

图片

如果图片中的红点系统偏离水平线则表明存在非等比例风险,而等比例风险假设估计值不会随时间变化很大。

2.使用deviance残差图检测是否有异常值 

可通过ggcoxdiagnostics函数展示deviance residuals或者dfbeta values图形来检查异常值。其中type指y轴展示的误差项,c(“martingale”, “deviance”, “score”, “schoenfeld”, “dfbeta”, “dfbetas”, “scaledsch”, “partial”)

ggcoxdiagnostics(bladder1.cox.2,type = "dfbeta"
)

图片

上述图片展示了删除每个观察结果后回归系数的估计变化,上面的图片表明,没有一个观察结果本身有特别的影响。

3.使用Martingale residual检测非线性关系

通过绘制Martingale残差与协变量的散点图来检验非线性。

ggcoxfunctional(Surv(time, recurr) ~  number + log(number) + sqrt(number), 
data = bladder1)

图片

上述图片显示了连续协变量与cox比例风险模型的残差的关系,上图表示初始肿瘤数量有轻微的非线性。

5. 优点和局限

相较于K-M分析,COX回归方法存在以下优点:首先,HR囊括了整个KM生存曲线中的所有信息,因此总结了RCT整个持续时间内的治疗效果。相比之下,中位生存期仅关注治疗组生存曲线上的一个点,最多代表“组平均年龄”,作为个体患者疾病控制持续时间或OS的指标过于简单。其次,HR提供了治疗组之间相对疗效的估计值(例如,OS终点的HR = 0.75,意味着试验组的死亡风险相比对照组降低约25%)。

但是该方法运用的前提是等比例风险(PH)假设:研究期间每个时间间隔的风险率比值近似恒定。因而如果生存数据严重违反等比例风险假设,则该方法的结果便难以解释,此时需要采用其他方法进行分析(后续文章更新):

  1. 分层COX回归(stratified cox regression)

  2. 使用时间依从性变量( time-varying dependent variable)拓展COX回归

  3. 参数生存分析(parametric survival analysis)

  4. 限制平均生存时间(Restricted mean survival time)。。。

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

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

相关文章

Java冒泡排序详细讲解

冒泡排序是一种简单但效率较低的排序算法&#xff0c;它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。具体实现如下&#xff1a; 算法步骤&#xff1a; 比较相邻的元素&#xff1a;从第一个元素开始&#xff0c;依次…

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器是一种高级别的模拟设备&#xff0c;用于模拟太阳光的光谱、强度及照射角度&#xff0c;应用于太阳能电池板、光伏系统等领域的研究和测试。其参数包括光谱范围、光强度、光源、照射角度、均匀性和稳定性&#xff0c;可根据需求调整…

ubuntu20.04安装截图工具flameshot

ubuntu20.04 自带的截图工具&#xff0c;可以使用快捷键“shift printScreen” ,但是它不能对截图进行编辑。 现在安装截图工具 flameshot&#xff0c;使用以下命令&#xff1a; sudo apt install flameshot 安装完成后&#xff0c;使用以下命令打开&#xff1a; flamesho…

Linux应用实战之网络服务器(一) HTTP协议介绍

0、前言 准备做一个Linux网络服务器应用实战&#xff0c;通过网页和运行在Linux下的服务器程序通信&#xff0c;这是第一篇&#xff0c;先简单介绍一下HTTP协议。 1、概述 1.1 定义 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本数据的应用…

MySQL 命令 alter table 修改字段

新增字段 项目开发过程中以及项目迭代后&#xff0c;都会涉及到需要新增字段的场景。大多数人应该是使用数据库管理工具&#xff08;如&#xff1a;Navicat&#xff09;操作的&#xff0c;但是使用新增字段的命令进行操作也理应会使用&#xff0c;在特定场景下只能使用命令新增…

java分布式面试快问快答

目录 Java分布式面试宝典50题DubboRedisZookeeper分布式系统设计性能优化与监控安全实践经验 解答DubboRedisZookeeper分布式系统性能优化与监控安全 Java分布式面试宝典50题 Java分布式开发涉及到Dubbo、Redis、Zookeeper等技术&#xff0c;这些技术在实际工作中扮演着重要角…

Go 语言基础语法

目录 行分隔符 注释 标识符 字符串连接 关键字 Go 语言的空格 格式化字符串 Printf 实例 Go 语言变量 变量声明 多变量声明 值类型和引用类型 简短形式&#xff0c;使用 : 赋值操作符 Go 程序可以由多个标记组成&#xff0c;可以是关键字&#xff0c;标识符&#…

C++ 之LeetCode刷题记录(四十)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 27. 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值…

文献速递:文献速递:基于SAM的医学图像分割--SAM-Med3D

Title 题目 SAM-Med3D 01 文献速递介绍 医学图像分析已成为现代医疗保健不可或缺的基石&#xff0c;辅助诊断、治疗计划和进一步的医学研究]。在这一领域中最重要的挑战之一是精确分割体积医学图像。尽管众多方法在一系列目标上展现了值得称赞的有效性&#xff0c;但现有的…

jmeter二次开发发送java请求_保姆级教程!!!

一、引言 JMeter是Apache基金会开发的一款开源性能测试工具&#xff0c;广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试&#xff0c;以评估应用程序的性能和稳定性。然而&#xff0c;在实际使用过程中&#xff0c;用户可能会遇到需要发送Java请…

RHCE实验-建立NFS服务器,使的客户端顺序共享数据

第一步&#xff1a;服务端及客户端的准备工作 # 恢复快照[rootserver ~]# setenforce 0​[rootserver ~]# systemctl stop firewalld​[rootserver ~]# yum install nfs-utils -y # 服务端及客户端都安装 第二步&#xff1a;服务端建立共享文件目录&#xff0c;并设置权限…

Vue3 新项目默认工程文件理解

Vue3 新项目默认工程文件理解 文章目录 Vue3 新项目默认工程文件理解0、工程文件结构图1、main.ts2、index.html源文件编译后 3、App.vue4、.d.ts 文件作用 0、工程文件结构图 1、main.ts // 引入 createApp 函数 import { createApp } from vue // 引入 style.css 文件&#…

【QT+QGIS跨平台编译】之九十五:【QGIS_App跨平台编译】—【错误处理:找不到标识符QwtPolarPoint】

文章目录 一、找不到标识符QwtPolarPoint二、原因分析三、错误处理一、找不到标识符QwtPolarPoint 报错信息如下: 二、原因分析 未找到QWT_POLAR_VERSION 从而执行的函数: mypMarker->setPosition( QwtPolarPoint( currentInfo.azimuth, currentInfo.elevation )

DevSecOps平台架构系列-微软云Azure DevSecOps平台架构

目录 一、概述 二、Azure DevOps和黄金管道 2.1 概述 2.2 Azure DevOps架构说明 2.2.1 架构及管道流程图 2.2.2 架构内容 2.2.2.1 Azure Boards 2.2.2.2 Azure Repos 2.2.2.3 Azure Test Plans 2.2.2.4 Azure Pipelines 2.2.2.5 Azure Application Insights 2.2.2.6…

特征提取技术实例

以下是一些简单的特征提取算法的Python代码示例&#xff1a; 1. 边缘检测&#xff08;Sobel算子&#xff09; import cv2 import numpy as np # 读取图像 image cv2.imread(image.jpg, cv2.IMREAD_GRAYSCALE) # 使用Sobel算子进行边缘检测 sobel_x cv2.Sobel(image, cv2.CV…

浏览器https受信任证书生成——openssl颁发受信任证书

站点常常由于没有受信任的第三方CA机构颁发证书,使用https访问时,浏览器常常会弹出不安全的提示,为解决该问题,可以使用openssl颁发个人证书来解决该问题。 1openssl安装及使用方式参考:32.9 x509_OpenSSL 中文手册https://www.openssl.net.cn/docs/230.html2.本文章所有生…

java打家劫舍2(力扣Leetcode213)

打家劫舍2 力扣原题链接 问题描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈&#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&a…

相机显示储存卡未格式化怎么回事?怎么办

在摄影的学习和实践中&#xff0c;相机是我们记录美好瞬间的得力助手。然而&#xff0c;当相机突然提示储存卡未格式化时&#xff0c;这往往会让我们感到困惑和焦虑。本文将探讨相机显示储存卡未格式化的可能原因&#xff0c;并提供相应的解决方案。 图片来源于网络&#xff0c…

web自动化测试系列-selenium的运行原理和常用方法介绍(二)

目录 1.selenium的运行原理 2.常用方法介绍 接上文 &#xff1a;web自动化测试系列-selenium的安装和运行(一)-CSDN博客 在上文中我们编写了一段简单的代码 &#xff0c;可以驱动浏览器访问百度并搜索关键字 。这里我们再把这段代码再拿来加以说明 。 # 1. 导包 from selen…

搭建Spark单机版环境

在搭建Spark单机版环境的实战中&#xff0c;首先确保已经安装并配置好了JDK。然后&#xff0c;从群共享下载Spark安装包&#xff0c;并将其上传至目标主机的/opt目录。接着&#xff0c;解压Spark安装包至/usr/local目录&#xff0c;并配置Spark的环境变量&#xff0c;以确保系统…