首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TIDE 预测样本的免疫治疗反应

TIDE 预测样本的免疫治疗反应

作者头像
用户11414625
发布于 2024-12-20 07:12:11
发布于 2024-12-20 07:12:11
21400
代码可运行
举报
文章被收录于专栏:生信星球520生信星球520
运行总次数:0
代码可运行

0.背景知识

TIDE评分越高越容易发生免疫逃逸,免疫治疗获益的可能性就越低,评分>0视为无响应,<0视为有反应。

只有网页工具和python版。网页工具需要注册登陆使用,普通邮箱注册就可以。

http://tide.dfci.harvard.edu/

https://github.com/liulab-dfci/TIDEpy

1.亚型

可以是现成的:

TCGA的亚型数据下载链接:https://tcga-pancan-atlas-hub.s3.us-east-1.amazonaws.com/download/TCGASubtype.20170308.tsv.gz

也可以是自己聚类得到的,例如 实战-TCGA数据的NMF聚类和可视化 TCGA数据的一致性聚类实战和可视化 有人把亚型分析做成了一站式R包 多组学、多算法聚类神器-MOVICS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
library(stringr)
sub = rio::import("TCGASubtype.20170308.tsv.gz")
k = stringr::str_starts(sub$Subtype_Selected,"ACC");table(k)

## k
## FALSE  TRUE 
##  7643    91

sub = sub[k,]
table(sub$Subtype_Selected)

## 
##         ACC.CIMP-high ACC.CIMP-intermediate          ACC.CIMP-low 
##                    20                    27                    32 
##                ACC.NA 
##                    12

k2 = sub$Subtype_Selected!="ACC.NA";table(k2)

## k2
## FALSE  TRUE 
##    12    79

sub = sub[k2,]
sub = data.frame(row.names = sub$sample,
                 subtype = str_remove_all(sub$Subtype_Selected,"ACC.CIMP-| "))
head(sub)

##                      subtype
## TCGA-OR-A5J1-01         high
## TCGA-OR-A5J2-01          low
## TCGA-OR-A5J3-01 intermediate
## TCGA-OR-A5J4-01         high
## TCGA-OR-A5J5-01 intermediate
## TCGA-OR-A5J6-01          low

搞成行名是样本名称,内容是亚型的格式即可。

2.表达矩阵
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load("D:/TCGA_RNA_seq/count/acc_exp.Rdata")
acc[1:3,1:3]

##                    TCGA-OR-A5JD-01A-11R-A29S-07 TCGA-OR-A5L5-01A-11R-A29S-07
## ENSG00000000003.15                         2086                         3813
## ENSG00000000005.6                             2                            3
## ENSG00000000419.13                         2086                         2909
##                    TCGA-OR-A5KX-01A-11R-A29S-07
## ENSG00000000003.15                         2145
## ENSG00000000005.6                             2
## ENSG00000000419.13                         2546

library(tinyarray)
exp = trans_exp_new(acc)
table(make_tcga_group(exp)) #都是tumor,不是的话要去除normal样本

## 
## normal  tumor 
##      0     79

#exp = exp[,make_tcga_group(exp)=="tumor"]
3.匹配表达矩阵与亚型数据的样本顺序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
head(colnames(exp))

## [1] "TCGA-OR-A5JD-01A-11R-A29S-07" "TCGA-OR-A5L5-01A-11R-A29S-07"
## [3] "TCGA-OR-A5KX-01A-11R-A29S-07" "TCGA-OR-A5JY-01A-31R-A29S-07"
## [5] "TCGA-OR-A5JV-01A-11R-A29S-07" "TCGA-PK-A5H8-01A-11R-A29S-07"

head(rownames(sub))

## [1] "TCGA-OR-A5J1-01" "TCGA-OR-A5J2-01" "TCGA-OR-A5J3-01" "TCGA-OR-A5J4-01"
## [5] "TCGA-OR-A5J5-01" "TCGA-OR-A5J6-01"

