前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >预测癌症免疫治疗反应-TIDE数据库学习及知识整理

预测癌症免疫治疗反应-TIDE数据库学习及知识整理

原创
作者头像
凑齐六个字吧
发布2024-08-25 16:23:39
1640
发布2024-08-25 16:23:39
举报
文章被收录于专栏:科研工具

TIDE(Tumor Immune Dysfunction and Exclusion) 是一个用于预测癌症患者对免疫检查点抑制剂(如PD-1/PD-L1抑制剂)反应的算法。研究者通过检测肿瘤建模队列中每个基因的表达与效应性毒性T淋巴细胞(CTL)浸润水平的相互关系及对生存情况的影响,从而构建算法来鉴定其他肿瘤队列中的T细胞功能障碍特征。

研究者构建的TIDE算法模拟肿瘤免疫逃逸/抑制的机制主要是两种

1、CTL功能失调(dysfunction) :在免疫细胞高浸润的肿瘤中,存在着功能失调的效应性毒性T细胞,这些T细胞本可以有效地杀伤肿瘤细胞,但由于某种原因它们的功能被抑制。

2、T细胞清除/排除(exclusion) :在某些肿瘤中,尽管免疫系统可以识别肿瘤,T细胞却无法有效浸润到肿瘤内部,反而被排除在外。

换句话说,该预测工具主要是是通过分析队列中CTL/T细胞的情况进行免疫反应的预测。

该研究团队开发了门户网站和python代码两种分析方式。本次演示网页版的使用方法。

首先进入门户网站: http://tide.dfci.harvard.edu/,在门户网站的中间处可以看到一个视频介绍使用该网站/方法的注意事项。

注意事项主要有以下几点
1、进入界面后需注册后使用
2、需输入的信息

基因表达矩阵、癌症类型和样本数据是否既往接受过免疫治疗

分别对应以下三个红色方框,其中

3、表达矩阵格式

应是txt,tsv格式的数据,行是基因数据列为患者样本信息。行名可以是symbol 或者 Entrez ID

在网页的下方有示例数据,可以参照修改。

4、表达矩阵信息

需要标准化处理,首选的是用正常样本或者不同肿瘤的混合样本作为参考队列。如果没有参考样本,可以选择用所有样本的平均值作为参考队列标准化处理

RNA-seq数据应使用log2之后的TPM或者FPKM数据。TPM和FPKM数据不可用于分析,除非有质量良好的参考队列。没有特别注明是否可用或不可用芯片数据

5、癌症类型选择

主要分三种:黑色素瘤,非小细胞肺癌,和其他。由于建模采用的数据集是肿瘤接受PD1和CTLA4治疗反应队列,所以预测的肿瘤也应当是可接受PD-1/CTLA4治疗的。因此,需要提前了解所研究肿瘤目前的治疗方案

6、既往是否接受过免疫治疗

要选择是否既往接受过免疫治疗,因为接受了免疫治疗会改变免疫反应的情况。

结果解读

点击predict response之后就会得到结果,图片和表格文件均可导出至本地。

左边的柱状图

中蓝色的代表Nonresponder,TIDE值为正(T细胞功能障碍和清除分值高),表示不能对免疫检查点抑制剂(ICB)产生反应。红色代表Responder,TIDE值为负(T细胞功能障碍和清除分值低),表示能够对ICB产生反应。

最上面的阈值可以自行调整(0-1),开发者建议研究者只关心预测Nonresponser的准确性的话,建议使用较高的阈值,比如1。如果研究者关注可能有反应的患者,建议使用较低阈值,比如0。

右边的表格:

No.benefit:预测是否对ICB存在反应,基于基因特征和干扰素γ信息,IFN-γ是有CTL分泌的哦。

Responder:预测是否对ICB存在反应,但仅基于基因特征。 TIDE:每个患者的预测分数,该列较高表明该患者具有较高的肿瘤免疫逃潜力,可能无法从ICB治疗中得到获益。

IFNG:6基因的IFN-γ标志物(IFNG,STAT1,IDO1, CXC10,CXCL9和 HLA-DRA)。

MSI score:微卫星不稳定,越高往往对ICB越敏感。

CD274和CD8(CD8A/B的平均表达量)就是这两个标志物的表达情况。

CTL.Flag: 表示T细胞和CTL的浸润水平,高浸润是True,低浸润是Flase。

Dysfuction:表示肿瘤患者的T细胞功能障碍情况。

Exclusion:表示肿瘤患者的T细胞清除/排除情况。

最后三列分别代表了MDSC/CAF/TAM-M2细胞(通常认为是免疫抑制相关的细胞) 与输入文件的pearson相关性。

分析步骤及流程
1、输入数据及处理
代码语言:javascript
复制
rm(list = ls())
load("~/Desktop/data.Rdata")
head(exp)[1:4,1:4]
# GSM1020099 GSM1020100 GSM1020101 GSM1020102
# RFC2     7.727199   5.109329   8.021387   7.880099
# HSPA6    7.601476   6.538490   6.340193   6.016021
# PAX8     5.910106   5.848390   6.124806   5.894079
# GUCA1A   3.577948   3.591067   3.566542   3.553448

# 数据的归一化处理,两种不同的代码
normalize <- t(apply(exp, 1, function(x)x-(mean(x))))
#normalize <- sweep(exp,1, apply(exp,1,mean,na.rm=T))
write.table(normalize, file = "exp.txt", sep = "\t", 
            row.names = T, col.names = TRUE, quote = FALSE)
