离散变量生存曲线简介
离散变量生存曲线(Discrete Variable Survival Curve)是一种用于分析和展示生存数据的方法,特别适用于离散型变量。离散变量是指只能取特定值的变量,例如性别(男、女)、治疗组(对照组、实验组)等。
离散变量生存曲线的基本概念
生存分析:用于处理时间到事件的数据,例如患者从治疗开始到疾病复发的时间,或者从手术到死亡的时间。生存分析的核心在于分析时间和事件之间的关系。
生存函数(Survival Function, S(t)):描述在时间 ( t ) 之后个体仍然存活的概率。数学上表示为 ( S(t) = P(T > t) ),其中 ( T ) 是生存时间。
离散变量:生存分析中可以根据离散变量(如治疗组、性别等)将数据分组,对每个组分别绘制生存曲线。
应用场景
临床试验:比较不同治疗方案的效果。 流行病学研究:分析不同人群的生存率。 工程领域:评估设备或系统的寿命。
离散变量生存曲线在各个领域都有广泛应用,能够帮助研究人员理解和比较不同组别的生存情况,从而提供重要的决策支持。
应用实例
下图是以分期为变量(见图例),比较不同分期之间的生存率是否具有差异;横坐标代表生存时间,单位是年;纵坐标代表生存率;通过P值可以了解不同分期之间生存率是否存在差异,若p<0.05则说明不同分期的生存率存在差异;如下图,p<0.001,Ⅰ期的生存率最高,Ⅳ期生存率最低。
源文件
输入文件有四列信息
id: 样品名称
futime:生存时间,单位为年。
fustat:生存状态,0代表存活,1代表死亡。
离散变量:分期、性别、年龄分组等
代码
环境准备
这段代码设置了用于生存分析的基本环境,包括安装必要的包、加载包、设置输入输出文件和变量,以及设置工作目录。以下是逐行解释:
# 安装必要的包
#install.packages("survival")
#install.packages("survminer")
这两行代码用于安装survival
和survminer
包。如果已经安装过,可以跳过这一步。这两行代码目前被注释掉了,如果需要安装这些包,可以去掉注释。
# 引用包
library(survival)
library(survminer)
这两行代码用于加载survival
和survminer
包,这两个包是进行生存分析和生存曲线可视化的常用包。
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$chisq
是survdiff
计算的卡方值,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 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。