R语言小白绘图系列·第33弹|离散变量生存曲线

文摘   2024-07-22 00:48   德国  

R语言小白绘图系列
第33弹
离散变量生存曲线

离散变量生存曲线简介

离散变量生存曲线(Discrete Variable Survival Curve)是一种用于分析和展示生存数据的方法,特别适用于离散型变量。离散变量是指只能取特定值的变量,例如性别(男、女)、治疗组(对照组、实验组)等。

离散变量生存曲线的基本概念

  1. 生存分析:用于处理时间到事件的数据,例如患者从治疗开始到疾病复发的时间,或者从手术到死亡的时间。生存分析的核心在于分析时间和事件之间的关系。

  2. 生存函数(Survival Function, S(t)):描述在时间 ( t ) 之后个体仍然存活的概率。数学上表示为 ( S(t) = P(T > t) ),其中 ( T ) 是生存时间。

  3. 离散变量:生存分析中可以根据离散变量(如治疗组、性别等)将数据分组,对每个组分别绘制生存曲线。

应用场景

  1. 临床试验:比较不同治疗方案的效果。
  2. 流行病学研究:分析不同人群的生存率。
  3. 工程领域:评估设备或系统的寿命。

离散变量生存曲线在各个领域都有广泛应用,能够帮助研究人员理解和比较不同组别的生存情况,从而提供重要的决策支持。

应用实例

下图是以分期为变量(见图例),比较不同分期之间的生存率是否具有差异;横坐标代表生存时间,单位是年;纵坐标代表生存率;通过P值可以了解不同分期之间生存率是否存在差异,若p<0.05则说明不同分期的生存率存在差异;如下图,p<0.001,Ⅰ期的生存率最高,Ⅳ期生存率最低。

离散变量生存曲线

源文件

输入文件有四列信息

id: 样品名称

futime:生存时间,单位为年。

fustat:生存状态,0代表存活,1代表死亡。

离散变量:分期、性别、年龄分组等

代码

环境准备

这段代码设置了用于生存分析的基本环境,包括安装必要的包、加载包、设置输入输出文件和变量,以及设置工作目录。以下是逐行解释:

# 安装必要的包
#install.packages("survival")
#install.packages("survminer")

这两行代码用于安装survivalsurvminer包。如果已经安装过,可以跳过这一步。这两行代码目前被注释掉了,如果需要安装这些包,可以去掉注释。

# 引用包
library(survival)
library(survminer)

这两行代码用于加载survivalsurvminer包,这两个包是进行生存分析和生存曲线可视化的常用包。

inputFile = "input.txt"
outFile = "survival.pdf"

这两行代码定义了输入文件名为"input.txt",输出文件名为"survival.pdf"

var = "Stage"  # 用于生存分析的变量

这行代码定义了用于生存分析的变量为"Stage",表示将使用输入数据中的Stage列进行分析。

setwd("D:\\biowolf\\bioR\\34.survivalDiscrete")  # 设置工作目录

这行代码设置当前工作目录为"D:\\biowolf\\bioR\\34.survivalDiscrete"

数据准备

下面这段代码用于读取输入数据文件,并准备进行生存分析的数据。以下是逐行解释:

# 读取数据
rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE)

这行代码读取制表符分隔的输入文件,并将其内容存储到数据框rt中。header = TRUE表示文件的第一行是列名,check.names = FALSE表示不自动修改列名。

rt = rt[, c("futime""fustat", var)]

这行代码选择数据框rt中的三列进行分析:生存时间(futime)、生存状态(fustat)和变量var(在之前定义的变量)。这里假设输入数据文件中包含这些列。

colnames(rt)[3] = "Type"

这行代码将第三列的列名改为"Type",这样在后续分析中可以更容易引用该列。

groupNum = length(levels(factor(rt[,"Type"])))

这行代码计算"Type"列中的不同组数,并将其存储在变量groupNum中。factor(rt[,"Type"])"Type"列转换为因子,然后levels函数返回因子的水平,length函数计算水平的数量。

总结来说,这段代码的目的是读取输入数据文件,选择需要进行生存分析的列,并准备数据框进行分析。同时,它还计算了用于分析的分组数目。

