前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >肿瘤微环境看基质和免疫细胞就太泛了

肿瘤微环境看基质和免疫细胞就太泛了

作者头像
生信技能树
发布2021-10-12 11:55:37
1K0
发布2021-10-12 11:55:37
举报
文章被收录于专栏:生信技能树

我们在前面使用3个教程来说明肿瘤微环境,,是一个目前比较流行的方法 estimate看基质和免疫细胞比例 ,来源于2013数据挖掘文章,作者就整理了两个基因集来根据表达量矩阵使用estimate方法去量化肿瘤样品里面的基质细胞和免疫细胞的比例。目录是:

实际上, 这个方法还是过于粗糙了,肿瘤微环境的复杂程度,远不止基质和免疫细胞简单的归类。我随手查了一个比较新的综述文章:《Tumor microenvironment complexity and therapeutic implications at a glance》,链接是https://biosignaling.biomedcentral.com/articles/10.1186/s12964-020-0530-4,感兴趣的可以自己研读:

肿瘤微环境的复杂程度

可以看到,免疫细胞有淋巴系的T,nk和b细胞,还有髓系的dc和TAM等等,统一的免疫细胞比例肯定是很难说明肿瘤真实的免疫情况,因为不同免疫细胞的作用并不一样。

但是咱们的TCGA数据库的转录组测序数据毕竟是bulk转录组测序,病人的肿瘤样品里面虽然是混合了各种各样的免疫细胞,但是在数据层面被混杂成为了一个样品,并不是单细胞测序,所以并没有细胞比例信息。这个时候仍然是需要借助于算法啦,有一个2019的综述文章:《Comprehensive evaluation of transcriptome-based cell-type quantification methods for immuno-oncology》比较了常见的免疫细胞比例推断工具的表现:

比较了常见的免疫细胞比例推断工具的表现

