五一学了一个新的分析方法-CIBERSORT,这个包其实很早就想学的,因为现在一般的单细胞文章的套路,很难不用到它,那么它能干什么呢?它能够推测出bulk RNA每一个样本中各类细胞的比例。通俗易懂的来讲,就是能够把bulk RNA当作single cell RNA来分析。
实现把bulk RNA当作single cell RNA来分析主要是有两种算法反卷积和ssgsea,而CIBERSORT就是基于反卷积算法来做的,所以这篇着重介绍反卷积算法。
1.什么是反卷积算法
要想了解什么是反卷积,我们就要了解什么是卷积,我先show一张图,这张图就展示了卷积的过程
我想用一些比较容易懂的话来讲卷积,所以可能讲述或隐喻的不准确,望谅解!!!
根据这张图我们可以看出 其实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文件就是我们的系数表(关于这个表格怎么来的可以去看其他大神的文章)
这时候我们还缺我们的bulk RNA的表达矩阵,所以我们要拥有一个这样的表格,把它保存为txt文件,命名为test.txt
为了确保大家保存没有错误,大家也可以试一下用excel打开,看看是不是跟我的格式一样
好的,在这里总结一下,LM22-ref.txt文件=系数表,test.txt=bulk RNA的表达矩阵
并且这两个文件要在我们的工作路径下
由于CIBERSORT现在还不是R包,但是有CIBERSORT这个function(相当于文章的预印版吧),我们的工作路径下还需要CIBERSORT这个function,而这个function可以到官网上下载(关于这个function怎么运行的,可以follow健明老师的文章,在这里你只要知道它就是反卷积,帮我们计算出来了每一个样本中的细胞类型的含量),所以在工作工作路径下有三个东西
CIBERSORT.R / LM22-ref.txt / test.txt
运行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
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打开后的样子,以免大家报错
在这里我需要强调,大家不要小看给出来的txt用excel打开后的格式,因为这是报错的主要原因,一定要跟我的格式一样,为什么呢,可以看CIBERSORT.R这个函数
它要read in data,而且用read.table加了参数,所以一定要格式符合它的输入格式
写在文末,假如大家真的很想了解这个算法,强烈建议去看jimmy老师的教程,我这个只做参考!!!
好像有那么一丝不想写教程了,嗯....,我是个完美主义者,总感觉没有写好........
References:
https://www.jianshu.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
https://www.jianshu.com/p/2991ef7bf993