生存分析入门和R分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生存分析入门和R分析相关的知识,希望对你有一定的参考价值。

参考技术A

生存分析主要是使用一系列统计方法调查事件发生时间的研究。

## 生存分析应用于各种领域,如:

## 在癌症研究中,典型的研究问题是:

## 生存分析主要方法

## 基本的概念

## 疾病中不同类型事件

需要关注的点在于,1)死亡的时间;2)无复发生存时间,对应于对治疗到疾病复发之间的时间。

截尾

生存分析研究的是事件发生(复发或死亡)之前的预期时间。然而,在研究中,由于各种原因无法收集到事件发生的完整信息,从而产生截尾数据。

## 截尾事件也分为了不同的情况:

## 生存函数和风险函数

Kaplan-Meier方法是一种用于从收集的生存时间估计生存概率的非参数方法 (Kaplan and Meier, 1958)。

时间 的生存概率 的计算公式如下:

估计的概率(S(t))是一个阶跃函数,它只在每个事件的发生的时刻才会改变。生存概率的置信区间也是可以计算的。

KM生存曲线(KM生存概率随时间变化的曲线)提供了有用的数据总结,可用于估计中位生存时间等指标。

KM生存曲线(KM生存概率随时间变化的曲线)提供了有用的数据总结,可用于估计中位生存时间等。

## R 包准备

常用的两个R包

## 安装R包

## 示例数据集

survival 包内置的 lung数据

## 计算生存曲线:survfit()

可以使用 survival 包中的 survfit () 计算kaplan-Meier生存估计, survfit () 需要的参数:

## 使用summary()对模型进行统计,查看详细信息

## survfit()返回结果的解读

## 数据整理

或者使用 survminer 包中的surv_summary()函数汇总数据生成一个数据框

获取生存曲线的信息,包括具有置信区间的生存中值,以及每个曲线中的受试者总数和事件数。

## 可视化生存曲线

更多参数设置自定义生存曲线图

## Kaplan-Meier图的解读

横轴(x轴)表示以天为单位的时间,纵轴(y轴)表示生存的概率或生存人口的比例。途中曲线代表两组病人的生存曲线。曲线的垂直下降表示事件。曲线上的垂直刻度表示这个病人在这个时候被审查了。

每个组的中位生存时间

age=1(男性组)的中位生存时间为270天,而age=2(女性组)的中位生存时间为426天。与男性相比,女性肺癌患者的生存率似乎有优势。然而,为了评估这种差异是否具有统计学意义,需要进行正式的统计检验,还需要进一步进行分析。

## 生存曲线可以设置显示范围:

## 事件累计发生曲线图:

累积危险是估计危险概率的常用方法,被定义为H(t)=−log(survival function)=−log(S(t))。累积危害(H(t))可以解释为死亡率的累积度。换句话说,如果事件是一个可重复的过程,它对应于每个个体在时间t时之前事件发生的数量。

## 累计风险概率(cumulative hazard)图

## 比较生存曲线的Log-Rank检验:survdiff()

对数秩检验(log-rank test)是比较两个或多个生存曲线的最广泛使用的方法。零假设是两组生存曲线之间的存活率没有差异。对数秩检验是一种非参数检验,它对生存分布没有任何假设。从本质上说,对数秩检验将观察到的每组事件的数量与零假设成立(即生存曲线是一致的)所期望的数量进行比较。对数秩检验统计量分布与卡方检验统近似。

survival包的 survdiff ()函数可以对两组生存曲线进行对数秩检验。

## 拟合复杂生存曲线

### 使用多个因素的组合来计算生存曲线。

生存分析主要是使用一系列统计方法调查事件发生时间的研究。

生存数据一般用两个相关函数来描述和建模:

系列文章

R|生存分析 - KM曲线 ,值得拥有姓名和颜值

 

本文首发于“生信补给站”:https://mp.weixin.qq.com/s/lpkWwrLNtkLH8QA75X5STw

 

生存分析作为分析疾病/癌症预后的出镜频率超高的分析手段,而其结果展示的KM曲线也必须拥有姓名和颜值

生存分析相关推文:

生存分析和KM曲线:R|生存分析(1)

分析结果一键输出:R|生存分析-结果整理

时间依赖生存分析:R|timeROC-分析

 

一 数据和R包

为方便,使用内置lung数据集

#载入所需的R包
library("survival")
library("survminer")
#载入并查看数据集
data("lung")
head(lung)
 inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1    3  306      2  74   1       1       90       100     1175      NA
2    3  455      2  68   1       0       90        90     1225      15
3    3 1010      1  56   1       0       90        90       NA      15
4    5  210      2  57   1       1       90        60     1150      11
5    1  883      2  60   1       0      100        90       NA       0
6   12 1022      1  74   1       1       50        80      513       0

 