colnames(exp) = str_sub(colnames(exp),1,15)
s = intersect(colnames(exp),rownames(sub));length(s)

## [1] 78

exp = exp[,s]
sub = sub[s,,drop=F]
4.将表达矩阵进行标准化并导出

TIDE首页有明显的提示:

Note: The gene expression value should be normalized toward a control sample which could be either normal tissues related with a cancer type or mixture sample from diverse tumor samples. The log2(RPKM+1) values from a RNA-seq experiment may not be meaningful unless a good reference control is available to adjust the batch effect and cancer type difference. In our study, we used the all sample average in each study as the normalization control.

最后一句话说“使用每个研究中的所有样本平均值作为归一化对照” 代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exp2 <- sweep(exp,1, apply(exp,1,mean,na.rm=T))
write.table(exp2,"TIDE.txt",sep = "\t",quote = F)
5.读取结果并作图

将这个文件上传的TIDE,得到的结果是tide.csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res <- read.csv("tide.csv",row.names = 1,check.names = F)
res[1:4,1:4]

##                 No benefits Responder TIDE     IFNG
## TCGA-OR-A5J9-01       False     False 0.90 -1353.97
## TCGA-P6-A5OF-01       False     False 0.68  -818.80
## TCGA-OR-A5KV-01       False     False 0.66 -1885.47
## TCGA-OR-A5JF-01       False     False 0.64 -1489.63

res = merge(res,sub,by = "row.names")
table(res$Responder,res$subtype)

##        
##         high intermediate low
##   False   11           11  14
##   True     8           16  18

f = fisher.test(table(res$subtype,res$Responder)) 
label = paste("fisher.test p value =",round(f$p.value,3))
label

## [1] "fisher.test p value = 0.525"

fisher.test用来检验subtype和Responder是否相关,p<0.05表示相关 很不幸这个例子是不相关滴。

5.画图

TIDE列是TIDE分数。Responder是免疫治疗是否响应

5.1 TIDE评分柱状图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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("#f87669","#2fa1dd"))+
  xlab("patient")+
  annotate("text", x = 40, y = 1, label = label,size = 5) +  
  theme_minimal()
5.2.免疫反应与亚型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
dat = count(res,subtype,Responder)
dat = dat %>% group_by(subtype) %>% 
  summarise(Responder = Responder,n = n/sum(n))
dat$Responder = factor(dat$Responder,levels = c("False","True"))
dat

## # A tibble: 6 × 3
## # Groups:   subtype [3]
##   subtype      Responder     n
##   <chr>        <fct>     <dbl>
## 1 high         False     0.579
## 2 high         True      0.421
## 3 intermediate False     0.407
## 4 intermediate True      0.593
## 5 low          False     0.438
## 6 low          True      0.562

library(ggplot2)
p2 = ggplot(data = dat)+
  geom_bar(aes(x = subtype,y = n,
               fill = Responder),
           stat = "identity")+
  scale_fill_manual(values =  c("#f87669","#2fa1dd"))+
  geom_label(aes(x = subtype,y = n,
                label = scales::percent(n),
                fill = Responder),
            color = "white",
            size = 4,label.size = 0,
            show.legend = F,
            position = position_fill(vjust = 0.5))+
  theme_minimal()+
  guides(label = "none")
library(patchwork)
p1+p2+ plot_layout(widths = c(3,2),guides = "collect")
6.其他几个评分
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colnames(res)

##  [1] "Row.names"    "No benefits"  "Responder"    "TIDE"         "IFNG"        
##  [6] "MSI Expr Sig" "Merck18"      "CD274"        "CD8"          "CTL.flag"    
## [11] "Dysfunction"  "Exclusion"    "MDSC"         "CAF"          "TAM M2"      
## [16] "subtype"