2、得到结果
3、数据合并
代码语言:javascript
复制
# 把分组信息和TIDE信息合并
# meta是含有临床信息的表格,TIDE是从网站上获取的结果
meta <- read.csv("./meta.csv",row.names = 1)
TIDE <- read.csv("./exp_TIDE.csv",row.names = 1)
identical(rownames(meta),rownames(TIDE))
s <- intersect(rownames(meta),rownames(TIDE))
meta <- meta[s,]
TIDE <- TIDE[s,]
meta_TIDE <- cbind(meta,TIDE)
write.csv(meta_TIDE,"meta_TIDE.csv")
4、可视化处理

基础数据可视化

代码语言:javascript
复制
# 统计学检验一下
table(res$Responder,res$cluster)
f = fisher.test(table(res$cluster,res$Responder))
label = paste("fisher.test p value =",round(f$p.value,3))
label

# 网站中的柱状图
library(ggplot2)
library(dplyr)
res = arrange(res,desc(TIDE))
p1 = ggplot(res,aes(x = 1:nrow(res),
                     y = TIDE,
                     fill = Responder))+
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("#e04030","#6cb8d2"))+
  xlab("patient")+
  ylab("TIDE value")+
  annotate("text", x = 40, y = -2, label = label,size = 10)+
  theme_bw()+
  theme(legend.position = "none") # 把P1的图注去掉了

########免疫反应与亚型
library(dplyr)
dat=count(res,cluster,Responder)
dat=dat%>%group_by(cluster)%>%
  summarise(Responder=Responder,n=n/sum(n))
dat$Responder=factor(dat$Responder,levels=c("False","True"))
dat

library(ggplot2)
p2=ggplot(data=dat)+
  geom_bar(aes(x=cluster,y=n,
               fill=Responder),
               stat="identity")+
  scale_fill_manual(values=c("#e04030","#6cb8d2"))+
  geom_label(aes(x=cluster,y=n,
                 label=scales::percent(n),
                 fill=Responder),
                 color="white",
                 size=4,label.size=0,
                 show.legend = FALSE,
                 position=position_fill(vjust=0.5))+
  ylab("Percentage")+
  theme_minimal()+
  guides(fill = guide_legend(title = "Responder"))  # 仅保留一个图例

library(patchwork)
p1+p2+plot_layout(widths=c(3,2),guides="collect")
ggsave('total.png',width = 20,height = 8)

TIDE可视化

代码语言:javascript
复制
res$cluster <- factor(res$cluster,levels = c("C1","C2"))
png("TIDE_web.png",width = 1200,height = 1200,res = 300)
ggplot(data=res,aes(x=cluster,y=TIDE,colour = cluster))+ #fill参数不要设置,会不好看
  geom_violin(#color = 'grey',
    alpha = 0.8, #alpha = 0.8 参数控制着小提琴图的透明度。
    scale = 'width',#小提琴宽度
    #linewidth = 1, #外轮廓粗细
    trim = TRUE)+ # trim = TRUE 参数控制着小提琴图的形状。
  geom_boxplot(mapping=aes(x=cluster,y=TIDE,colour=cluster,fill=cluster), #箱线图
               alpha = 0.5,
               size=1.5,
               width = 0.3)+ 
  geom_jitter(mapping=aes(x=cluster,y=TIDE,colour=cluster), #散点
              alpha = 0.3,size=3)+
  scale_fill_manual(limits=c("C1","C2"), 
                    values =c("#e04030","#6cb8d2"))+
  scale_color_manual(limits=c("C1","C2"), 
                     values=c("#e04030","#6cb8d2"))+ #颜色
  geom_signif(mapping=aes(x=cluster,y=TIDE), # 不同组别的显著性
              comparisons = list(c("C1","C2")), # 哪些组进行比较
              map_signif_level=T, # T显示显著性,F显示p value
              tip_length=c(0,0),#把向下的帽子去掉,分组数乘以2
              y_position = c(3.5), # 设置显著性线的位置高度
              size=1, # 修改线的粗细
              textsize = 4, # 修改显著性标记的大小
              test = "wilcox.test", # 检验的类型,可以更改
              color = "black")+ # 设置显著性线的颜色
  theme_bw()+ #设置白色背景
  guides(fill = guide_legend(title = "cluster"),  # 设置填充图例的标题
         color = guide_legend(title = "cluster"))+  # 设置颜色图例的标题
  labs(title = "",  # 设置标题
       x="",y= "TIDE value") # 添加标题,x轴,y轴标签
dev.off()

其他值可视化

代码语言:javascript
复制
library(tinyarray)
res$cluster <- factor(res$cluster,levels = c("C1","C2"))
colnames(res)
dat <- t(res[,c(12,14:16,18:22)])
head(dat)[1:4,1:4]
draw_boxplot(dat,res$cluster)+
facet_wrap(~rows,scales ="free") +
scale_fill_manual(values = c("C1" = "#e04030", "C2" = "#6cb8d2")) 
ggsave("together.png",width = 12,height = 12)
参考资料:

1、TIDE:Signatures of T cell dysfunction and exclusion predict cancer immunotherapy response. Nat Med. 2018 Oct;24(10):1550-1558.

2、生信菜鸟团:https://mp.weixin.qq.com/s/AHJCgY_341ZY5pmq6vSQCw

3、生信星球:https://mp.weixin.qq.com/s/-Vu6UcIesrC096aXRPRTyA

致谢:感谢曾老师、小洁老师以及生信技能树团队全体成员。

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意事项主要有以下几点
    • 1、进入界面后需注册后使用
      • 2、需输入的信息
        • 3、表达矩阵格式
          • 4、表达矩阵信息
            • 5、癌症类型选择
              • 6、既往是否接受过免疫治疗
              • 结果解读
              • 分析步骤及流程
                • 1、输入数据及处理
                  • 2、得到结果
                    • 3、数据合并
                      • 4、可视化处理
                      • 参考资料:
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档