Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >怎么获得Hazard Ratio?

怎么获得Hazard Ratio?

作者头像
生信喵实验柴
发布于 2021-12-15 03:20:13
发布于 2021-12-15 03:20:13
3.5K00
代码可运行
举报
文章被收录于专栏:生信喵实验柴生信喵实验柴
运行总次数:0
代码可运行

对于医学生来说,尤其是你的研究方向与肿瘤相关,那么避免不了的就是生存分析。生存分析的目的就是为了有个策略可以指示患者的生存期,以及寻找靶标继而作用于这些靶标是否可以延长患者的生存期。

学了统计的同学都知道RR(Relative Risk)是相对危险度,是指 2 个人群发病率的比值,通常为暴露人群的发病率和非暴露人群的发病率之比,计算公式就是[RR=暴露组的发病或死亡率/非暴露组的发病或死亡率]。举个经典的例子就是吸烟与肺癌的关系,比如1991年随机调查了某社区10000名居民的吸烟情况,其中3000人吸烟,7000人不吸烟,且假定吸烟的人永远不会戒烟,不吸烟的人永远不会吸烟。随访30年后,2021年吸烟人群中有300人患了肺癌,不吸烟的人群中只有70人患肺癌。因此,与非吸烟人群相比,吸烟人群发生肺癌的相对危险度RR=(300/3000)/(70/7000)=10,即可以认为吸烟人群 30 年内发生肺癌的风险是非吸烟人群的 10 倍。

HR(Hazard Ratio)指的风险比,主要用于队列研究的生存分析,由 Cox 风险比例模型衍生出来。HR 的解释与 RR 相似,即表示暴露组患病的概率为非暴露组的多少倍。区别在于 RR 只考虑结局是否发生,而 HR 还考虑了结局发生的时间,因此可以认为 HR 是考虑了时间因素的RR。

顺便再看一个大家很容易混淆的两个概念,即Kaplan-Meier 曲线(简称K-M曲线) 和Cox回归。

1.当我们需要描述生存分析数据时,我们常常使用生存曲线来展示,这个时候需要估计每个时间点位的生存率,用的就是K-M方法。因此准确来说,K-M方法是一种统计描述方法,就好比用饼状图来展示比例,用箱图来展示连续变量。K-M曲线还可以很直观地表现出两组或多组的生存率或死亡率,非常适合在文章中进行展示。但仅有描述是不够的,我们还需要进行统计推断,也就是比较。因为生存数据往往都是非正态分布,因此常使用非参数的检验方法,也就是log-rank检验,这就类似于对于非正态连续变量比较使用的方差分析。因此在实际写作中,K-M曲线都会搭配log-rank检验的P值,这样才算完整。

2.Cox回归是一种回归模型,它没有直接使用生存时间,而是使用了危险度(hazard ratio)作为因变量,该模型不用于估计生存率,而是用于因素分析,也就是找到某一个危险因素对结局事件发生的贡献度。

另外cox回归也可以考虑多因素回归,而K-M的log-rank检验只能进行单因素分析,这也是重要的一点区别。

本篇主要内容分为两部分,一是单因素cox回归,另一个是对结果可视化的森林图。