二 原生KM曲线

#构建模型
fit <- survfit(Surv(time, status) ~ sex, data=lung)
?

#绘制原生KM曲线

plot(fit)

技术图片

可以很容易的发现与文献中的差异,可优化:

1)区分两条线的颜色和legend

2)坐标轴,标题,主题优化

3)Risk table

4)P值,OR值,CI值等注释信息

 

三 优化KM曲线

1 survminer绘制KM曲线

p1 <- ggsurvplot(fit)
P1

技术图片

呐,线的颜色可以和性别对应起来了,Q1解决!

 

2 坐标轴,标题,主题优化

p2 <- ggsurvplot(fit, data = lung,
          surv.median.line = "hv", #添加中位生存曲线
          palette=c("red", "blue"),  #更改线的颜色
          legend.labs=c("Sex1","Sex2"), #标签
          legend.title="Treatment",
          title="Overall survival", #标题
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改横纵坐标
          censor.shape = 124,censor.size = 2,conf.int = FALSE, #删失点的形状和大小
          break.x.by = 100#横坐标间隔
          )
P2

技术图片

以上基本就完成了KM曲线颜色,线型大小,标签,横纵坐标,标题,删失点等的修改,Q2搞定!

注意中位生存时间表示50 %的个体尚存活的时间,而不是生存时间的中位数

 

3 Risk Table

p3 <- ggsurvplot(fit, data = lung,
          surv.median.line = "hv", #添加中位生存曲线
          palette=c("red", "blue"),
          legend.labs=c("Sex1","Sex2"), #标签
          legend.title="Treatment",
          title="Overall survival",
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改横纵坐标
          censor.shape = 124,censor.size = 2,conf.int = FALSE,
          break.x.by = 100,
          risk.table = TRUE,tables.height = 0.2,
          tables.theme = theme_cleantable(),
          ggtheme = theme_bw())
p3

技术图片

注 tables.height可调整为看起来“舒服”的高度

根据risk table 可以看出关键点的当前状态,Q3摆平!

4 添加注释信息

1)添加KM的P值

P4 <- ggsurvplot(fit, data = lung,
          pval = TRUE,#添加P值
          pval.coord = c(0, 0.03), #调节Pval的位置
          surv.median.line = "hv", #添加中位生存曲线
          palette=c("red", "blue"),
          legend.labs=c("Sex1","Sex2"), #标签
          legend.title="Treatment",
          title="Overall survival",
          ylab="Cumulative survival (percentage)",xlab = " Time (Days)", #更改横纵坐标
          censor.shape = 124,censor.size = 2,conf.int = FALSE,
          break.x.by = 100,
          risk.table = TRUE,tables.height = 0.2,
          tables.theme = theme_cleantable(),
          ggtheme = theme_bw())
P4

技术图片

pval.coord可以调节P值得位置

 

2)添加COX回归hazard ratio值等相关信息**

###添加COX回归hazard ratio值相关信息
res_cox<-coxph(Surv(time, status) ~sex, data=lung)
p3$plot = p3$plot + ggplot2::annotate("text",x = 50, y = 0.15,
                            label = paste("HR :",round(summary(res_cox)$conf.int[1],2))) + ggplot2::annotate("text",x = 50, y = 0.10,
                   label = paste("(","95%CI:",round(summary(res_cox)$conf.int[3],2),"-",round(summary(res_cox)$conf.int[4],2),")",sep = ""))+
 ggplot2::annotate("text",x = 50, y = 0.05,
                   label = paste("P:",round(summary(res_cox)$coef[5],4)))
p3

技术图片

 

3)添加其他信息

可类似上述annotation得方式,使用ggplot2添加文字,箭头,公式等其他信息,下面为你可能需要的ggplot2的几个知识:

ggplot2|详解八大基本绘图要素

ggplot2|theme主题设置,详解绘图优化-“精雕细琢”

ggplot2 |legend参数设置,图形精雕细琢

ggplot2|ggpubr进行“paper”组图合并

参考资料:

更多参数参见官方文档:https://github.com/kassambara/survminer

◆ ◆ ◆ ◆ ◆

精心整理(含图版)|R语言生信分析,可视化,你要的全拿走,建议收藏!

 

 

以上是关于生存分析入门和R分析的主要内容,如果未能解决你的问题,请参考以下文章

Titanic生存预测(Kaggle入门赛)——基于R语言

R语言生存分析生成仿真数据构建COX回归分析模型并计算C-index

R生存分析 - KM曲线 ,值得拥有姓名和颜值

R|生存分析 - KM曲线 ,值得拥有姓名和颜值

R语言 | 生存分析之R包survival的单变量和多变量Cox回归

R语言入门--第十四节(聚类分析)