生存分析是一种统计方法,用于分析个体在给定时间段内发生某个事件(如死亡)的概率或时间。生存分析可用于评估不同因素对个体生存时间的影响,确定生存率曲线,比较不同组之间的生存差异,并预测患者的生存期。常见的生存分析方法包括Kaplan-Meier方法、Cox比例风险回归分析和生存ROC曲线分析。
Kaplan-Meier方法(Kaplan-Meier analysis):Kaplan-Meier方法用于估计生存函数,即给定时间点上生存的概率。它可以根据不同的组别(例如不同的治疗组)绘制生存曲线,并通过对曲线进行比较来评估不同因素对生存的影响。
Cox比例风险回归分析(Cox proportional hazards regression analysis):Cox比例风险回归分析用于评估多个因素对生存时间的影响,同时控制其他因素。它可以估计各个因素的风险比(hazard ratio),即不同组之间生存风险的比较。
生存ROC曲线分析(Survival ROC curve analysis):生存ROC曲线分析用于评估生存预测模型的准确性。它通过计算生存时间的预测准确度来衡量模型的性能,可以帮助选择合适的生存预测模型。生存分析相关的包包括survival、survminer和survivalROC等。这些包提供了丰富的函数和工具,用于进行生存分析的数据处理、可视化和模型建立。
需要注意的是,生存分析需要有包含个体生存时间和事件状态(如死亡与否)的数据。常见的数据格式是时间至事件或失访的表格,例如列出每个个体的生存时间和事件状态(0表示未发生事件,1表示发生事件)。
library(limma)
library(data.table)
library(tidyverse)
library(ggsignif)
library(RColorBrewer)
library(future.apply)
library(survival)
library(survminer)
#Get all survival files
批量处理基因表达数据和生存分析数据
files=dir(“./TG_Exp/”)
使用dir函数列出指定目录./TG_Exp/下的所有文件,并将文件名存储在files变量中。
#Batch read geneexp files 批量读取基因表达文件
###
rt=read.table(“./cli_surv.txt”,header=T,sep=”\t”,check.names=F,row.names=1)
从文件cli_surv.txt中读取数据,设置文件的分隔符为制表符(\t),并将第5列和第6列的数据提取出来。然后,将这两列的列名分别设置为fustat和futime。
rt=na.omit(rt)
rt=rt[,c(5:6)]
colnames(rt)=c(“fustat”,”futime”)
#Batch read geneexp files
自定义的函数expTim,用于处理每个文件的基因表达数据和生存分析数据。函数的参数是一个文件路径的字符串。
在函数内部,首先读取基因表达数据文件,文件路径是由参数dirname和固定的路径字符串拼接而成。然后,使用subset函数筛选出sample_type为”tumor”的行,将第一列作为行名,并移除第一列。
接下来,通过处理dirname字符串,提取文件名部分作为变量dirnam。然后,使用intersect函数找到基因表达数据和生存分析数据中共同的样本,并将它们筛选出来。将生存分析数据和基因表达数据合并到一个数据框中,再添加一个名为”id”的列作为行名,并删除含有缺失值的行。
最后,使用write.csv函数将结果保存到指定路径下的文件中。
expTim=function(dirname){
#exp <- read.table(paste0(“./TG_GTEX_EXP/”,dirname),header=T,sep=’\t’,check.names=F)
exp <- read.table(paste0(“./TG_Exp/”,dirname),header=T,sep=’\t’,check.names=F)
exp1=subset(exp,exp$sample_type==”tumor”)
rownames(exp1)=exp1[,1]
exp1=exp1[,-1]
####
tmp<- strsplit(dirname,split=”.”,fixed=TRUE)
dirnam<-unlist(lapply(tmp,head,1))
#merging results
sameSample=intersect(row.names(rt),row.names(exp1))
surTime=rt[sameSample,]
exp1=exp1[sameSample,]
surData=cbind(surTime,exp1)
surData=cbind(id=row.names(surData),surData)
surData=na.omit(surData)
write.csv(surData,paste0(“./DFI/”,dirnam,”_DFI_Time”,”.txt”),sep=”\t”,quote=F,row.names=F)
}
dd=future_lapply(files,expTim)
#####
#使用future_lapply函数对files中的每个文件名调用expTim函数,并将结果存储在变量dd中。future_lapply函数是一个并行计算的版本,可以加速处理过程。后续有人想了解,可以联系小果。
DFI(Disease-Free Interval)是指在治疗后或手术切除后,患者没有再次发生疾病的时间间隔。DFI常用于癌症领域,特别是对于评估患者的治疗效果和生存预后非常重要。DFI的计算通常涉及两个重要的时间点:
治疗开始时间(Treatment Start Time):这是指开始进行特定治疗(如手术、放疗或化疗)的时间点。疾病再发时间(Disease Recurrence Time):这是指患者再次出现疾病(如肿瘤复发)的时间点。
DFI的计算方式是从治疗开始时间到疾病再发时间的时间差。如果疾病再发事件尚未发生或数据不可用,可以将DFI视为右侧截尾(right-censored)的生存数据。
在生存分析中,DFI常用于绘制Kaplan-Meier曲线、评估治疗效果和进行生存分析。通过对患者进行随访观察,可以跟踪并记录他们的DFI,并分析不同因素对DFI的影响。
需要注意的是,DFI的计算和解释可能因研究设计、疾病类型和研究目的而有所不同。在具体的研究中,可以根据需求和特定情况对DFI进行相应的定义和分析。
下期将为你带来更多R语言的骚操作技巧,以下推荐的是一个多功能的生信平台。
云生信平台链接:http://www.biocloudservice.com/home.html。
云生信平台链接:http://www.biocloudservice.com/home.html。