TCGA_生存分析

library("survival")
library("survminer")

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

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

Age_old vs young

一、读入数据

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

View(data_cl)

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

二、整理数据

1 计算生存时间

meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
meta$days_to_death[is.na(meta$days_to_death)] = 0   
meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)

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法“输出拟合数据

survData = Surv(time = meta$mouth,                 #生存时间数据
                event = meta$vital_status=='Dead') #判断结局,完全数据/截尾数据

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()参数详细介绍

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

 Gene Expression_high vs low

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

meta 中留下有结局的Sample;

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

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

exp <- read.csv(file = "Results/测序or临床数据下载/dataFilt.csv", header=T, row.names=1,check.names=FALSE)
colnames(exp)=str_sub(colnames(exp),1,12)
colmeans=function(x){
  exp_m=as.matrix(x)
  exp_t=t(exp_m)
  exp_t=limma::avereps(exp_t)
  t(exp_t)
}
exp=colmeans(exp) #取平均去除重复列名的Sample

View(data_cl)

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

二、整理数据

1 计算生存时间

meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
meta$days_to_death[is.na(meta$days_to_death)] = 0   
meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)

meta$mouth=round(meta$days/30,2) #以month为单位,保留两位小数

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

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

三、分析,拟合生存曲线

1 确定基因和高低表达

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

2 作图 

survData = Surv(time=meta$mouth, #月份数据
                  event=meta$vital_status=='Dead') #判断哪些是截尾数据
KMfit <- survfit(survData ~ meta$Expression_level)  #~后指定分组

ggsurvplot(KMfit, # 创建的拟合对象
           data = meta,  # 指定变量数据来源
           pval = TRUE, # 添加P值
           surv.median.line = "hv",  # 添加中位生存时间线
           risk.table = TRUE, # 添加风险表
           ncensor.plot = FALSE, #??图
           xlab = "Follow up time(m)", # 指定x轴标签
           break.x.by = 10, # 设置x轴刻度间距
           palette = c("#E7B800", "#2E9FDF"),
           #legend = c(0.8,0.75), # 指定图例位置
           legend.title = Gene, # 设置图例标题
           #legend.labs = c("old", "young"), # 指定图例分组标签
)  

  • 8
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郁柳_Fudan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值