IFNG:Interferon-gamma,干扰素-γ是一种由免疫细胞,特别是T细胞和自然杀伤细胞产生的细胞因子。Cytotoxic T Lymphocyte(CTL.flag,细胞毒性T淋巴细胞) T cell dysfunction score(Dysfunction,T细胞功能障碍评分) T cell exclusion score(Exclusion,T细胞排斥评分) cancer-associated fibroblasts (CAF,癌症相关成纤维细胞) myeloid-derived suppressor cells (MDSC,髓源性抑制细胞) M2 macrophages.

详细的分数计算原理在这里:https://liulab-dfci.github.io/RIMA/Response.html

可以作图比较他们

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dat = t(res[,c(4:5,8:9,11:15)])
draw_boxplot(dat,res$Responder)+
  facet_wrap(~rows,scales = "free")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
draw_boxplot(dat,res$subtype)+
  facet_wrap(~rows,scales = "free")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Redis 延迟队列实现(基于PHP)
Redis 可以利用 zset (有序列表)来实现,将消息序列化成一个字符串作为 zset的 value; 这个消息的到期处理时间作为 score,利用多个线程轮询 zset 获取到期的任务进行处理。 多线程是为了保证可用性,万一挂了一个线程还有其他线程可以继续处理; 因为有多个线程,所以需要考虑并发争抢任务,确保任务不会多次执行。
陈大剩博客
2023/03/06
9700
Redis 延迟队列实现(基于PHP)
Redis 延迟队列实现(基于PHP)
Redis 可以利用 zset (有序列表)来实现,将消息序列化成一个字符串作为 zset的 value; 这个消息的到期处理时间作为 score,利用多个线程轮询 zset 获取到期的任务进行处理。 多线程是为了保证可用性,万一挂了一个线程还有其他线程可以继续处理; 因为有多个线程,所以需要考虑并发争抢任务,确保任务不会多次执行。
高久峰
2023/09/18
4780
Redis 延迟队列实现(基于PHP)
Go 语言实战:构建强大的延迟任务队列
延迟队列是一种数据结构,用于处理需要在未来某个特定时间执行的任务。这些任务被添加到队列中,并且指定了一个执行时间,只有到达指定的时间点时才能从队列中取出并执行。
frank.
2024/01/22
8390
Go 语言实战:构建强大的延迟任务队列
图文结合!Redis延迟队列golang高效实践
导语 | 本文主要讲述如何使用golang基于Redis实现延迟消息队列组件。希望对有需求的同学有所帮助。 一、背景 业务中经常会有这样的场景: 到期后自动执行指定操作; 查询某个任务是否完成,未完成等待一定时间再次查询; 回调通知,当回调失败时,等待后重试;等等还有其他很多类似的场景。 很多时候我们会直接通过一个本地定时器来帮我们完成这个任务。如果我们的系统是多实例分布式的,本地定时器就会面临很多问题,如:怎么保证重复处理的问题;统一管控的问题等等。面对本地定时器遇到的问题,我们可以使用分布式延迟
腾讯云开发者
2022/06/02
1.7K0
图文结合!Redis延迟队列golang高效实践
013:Redis延时队列
我们平时习惯于使用 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加 异步消息传递功能。这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理解能力。
李玺
2021/11/22
2.4K0
013:Redis延时队列
Redis的三种延迟队列 - Java技术债务
在现代分布式系统设计中,延迟队列作为一种重要的数据结构,广泛应用于消息延迟处理、任务调度、缓存失效、订单超时处理等场景。Redis,作为一个高性能的键值对存储系统,凭借其丰富的数据结构、原子操作、发布/订阅模式以及Lua脚本支持,成为了实现延迟队列的理想选择。
Java技术债务
2024/07/10
8890
模型上线不用愁,批量推理来加油
作为一个算法工程师,在日常工作中难免会碰到模型上线的问题。对于一些要求不高的场合,简单找一个web框架实现一下接口就能搞定:对于每个用户请求,调用模型得到结果再返回。但这种朴素的实现往往无法最大化利用GPU,对于性能要求比较高的场景应付起来就略显吃力。
朴素人工智能
2021/07/08
1.4K0
Redis 如何实现延时任务队列
顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。而一般的队列,消息一旦入队了之后就会被消费者马上消费。
Tinywan
2024/05/11
8340
Redis 如何实现延时任务队列
田哥 手把手教 你用 Redis 做延迟消息队列
看到消息队列,我们肯定会想到各种MQ,比如:RabbitMQ,acivityMQ、RocketMQ、Kafka等。
田维常
2021/04/02
4.1K0
田哥 手把手教 你用 Redis 做延迟消息队列
面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?
对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别
路人甲Java
2023/08/29
3750
面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?
Redis学习笔记之延时队列
这些情况都可以使用延时队列来做,实现延时队列比较场景的有使用消息队列MQ来实现,比如RocketMQ等等,也可以使用Redis来实现,本博客主要介绍一下Redis实现延时队列
SmileNicky
2019/03/11
2.3K0
一口气说出 6种 延时队列的实现方案
五一期间原计划是写两篇文章,看一本技术类书籍,结果这五天由于自律性过于差,禁不住各种诱惑,我连电脑都没打开过,计划完美宣告失败。所以在这能看出和大佬之间的差距,人家没白没夜的更文,比你优秀的人比你更努力,难以望其项背,真是让我自愧不如。
程序员小富
2020/05/08
2.5K0
一口气说出 6种 延时队列的实现方案
生成订单30分钟未支付,则自动取消,该怎么实现?
对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别
良月柒
2021/09/03
6750
Dyno-queues 分布式延迟队列 之 辅助功能
本系列我们会以设计分布式延迟队列时重点考虑的模块为主线,穿插灌输一些消息队列的特性实现方法,通过分析Dyno-queues 分布式延迟队列的源码来具体看看设计实现一个分布式延迟队列的方方面面。
罗西的思考
2021/03/04
4700
Dyno-queues 分布式延迟队列 之 辅助功能
实战:常见的延时队列解决方案及代码实现,真的很全:MQ、Redis、JDK队列、Netty时间轮~
DelayedQueue是一个无界阻塞队列,内部有一个优先队列,当使用put方法添加元素到DelayQueue时,会塞一个延时条件,DelayedQueue会按照延时条件排序,最先过期的排在队首,只有元素过期了,才能从队首取出数据,取出数据的方法有take和poll
AI码师
2022/12/22
2.3K0
实战:常见的延时队列解决方案及代码实现,真的很全:MQ、Redis、JDK队列、Netty时间轮~
Redis系列(十四)应用之延时队列
延迟队列,想必大家都不陌生,顾名思义,它是一个带有延迟功能的队列。那么到底为什么需要延迟,怎么延迟呢?考虑一下下面的应用场景。
呼延十
2020/12/23
9600
用 Redis 做一个可靠的延迟队列
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/19
4720
用 Redis 做一个可靠的延迟队列
重学SpringBoot3-集成Redis(八)之限时任务(延迟队列)
在分布式系统中,延迟任务(或限时任务)是一种常见的需求,通常用于实现延迟执行、定时处理或消息超时等场景。Redis 作为高性能的内存数据库,具备非常灵活的 Sorted Set(有序集合) 数据结构,可以很容易地实现延迟队列,满足限时任务的需求。
CoderJia
2024/10/18
3660
重学SpringBoot3-集成Redis(八)之限时任务(延迟队列)
有赞延迟队列设计
延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢?
后端技术探索
2018/08/09
1.1K0
Redis实现消息队列及延迟队列
在选择消息中间件的问题上,我们有很多解决方案,具体选择哪一种还是要根据实际的情况来进行确认。
半月无霜
2023/03/03
2.2K0
Redis实现消息队列及延迟队列
推荐阅读
相关推荐
Redis 延迟队列实现(基于PHP)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验