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

news2024/11/16 11:43:30

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、输入数据及处理
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、数据合并
# 把分组信息和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、可视化处理

基础数据可视化

# 统计学检验一下
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可视化

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()

其他值可视化

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 -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open3D 近似点体素滤波(36)

Open3D 近似点体素滤波(36) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 这个算法也是体素滤波, 它保留的点是近似点,也就是新的点,原始点云中对应位置是不存在这些点的。其他的看着类似,下面是代码,滤波抽稀结果 二、算法实现 1.代码 代码如下(示例): …

学习文件IO,让你从操作系统内核的角度去理解输入和输出(Java实践篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【在Linux世界中追寻伟大的One Piece】应用层协议HTTP

目录 1 -> HTTP协议 2 -> 认识URL 2.1 -> urlencode和urldecode 3 -> HTTP协议请求与响应格式 3.1 -> HTTP请求 3.2 -> HTTP响应 4 -> HTTP的方法 4.1 -> HTTP常见方法 5 -> HTTP的状态码 6 -> HTTP常见Header 7 -> 最简单的HTTP服…

Linux系统报错“version ‘GLIBC_2.34‘ not found”解决方法

注意&#xff0c;此文章慎用&#xff0c;glibc不可随意升级&#xff0c;可能导致系统崩溃 一、查看版本 ldd --version 二、添加高版本源 sudo vi /etc/apt/sources.list.d/my.list 进入编辑页面 "i"键进入插入模式 输入源 deb http://th.archive.ubuntu.com/…

【信创】推荐一款超级好用的文件同步备份工具 _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;【信创】统信UOS打包工具介绍与使用教程 Hello&#xff0c;大家好啊&#xff01;今天给大家推荐一款在Linux系统上超级好用的文件同步和备份工具——FreeFileSync。无论是在日常工作还是数据管理中&#xff0c;文件同步和备份都是至关重要的任务。FreeFile…

【自动驾驶】控制算法(五)连续方程离散化与离散LQR原理

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

QT6 setCentralWidget 和 takeCentralWidget

qt6 中&#xff0c;初始化界面完成之后&#xff0c;可以使用setCentralWidget 设置当前的widget为中心页面 如果你存在多个widget想要多个切换 如果存在widget1 和 widget2 在初始化的时候 setCentralWidget(widget1)触发操作切换到 widget2 如果没有先takeCentralWidget 直…

13.深入解析ThreadPoolExecutor线程池

ThreadPoolExecutor线程池 线程池简介线程池的使用创建线程池ThreadPoolExecutor——推荐使用线程池的核心参数 Executors——不推荐使用 提交任务如何执行批量任务如何执行定时、延时任务如何执行周期、重复性任务 关闭线程池线程池的参数设计分析核心线程数(corePoolSize)最大…

EEMD-MPE-KPCA-BiLSTM、EEMD-MPE-BiLSTM、EEMD-PE-BiLSTM故障识别、诊断(Matlab)

EEMD-MPE-KPCA-BiLSTM(集合经验分解-多尺度排列熵-核主元分析-双向长短期网络)故障识别、诊断&#xff08;Matlab) 目录 EEMD-MPE-KPCA-BiLSTM(集合经验分解-多尺度排列熵-核主元分析-双向长短期网络)故障识别、诊断&#xff08;Matlab)效果一览基本介绍程序设计参考资料 效果一…

RK3588人工智能开发----【1】初识NPU

NPU 的诞生&#xff01; 随着人工智能和大数据时代的到来&#xff0c;传统嵌入式处理器中的CPU和GPU逐渐无法满足日益增长的深度学习需求。为了应对这一挑战&#xff0c;在一些高端处理器中&#xff0c;NPU&#xff08;神经网络处理单元&#xff09;也被集成到了处理器里。NPU的…

【GNSS射频前端】MA2769初识

MAX2769 芯片概述&#xff1a; MAX2769是一款单芯片多系统GNSS接收器&#xff0c;采用Maxim的低功耗SiGe BiCMOS工艺技术。集成了包括双输入低噪声放大器&#xff08;LNA&#xff09;、混频器、图像拒绝滤波器、可编程增益放大器&#xff08;PGA&#xff09;、压控振荡器&#…

note38:tdsql数据库迁移

数据迁移过程中遇到的具体问题&#xff1a; ①提供给系统团队的表结构与生产不一致&#xff0c;导致脚本报错。因为历史遗留问题&#xff0c;存在部分直接在生产环境更改字段长度或添加索引的情况&#xff0c;导致测试环境和生产环境的表结构不同步。 今后所有生产的变动&…

Vulkan 学习(5)---- Vulkan 内存分配

目录 Overview枚举内存信息分配内存内存映射 Overview Vulkan 将内存管理的工作交给了开发者自己负责&#xff0c;如何分配内存&#xff0c;如何指定内存策略都是由开发者自己决定的&#xff0c;当然处理问题也是由开发者自己负责的 Vulkan 将内存划分为两大类&#xff1a;主…

Android自定义简单仿QQ运动步数进展圆环

实现效果主要效果分为三个部分&#xff1a; 1.固定蓝色的大圆弧 color borderWidth 2.可以变化的小圆弧(红色) color borderWidth 3.中间的步数文字 color textSize drawArc方法 startAngle 确定角度的起始位置 sweepAngle 确定扫过的角度 useCenter 是否使用中心&#xff1a…

MyBatis XML配置文件(下)

MyBatis的开发有两种方式&#xff1a;1、注解 2、XML。使用MyBatis的注解方式&#xff0c;主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能&#xff0c;建议使用XML来配置映射语句&#xff0c;也就是将SQL语句写在XML配置文件中。 MyBatis XML开发的方式需要以…

UE5学习笔记17-让人物的视线和鼠标移动时的方向一致,并且不让人物模型旋转,只改变视线方向

一、创建标准动画帧 1.我想让人物在装备武器后根据鼠标的移动方向改变人物的视线方向&#xff0c;并且人物模型不会改变朝向 2.我的动画中存在一个四个方向瞄准的动画&#xff0c;将左下&#xff0c;坐上&#xff0c;左转&#xff0c;右上&#xff0c;右下&#xff0c;右转&…

C++ 设计模式——组合模式

C 设计模式——组合模式 C 设计模式——组合模式1. 主要组成成分2. 逐步构建透明组合模式1. 定义抽象组件&#xff08;Component&#xff09;2. 实现叶子组件&#xff08;Leaf&#xff09;3. 实现组合组件&#xff08;Composite&#xff09;4. 主函数&#xff08;Main&#xff…

Nacos踩坑

最近遇到项目部署&#xff0c;遇到Nacos中的配置读取不到&#xff0c;导致服务起不来。服务器银河麒麟x86&#xff0c;Nacos版本2.3.2, openJdk8u43 报错如下&#xff1a; java.lang.UnsatisfiedLinkError: no com_alibaba_nacos_shaded_io_grpc_netty_shaded_netty_transport…

Linux磁盘操作之du命令

使用du命令&#xff0c;您可以查看指定目录或文件的磁盘使用量总计。这对于了解特定目录或文件占用的磁盘空间大小非常有用&#xff0c;可以帮助您进行磁盘空间管理和清理。 参数说明 du是一个用于显示目录或文件的磁盘使用情况的命令&#xff0c;du是disk usage的缩写&#…

从图像到视频:Web Codecs API编码技术解析

初探Web Codecs API 三 前言 在之前的文章中,咱们简单的介绍了解码相关的东西,这一节咱们来简单聊聊编码相关的东西。 编码的目的就是为了压缩,去除空间、时间维度的冗余。 这里又不得不提起前面所说的I 帧、P 帧、B 帧和 IDR 帧。 众所周知,视频是连续的图像序列,由…