比较组间生存差异的P值

这段代码用于比较不同组间的生存差异,并计算相应的p值。以下是逐行解释:

diff = survdiff(Surv(futime, fustat) ~ Type, data = rt)

这行代码使用survdiff函数计算不同组间的生存差异。Surv(futime, fustat)创建一个生存对象,其中futime是生存时间,fustat是生存状态(事件发生为1,未发生为0)。~ Type表示按Type变量分组,data = rt指定数据来源。

pValue = 1 - pchisq(diff$chisq, df = (groupNum - 1))  # df自由度

这行代码计算卡方检验的p值。diff$chisqsurvdiff计算的卡方值,df = (groupNum - 1)是自由度,自由度等于组数减1。pchisq函数返回卡方分布的累积分布函数值,1减去该值即为p值。

if(pValue < 0.001) {
  pValue = "p<0.001"
else {
  pValue = paste0("p=", sprintf("%.3f", pValue))
}

这段代码格式化p值。如果p值小于0.001,则将其表示为"p<0.001";否则,将其格式化为小数点后三位并转换为字符串。

fit <- survfit(Surv(futime, fustat) ~ Type, data = rt)

这行代码使用survfit函数根据Type变量分组拟合生存曲线。Surv(futime, fustat)创建生存对象,~ Type表示按Type变量分组,data = rt指定数据来源。fit对象包含生存曲线拟合的结果。

总结来说,这段代码的目的是计算不同组间的生存差异的p值,并拟合生存曲线。

绘制生存曲线

这段代码使用ggsurvplot函数绘制生存曲线,并将结果保存到PDF文件中。以下是逐行解释:

surPlot = ggsurvplot(fit, 
                     data = rt,
                     conf.int = FALSE,  # 不显示置信区间
                     pval = pValue,  # 显示p值
                     pval.size = 5,  # p值字体大小
                     legend.labs = levels(factor(rt[,"Type"])),  # 图例标签
                     legend.title = var,  # 图例标题
                     xlab = "Time (years)",  # x轴标签
                     break.time.by = 1,  # x轴时间间隔
                     risk.table.title = "",  # 风险表标题为空
                     risk.table = FALSE,  # 不显示风险表
                     risk.table.height = .25)  # 风险表高度

这段代码使用ggsurvplot函数创建生存曲线图。参数解释如下:

  • fit: 使用survfit函数拟合的生存曲线对象。
  • data = rt: 用于绘图的数据。
  • conf.int = FALSE: 不显示置信区间。
  • pval = pValue: 显示p值。
  • pval.size = 5: 设置p值的字体大小。
  • legend.labs = levels(factor(rt[,"Type"])): 设置图例标签为Type变量的水平。
  • legend.title = var: 设置图例标题为变量名var
  • xlab = "Time (years)": 设置x轴标签为“Time (years)”。
  • break.time.by = 1: 设置x轴时间间隔为1年。
  • risk.table.title = "": 设置风险表标题为空。
  • risk.table = FALSE: 不显示风险表。
  • risk.table.height = .25: 设置风险表的高度。
pdf(file = outFile, onefile = FALSE, width = 5, height = 4.5)

这行代码设置输出设备为PDF文件,文件名为"survival.pdf",并指定PDF的宽度为5英寸,高度为4.5英寸。

print(surPlot)

这行代码将绘制的生存曲线图输出到PDF文件中。

dev.off()

这行代码关闭PDF设备,完成图形的保存。

总结来说,这段代码的目的是使用ggsurvplot函数绘制生存曲线,并将图形保存为PDF文件。

现在:


长按扫码关注:科研生信充电宝

5元赞赏本文,即喜欢作者~


即可直接解锁:


《R语言小白绘图系列·第33弹|离散变量生存曲线哦~


 您将获得示例输入文件和完整代码


 看到这里你还不心动吗?


 赶紧关注、转发、点赞、分享,领取你的专属福利吧~



好啦,以上就是今天推文的全部内容啦!



今天的分享就到这里啦~


另外,本公众号建立了R语言和Python学习分享群,联系后台小编,拉您入群。

版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。

科研生信充电宝
介绍科研;介绍统计;介绍生信;
 最新文章