开始主线任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(survival)
library(survminer) #载入R
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load('1.Rda')
candidate <- colnames(rt)[3:10] #作为示例就选前8个基因吧,自定义更换自己喜欢的基因
rt <- rt[,c('futime','fustat',candidate)] #选中生存信息和基因列
rt[1:3,] #查看数据结构
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uniTab=data.frame() #建立空白数据框用于存结果
for(i in colnames(rt[,3:ncol(rt)])){
  cox <- coxph(Surv(futime, fustat) ~ rt[,i], data = rt)
  coxSummary = summary(cox)
  uniTab=rbind(uniTab,
               cbind(id=i,
                     HR=coxSummary$conf.int[,"exp(coef)"],
                     HR.95L=coxSummary$conf.int[,"lower .95"],
                     HR.95H=coxSummary$conf.int[,"upper .95"],
                     pvalue=coxSummary$coefficients[,"Pr(>|z|)"])
  )
} #循环计算每个基因的单因素cox
write.table(uniTab,file="uniCox.txt",sep="\t",row.names=F,quote=F) #保存结果
GetFactors_uni <- uniTab$id[which(uniTab$pvalue < 0.2)] %>% as.character() ## 选择单因素Cox结果中,P值<0.2的变量可进一步纳入多因素Cox分析(此篇文章不介绍),这里8个基因就留下了5个,当然你也可以p值设为0.05
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bioForest=function(coxFile=null,forestFile=null,forestCol=null){

  rt <- read.table(coxFile,header=T,sep="\t",row.names=1,check.names=F)
  gene <- rownames(rt)
  hr <- sprintf("%.3f",rt[        DISCUZ_CODE_3        ]quot;HR")
  hrLow  <- sprintf("%.3f",rt[        DISCUZ_CODE_3        ]quot;HR.95L")
  hrHigh <- sprintf("%.3f",rt[        DISCUZ_CODE_3        ]quot;HR.95H")
  Hazard.ratio <- paste0(hr,"(",hrLow,"-",hrHigh,")")
  pVal <- ifelse(rt$pvalue<0.001, "<0.001", sprintf("%.3f", rt$pvalue))

  pdf(file=forestFile, width = 9,height = 6.45)
  n <- nrow(rt)
  nRow <- n+1
  ylim <- c(1,nRow)
  layout(matrix(c(1,2),nc=2),width=c(3,2.5))

  xlim = c(0,3)
  par(mar=c(4,2,2,1))
  plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")
  text.cex=0.8
  text(0,n:1,gene,adj=0,cex=text.cex)
  text(1.5-0.5*0.2,n:1,pVal,adj=1,cex=text.cex);text(1.5-0.5*0.2,n+1,'pvalue',cex=text.cex,font=2,adj=1)
  text(3,n:1,Hazard.ratio,adj=1,cex=text.cex);text(3,n+1,'Hazard ratio',cex=text.cex,font=2,adj=1,)

  par(mar=c(4,1,2,1),mgp=c(2,0.5,0))
  xlim = c(0,max(as.numeric(hrLow),as.numeric(hrHigh)))
  plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="Hazard ratio")
  arrows(as.numeric(hrLow),n:1,as.numeric(hrHigh),n:1,angle=90,code=3,length=0.05,col="darkblue",lwd=3.5)
  abline(v=1,col="black",lty=2,lwd=2)
  boxcolor = ifelse(as.numeric(hr) > 1, forestCol, forestCol)
  points(as.numeric(hr), n:1, pch = 15, col = boxcolor, cex=2)
  axis(1)
  dev.off()
}#画图的函数

bioForest(coxFile="uniCox.txt",forestFile="uniForest.pdf",forestCol="red")#一步画图

下面就是展示最终结果啦,喜欢的不要忘记分享此篇推文出去哦!

pdf结果我就截图放出来大家看看吧。

代码中需要用到的输入数据:生存信息和表达(表达的数据是log2fpkm)。

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

本文分享自 生信喵实验柴 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
做COX生存分析是否需要把连续值变成高低二分组?
在进行Cox回归分析时,是否需要将连续变量转化为分类变量(如高低二分组)取决于研究目的和数据特性。Cox回归模型可以处理连续变量,但有时将连续变量转化为分类变量可以提供更明确的临床意义和更易解释的结果。
生信技能树
2025/01/07
2750
做COX生存分析是否需要把连续值变成高低二分组?
如何用GEO数据集进行批量基因的COX回归分析
STEP1:获取目标数据GSE62254的基因表达矩阵expr及预后信息survival_file
生信菜鸟团
2021/03/23
5.7K4
单因素和多因素cox回归分析
前面我们讲过一个R函数搞定风险评估散点图,热图,其中LASSO模型的输入就是单因素cox分析得到的显著与生存相关的基因。今天我们就来探讨一下如何使用R来做单因素和多因素cox回归分析。
生信交流平台
2022/09/21
3.6K0
单因素和多因素cox回归分析
受限平均生存时间(Restricted mean survival time)简析及R语言实现
前些天我的学徒写了教程:人人都可以学会生存分析(学徒数据挖掘) 吸引到了读者:武汉大学金文意,他希望可以分享一下生存分析的新玩法:
生信技能树
2020/09/29
10.3K3
受限平均生存时间(Restricted mean survival time)简析及R语言实现
RNAseq|批量单因素生存分析 + 绘制森林图
生存分析作为转录组文章中的VIP,太常见了,那么如何批量得到所有候选基因的单因素结果以及可视化结果呢?
生信补给站
2023/08/25
3.1K0
RNAseq|批量单因素生存分析 + 绘制森林图
中国癌症大数据出来了!每年126万例癌症死亡本可避免
2017年,由全国肿瘤登记中心副主任陈万青教授、美国癌症协会Farhad Islami教授牵头的生活方式和感染对中国癌症发病和死亡影响的研究,发表在Annals of Oncology上[1,2]。
IT阅读排行榜
2018/08/17
5390
中国癌症大数据出来了!每年126万例癌症死亡本可避免
复杂相关性散点图复现(ggplot2绘图的层层递进)
今天给大家复现的图来自文献《Epigenetic age acceleration of cervical squamous cell carcinoma converged to human papillomavirus 16/18 expression, immunoactivation, and favourable prognosis》
生信技能树
2025/01/07
1970
复杂相关性散点图复现(ggplot2绘图的层层递进)
批量COX回归生存分析图,指定挑选lncRNA基因,森林图,ROC曲线打包给你
(点评:其实也可以是突变与否的信息,或者其它组学信息,生存分析重点是研究分组,需要表达量,也是根据表达量高低进行分组而已)
生信技能树
2019/05/13
6.6K0
KM生存曲线经logRNA检验后也可以计算HR值
可以很明显看到,根据基因表达量把病人分成高表达组合低表达组,经过log rank 检验,可以看到两组病人的生存是有统计学显著差异的,而且我们可以看到,基因表达量越高,病人死亡风险越高,所以我们可以把这个基因在表达水平上看做是风险因子,而我们通常判断风险因子或者保护因子是根据hazard ratio来的,可以看官方教材:https://www.sciencedirect.com/topics/medicine-and-dentistry/hazard-ratio
生信技能树
2019/09/10
7.1K0
KM生存曲线经logRNA检验后也可以计算HR值
RNAseq|构建预后模型后你还需要这些图,森林图,诺莫图,校准曲线,DCA决策曲线
通过RNAseq|Lasso构建预后模型,绘制风险评分的KM 和 ROC曲线构建的预后模型KM显著,还需要验证其独立性?
生信补给站
2023/08/25
1.6K0
RNAseq|构建预后模型后你还需要这些图,森林图,诺莫图,校准曲线,DCA决策曲线
「R」一文掌握生存分析
学习生存分析预先要求对R有所了解,基本能够操作R数据框和包的使用。要是懂ggplot2和dplyr就更好了。
王诗翔呀
2020/07/03
3.5K0
「R」一文掌握生存分析
癌基因都是肿瘤的风险因子吗
同理,我们会问另外一个问题,就是癌基因都是肿瘤的风险因子吗,它高表达会导致癌症比如死的越来越快吗?反之,抑癌基因一定是肿瘤的保护因子吗,它表达量越高癌症病人越受到保护吗,因为想当然的我们会认为抑癌基因能抑制癌症嘛,所以它表达量越高越好。
生信技能树
2022/07/26
7300
癌基因都是肿瘤的风险因子吗
画出最佳分组的生存曲线
做生存分析,Best separation和Median separation,后者很简单,很想学前者,这次带来的是最佳分组的曲线代码。
生信喵实验柴
2023/09/06
3910
画出最佳分组的生存曲线
玩转 TCGA 数据库 - 生存分析(三)
生存分析:事件的结果和出现这一结果所经历的事件结合起来分析的一种方法。通常情况下,我们设定一个入组时间区间,在这个区间内搜寻患者的第一次患病时间称为起始时间,当过了这个入组时间区间,我们就不再收集患者了,当患者发生终点事件(比如死亡)时,我们记录此事件为终点时间。同时实验会设置一个实验截止时间,实验终止后患者仍未发生终点事件我们将实验截止时间记录为这个患者的终点时间,但终点事件记录为删失。
生信菜鸟团
2025/05/21
3130
玩转 TCGA 数据库 - 生存分析(三)
R|生存分析(1)
生存分析:研究各个因素与生存时间有无关系以及关联程度大小。可拓展到疾病复发时间,机器的故障时间等。 起始事件:反应研究对象开始生存过程的起始特征事件。 终点事件(死亡事件):出现研究者所关心的特定结局。如“病人因该疾病死亡”。 观察时间:从研究开始观察到研究观察结束的时间。 生存时间:观察到的存活时间,用符号t表示。 完全数据:从观察起点到死亡事件所经历的时间,生存时间是完整的。 截尾数据(删失值):观察时间不是由于终点事件而结束的,而是由于(1)失访(2)死于非研究因素(3)观察结束而对象仍存活以上三种原因结束的。常在截尾数据的右上角放一个“+”表示其实该对象可能活的更久。
生信补给站
2020/08/06
2.7K0
R|生存分析-结果整理
根据上面的生存分析的介绍可以大概的了解了生存分析的概念和原理以及KM曲线的绘制。但是生存分析中COX回归的结果不容易直接输出,本文简单的介绍一种自定义函数,批量并且规则的输出结果的方式。
生信补给站
2020/08/05
1.8K0
R语言生存分析:Cox回归
上次介绍了生存分析中的寿命表、K-M曲线、logrank检验、最佳切点的寻找等,本次主要介绍Cox回归。
医学和生信笔记
2023/02/14
1.9K1
R语言生存分析:Cox回归
TCGA癌症数据挖掘之预后模型建立和评价
表达矩阵只需要tumor数据,不要normal,将其去掉,新表达矩阵数据命名为exprSet;
生信技能树
2022/06/08
6.1K1
TCGA癌症数据挖掘之预后模型建立和评价
生存分析-黑、白、许多灰
  1.点击链接[GDC Data],选择界面右下角Legacy Archive(https://portal.gdc.cancer.gov/)
生信技能树
2019/07/05
8390
生存分析-黑、白、许多灰
R语言之生信⑦Cox比例风险模型(单因素)目录
在前一章(TCGA生存分析)中,我们描述了生存分析的基本概念以及分析和总结生存数据的方法,包括:1.危险和生存功能的定义 2.为不同患者群构建Kaplan-Meier生存曲线用于比较两条或更多条生存曲线的logrank检验
用户1359560
2018/12/18
4K0
推荐阅读
相关推荐
做COX生存分析是否需要把连续值变成高低二分组?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验