但是你,工具的表现并不能决定它的流行程度,流行与否主要是靠传播,这个时候CIBERSORT就一马当先了,CIBERSORT是2015年在Nature Methods发表的一个方法,工具在:(http://cibersort.stanford.edu)., 早在2016就有文章使用它进行数据挖掘了,比如. Patterns of Immune Infiltration in Breast Cancer and Their Clinical Implications: A Gene-Expression-Based Retrospective Study. PLOS Medicine, 作者研究团队利用CIBERSORT算法推断解析了11,000个乳腺癌(组织转录组芯片或是RNAseq,包括GEO和TCGA)中的22种免疫细胞的占比。

使用CIBERSORT算法推断全部tcga样品的免疫细胞比例

这里我们直接对seurat对象走 CIBERSORT,如果你还不知道下面的代码里面的seurat对象是如何产生的,见:前面的教程:大样本量多分组表达量矩阵分析你难道没想到单细胞吗

代码语言:javascript
复制

rm(list=ls())
options(stringsAsFactors = F)
library(stringr)  
library(data.table)  
library(preprocessCore)
library(parallel)
library(e1071) 
library(dplyr)
library(tidyr)
library(tidyverse)
library(Seurat)
load(file = 'sce.Rdata')
gp=substring(colnames(sce),14,15)
table(gp)
sce@meta.data$gp=gp
pd_mat=sce@assays$RNA@counts
dat=log2(edgeR::cpm(pd_mat)+1) 
pro='CIBERSORT_for_seurat' 
# 只能说假装是 tpm,去搞基因长度信息很麻烦
exp_tpm=dat
exp_tpm[1:4,1:4]  

source("CIBERSORT.R")  
load('lm22.rda')
ciber=CIBERSORT(dat) 


cibersort_raw <- read.table("CIBERSORT-Results.txt",header = T,sep = '\t') %>%
  rename("Patients" = "Mixture") %>%
  select(-c("P.value","Correlation","RMSE"))


dim(cibersort_raw)
sce
cibersort_raw$group= sce@meta.data$gp  
cibersort_raw$type= sce@meta.data$group  

pro='seurat'
save(cibersort_raw, 
     file = file.path('CIBERSORT_results',
    paste0('cibersort_raw-for-',pro,'.Rdata'))) 
 

核心的代码就3句话:

代码语言:javascript
复制
source("CIBERSORT.R")  
load('lm22.rda')
ciber=CIBERSORT(dat) 

需要一个脚本, 就是 CIBERSORT.R,在其官网或者我们的教程配套网盘里面都有,见解析CIBERSORT使用SVM算法实现去卷积,

其次是lm22.rda,这个是我教程配套网盘里面的,见解析CIBERSORT使用SVM算法实现去卷积,

最后只需要给一个表达量矩阵即可,运行 CIBERSORT(dat) 函数,就可以拿到全部的结果啦!

可视化CIBERSORT算法推断的免疫细胞比例

首先可以看到不同癌症免疫细胞比例差异很大:

其实,我们可以在:https://gdc.cancer.gov/about-data/publications/panimmune 找到 TCGA.Kallisto.fullIDs.cibersort.relative.tsv文件, 它的下载地址是 https://api.gdc.cancer.gov/data/b3df502e-3594-46ef-9f94-d041a20a0b9a

我们可以比较一下自己计算的免疫细胞比例和这个TCGA官方的差异:

代码语言:javascript
复制
cibersort_all <- read.table("CIBERSORT-Results.txt",header = T,sep = '\t') %>%
  rename("Patients" = "Mixture") %>%
  select(-c("P.value","Correlation","RMSE")) 
cibersort_all[1:4,1:4]
library(data.table)
TCGA.Kallisto.fullIDs.cibersort = fread('TCGA.Kallisto.fullIDs.cibersort.relative.tsv',data.table = F)
TCGA.Kallisto.fullIDs.cibersort[1:4,1:4]

我们两个结果的样品id不一致:

代码语言:javascript
复制
> TCGA.Kallisto.fullIDs.cibersort[1:4,1:4]
                      SampleID CancerType B.cells.naive B.cells.memory
1 TCGA.OR.A5JG.01A.11R.A29S.07        ACC  0.000000e+00     0.04852871
2 TCGA.OR.A5LG.01A.11R.A29S.07        ACC  7.168876e-03     0.01112538
3 TCGA.OR.A5JD.01A.11R.A29S.07        ACC  2.342245e-05     0.01460659
4 TCGA.OR.A5LH.01A.11R.A29S.07        ACC  4.729908e-02     0.03817952
> cibersort_all[1:4,1:4]
          Patients B.cells.naive B.cells.memory Plasma.cells
1 TCGA-OR-A5JP-01A    0.07674056              0            0
2 TCGA-OR-A5JG-01A    0.00000000              0            0
3 TCGA-OR-A5K1-01A    0.03410138              0            0
4 TCGA-OR-A5JR-01A    0.03491271              0            0

所以需要进行简单的转换,然后计算相关性:

代码语言:javascript
复制
identical(colnames(cibersort_all)[2:22],
          colnames(TCGA.Kallisto.fullIDs.cibersort)[3:23])
pid=gsub('[.]','-',substring(TCGA.Kallisto.fullIDs.cibersort$SampleID,1,16))
head(pid)
table(cibersort_all$Patients %in% pid)
pos=match(cibersort_all$Patients,pid) 
TCGA.Kallisto.fullIDs.cibersort=TCGA.Kallisto.fullIDs.cibersort[pos,]
pheatmap::pheatmap(cor(
  cbind(cibersort_all[2:22],
        TCGA.Kallisto.fullIDs.cibersort[,3:23])
))

可以看到,虽然我跟TCGA官方的表达量矩阵形式不一样,但是我们计算得到的免疫细胞比例基本上一致。

前面我们提出来了疑问,就是针对RNA-seq数据,我们创造性的使用logCPM这样的表达量矩阵,进行estimate或者CIBERSORT算法流程(必然与tpm或者fpkm矩阵结果不一致哦!)

如果是根据具体某个基因表达量把病人分组,那么tpm或者fpkm跟我们的logCPM值并不会有区别,就是说差异分析,生存分析都没有问题。

但是呢,如果我们进行estimate或者CIBERSORT算法,都依赖于同一个样品内部基因的排序,所以tpm或者fpkm的归一化会改变样品内基因的排序,所以结果会有差异!

但是这个差异又是在可接受范围内!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用CIBERSORT算法推断全部tcga样品的免疫细胞比例
  • 可视化CIBERSORT算法推断的免疫细胞比例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档