分享

TCGA

 王老吉6ib7a9gl 2022-12-24 发布于安徽
  1. library('survival')
  2. library('survminer')

生存分析需要三个 vector,在一个dataframe中

  1. 生存时间,以mouths或者days作单位;
  2. 结局,'Dead'或者'Alive','Alive'是截尾数据,'Dead'是完全数据;
  3. 分组信息。

Age_old vs young

一、读入数据

  1. data_cl <- read.csv(file = 'Results/测序or临床数据下载/data_cl.csv', header=T, row.names=2,check.names=FALSE)
  2. t_needed=c('vital_status',
  3. 'days_to_last_follow_up',
  4. 'days_to_death',
  5. 'age_at_index',
  6. 'tumor_grade')
  7. meta=data_cl[,t_needed] #筛选需要的临床信息
  8. meta=meta[meta$vital_status %in% c('Alive','Dead'),] #排除结局为'Not Reported'的Sample

View(data_cl)

data_cl$vital_status 中有两个为 Not Reported,需要排除

二、整理数据

1 计算生存时间

  1. meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
  2. meta$days_to_death[is.na(meta$days_to_death)] = 0
  3. meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)
  4. meta$mouth=round(meta$days/30,2) #以month为单位,保留两位小数

2 添加age_group列(分组数据)

meta$age_group = ifelse(meta$age_at_index>median(meta$age_at_index),'old','young')

 三、分析

Surv() 函数输出带有截尾信息的生存时间数据

survfit() 函数根据生存时间数据分组信息,并基于”K-M法“输出拟合数据

  1. survData = Surv(time = meta$mouth, #生存时间数据
  2. event = meta$vital_status=='Dead') #判断结局,完全数据/截尾数据
  3. KMfit <- survfit(survData ~ meta$age_group) # ~ 后是指定的分组

head(survData)        有'+'为截尾数据

[1]  13.20+ 116.73   73.27+  50.57+  15.43+  23.67

survData[1:10,1:2]        survData有2个列维度,'status==0'为截尾数据

         time status
 [1,]  13.20      0
 [2,] 116.73      1
 [3,]  73.27      0
 [4,]  50.57      0
 [5,]  15.43      0
 [6,]  23.67      0
 [7,]  64.90      0
 [8,]  77.47      0
 [9,]  87.60      0
[10,]   3.23      0

四、拟合生存曲线

ggsurvplot()参数详细介绍

  1. ggsurvplot(KMfit, #拟合对象
  2. data = meta, #变量数据来源
  3. pval = TRUE, #P值
  4. surv.median.line = 'hv', #中位生存时间线
  5. risk.table = TRUE, #风险表
  6. xlab = 'Follow up time(m)', #x轴标签
  7. break.x.by = 10, #x轴刻度间距
  8. #legend = c(0.8,0.75), #图例位置
  9. #legend.title = '', #图例标题
  10. #legend.labs = c('old', 'young'), #图例分组标签
  11. )

 Gene Expression_high vs low

一、读入数据(临床数据+表达数据)

meta 中留下有结局的Sample;

exp 中合并重复的列名(一个Sample可能有多个组织样本,这里采用取平均的方式去重)

  1. data_cl <- read.csv(file = 'Results/测序or临床数据下载/data_cl.csv', header=T, row.names=2,check.names=FALSE)
  2. t_needed=c('vital_status',
  3. 'days_to_last_follow_up',
  4. 'days_to_death',
  5. 'age_at_index',
  6. 'tumor_grade')
  7. meta=data_cl[,t_needed] #筛选需要的临床信息
  8. meta=meta[meta$vital_status %in% c('Alive','Dead'),] #排除结局为'Not Reported'的Sample
  9. exp <- read.csv(file = 'Results/测序or临床数据下载/dataFilt.csv', header=T, row.names=1,check.names=FALSE)
  10. colnames(exp)=str_sub(colnames(exp),1,12)
  11. colmeans=function(x){
  12. exp_m=as.matrix(x)
  13. exp_t=t(exp_m)
  14. exp_t=limma::avereps(exp_t)
  15. t(exp_t)
  16. }
  17. exp=colmeans(exp) #取平均去除重复列名的Sample

View(data_cl)

data_cl$vital_status 中有两个为 Not Reported,需要排除

二、整理数据

1 计算生存时间

  1. meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
  2. meta$days_to_death[is.na(meta$days_to_death)] = 0
  3. meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)
  4. meta$mouth=round(meta$days/30,2) #以month为单位,保留两位小数

2 筛选meta中有表达信息的Sample

  1. t_index = rownames(meta)[rownames(meta) %in% colnames(exp)]
  2. meta=meta[t_index,]

三、分析,拟合生存曲线

1 确定基因和高低表达

  1. Gene = 'CHAC1'
  2. meta$Expression_level = ifelse(exp[Gene,rownames(meta)]>median(exp[Gene,]),'high','low')

2 作图 

  1. survData = Surv(time=meta$mouth, #月份数据
  2. event=meta$vital_status=='Dead') #判断哪些是截尾数据
  3. KMfit <- survfit(survData ~ meta$Expression_level) #~后指定分组
  4. ggsurvplot(KMfit, # 创建的拟合对象
  5. data = meta, # 指定变量数据来源
  6. pval = TRUE, # 添加P值
  7. surv.median.line = 'hv', # 添加中位生存时间线
  8. risk.table = TRUE, # 添加风险表
  9. ncensor.plot = FALSE, #??图
  10. xlab = 'Follow up time(m)', # 指定x轴标签
  11. break.x.by = 10, # 设置x轴刻度间距
  12. palette = c('#E7B800', '#2E9FDF'),
  13. #legend = c(0.8,0.75), # 指定图例位置
  14. legend.title = Gene, # 设置图例标题
  15. #legend.labs = c('old', 'young'), # 指定图例分组标签
  16. )

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多