CIBERSORT:反卷积推测bulk中的细胞类型

五一学了一个新的分析方法-CIBERSORT,这个包其实很早就想学的,因为现在一般的单细胞文章的套路,很难不用到它,那么它能干什么呢?它能够推测出bulk RNA每一个样本中各类细胞的比例。通俗易懂的来讲,就是能够把bulk RNA当作single cell RNA来分析

实现把bulk RNA当作single cell RNA来分析主要是有两种算法反卷积ssgsea,而CIBERSORT就是基于反卷积算法来做的,所以这篇着重介绍反卷积算法。

1.什么是反卷积算法

要想了解什么是反卷积,我们就要了解什么是卷积,我先show一张图,这张图就展示了卷积的过程


8811c6671c9bf68acdbb6f8a5931f82.png

我想用一些比较容易懂的话来讲卷积,所以可能讲述或隐喻的不准确,望谅解!!!
根据这张图我们可以看出 其实bulk RNAseq就像是每一个细胞的RNA-seq卷起来的乘积,所以称为卷积(图:左边(bulk)是右边(cell)的乘积运算的结果,而这个乘积运算需要细胞的表达量和一个系数表),现在我们来解释反卷积反卷积顾名思义反过来/不卷积,对bulkRNA的反卷积就相当于对bulk RNA进行除法,我们只要给一个系数表,就可以得到细胞的RNA表达量,那么我们就可以知道bulk中有哪一些细胞类型了。(其实没有那么简单哈,但是大致是这样的,里面涉及到算法啥的我也不知道怎么解释,主要是也不太会哈哈哈哈)

那么根据上面的解释我们可以知道假如进行bulk RNA的反卷积,我们需要什么:
1.系数表
2.bulk RNA的表达矩阵(假如你是一个生信入门的人,你一定要注意这个,表达矩阵,什么样的表达矩阵,首先是芯片还是RNA-seq,再是count?fpkm?rpkm?cpm?CIBERSORT说的很清楚,芯片或者RNA-seq都可以,参数上选择不同而已,RNA-seq数据不建议直接使用Count,应使用FPKM和TPM或DESEq2标准化后的矩阵为宜)

2.用LM22-ref.txt文件进行反卷积分析

首先LM22-ref.txt文件是什么,这里要从免疫浸润讲起,免疫浸润可以当作肿瘤组织中全部免疫细胞的总和,而LM22就是拿来分析免疫浸润的,所以我们用excel打开来看看这个文件吧,第一列是基因名字,后面每一列是某类细胞和他们gene symbol的系数,所以这个LM22-ref.txt文件就是我们的系数表(关于这个表格怎么来的可以去看其他大神的文章)

de8b85e25a44e2cbf5b28effc168a77.png

这时候我们还缺我们的bulk RNA的表达矩阵,所以我们要拥有一个这样的表格,把它保存为txt文件,命名为test.txt

687c63aabb3a45655d6fff217188670.png

为了确保大家保存没有错误,大家也可以试一下用excel打开,看看是不是跟我的格式一样
7659cb0bbc104d6523d47d1f2112469.png

好的,在这里总结一下,LM22-ref.txt文件=系数表,test.txt=bulk RNA的表达矩阵
并且这两个文件要在我们的工作路径下
由于CIBERSORT现在还不是R包,但是有CIBERSORT这个function(相当于文章的预印版吧),我们的工作路径下还需要CIBERSORT这个function,而这个function可以到官网上下载(关于这个function怎么运行的,可以follow健明老师的文章,在这里你只要知道它就是反卷积,帮我们计算出来了每一个样本中的细胞类型的含量),所以在工作工作路径下有三个东西
CIBERSORT.R / LM22-ref.txt / test.txt
5632b56baa514b41fb61276c2931532.png

运行function

library(tibble)
library(ggplot2)
library(ggrepel)
library(tidyverse)
library('e1071')             #必须加载,因为后面反卷积的算法是基于这个包里的数据
source("CIBERSORT.R")  #激活function

results=CIBERSORT("LM22-ref.txt","test.txt", perm=1000, QN=TRUE)   #perm是循环次数  一般文章循环1000次,QN=TRUE是分析RNA-seq,假如为F则分析芯片数据

然后我们就可以得到这样的result


2392a390d3cafb028a100abb4fa7638.png

2.个性化进行反卷积分析

何为个性化,就是当我们在做单细胞分析的时候,自己定义了一个群或者定义了一些细胞,想看这种细胞类型在bulk中的含量该怎么办呢,我怎么得到每一种细胞类型的系数呢?其实没有那么复杂,细胞类型的系数表其实就是AverageExpression,所以我们可以这样来做

library(tibble)
library(ggplot2)
library(ggrepel)
library(tidyverse)
library('e1071')             #必须加载,因为后面反卷积的算法是基于这个包里的数据
source("CIBERSORT.R")  #激活function

scRNA_harmony <- readRDS("scRNAsub.rds")  #导入单细胞数据
#先Idents
Idents(scRNA_harmony) <- "celltype"
#制作细胞类型的系数表
X <- AverageExpression(scRNA_harmony)[[1]]    #这就是我们要的细胞类型系数表
write.table(X,"sig.txt",sep = "\t",col.names = T,row.names = T)     #保存为sig.txt

results=CIBERSORT("sig.txt","test.txt", perm=1000, QN=TRUE)   #还是用那一个test.txt表达矩阵,同样运行

后面附上sig.txt用excel打开后的样子,以免大家报错


d8c723735c3b1141a7648ce0037025d.png

在这里我需要强调,大家不要小看给出来的txt用excel打开后的格式,因为这是报错的主要原因,一定要跟我的格式一样,为什么呢,可以看CIBERSORT.R这个函数

c543a40d88090adf2ff8103eaede738.png

它要read in data,而且用read.table加了参数,所以一定要格式符合它的输入格式

写在文末,假如大家真的很想了解这个算法,强烈建议去看jimmy老师的教程,我这个只做参考!!!

好像有那么一丝不想写教程了,嗯....,我是个完美主义者,总感觉没有写好........

References:
//www.greatytc.com/p/03a7440c0960
https://cloud.tencent.com/developer/article/1622907
https://cloud.tencent.com/developer/article/1784632
https://mp.weixin.qq.com/s?__biz=MzAxMDkxODM1Ng==&mid=2247493507&idx=1&sn=e8533247aa045ce82e3a6cbb9f3b4281&scene=21#wechat_redirect
//www.greatytc.com/p/2991ef7bf993

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容