引言
在生物信息學分析中,相信目前估計樣本免疫細胞浸潤是必不可少的。目前,在R中有多種方法可以實現上述目的,例如ESTIMATE、CIBERSORT、xCell、MCPcounter、TIMER和ssGSEA等算法,以下是對這些算法的簡單介紹。
ESTIMATE(Estimation of STromal and Immune cells in MAlignant Tumor tissues using Expression data)是一種基于基因表達數據估計腫瘤組織中免疫和間質細胞浸潤水平的方法。其原理為利用腫瘤組織中基因表達的信號,通過估計免疫和間質組分的相對含量,來反映免疫細胞浸潤的程度。
CIBERSORT(Cell-type Identification By Estimating Relative Subsets Of RNA Transcripts)是一種用于定量估計復雜混合組織樣本中免疫細胞亞群的方法。其原理是基于基因表達數據,通過使用已知免疫細胞類型的基因表達簽名,推斷樣本中免疫細胞亞群的相對比例。
xCell是一種基于基因表達數據的計算工具,用于預測免疫細胞類型的相對豐度。其原理是通過使用已知免疫細胞類型的基因表達特征,結合機器學習算法,預測樣本中免疫細胞類型的相對含量。
MCPcounter(Microenvironment Cell Populations counter)通過基因表達數據對腫瘤組織中的免疫和非免疫細胞進行定量估計。其原理是基于免疫和非免疫細胞類型的基因表達特征,通過線性回歸模型,估計腫瘤組織中不同細胞類型的含量。
TIMER(Tumor IMmune Estimation Resource)是一個在線工具,用于估計腫瘤組織中免疫細胞浸潤水平,并提供相應的R軟件包。其原理是基于基因表達數據,通過統計方法和基于免疫細胞標記基因的算法,估計腫瘤組織中免疫細胞的含量。
ssGSEA(single-sample gene set enrichment analysis)是一種基于基因集富集分析的方法,用于評估單個樣本中的免疫細胞浸潤程度。其原理為通過將樣本的基因表達數據與預定義的免疫細胞相關基因集進行比較,計算樣本中各免疫細胞類型的富集得分。
當然,以上算法的使用對象主要基于人,那如何實現小鼠樣本的免疫細胞浸潤估計呢?今天我們向大家介紹一個R包—mMCP-counter,可以通過小鼠的基因表達矩陣來估計樣本中組織浸潤免疫細胞和基質細胞的豐度。其實這項工作已于2020年發表于Genome Medicine。
我們只需要提供自己測序樣本的表達矩陣,進行簡單的標準化之后就可以估計每個樣本中免疫細胞和基質細胞的浸潤情況,運行速度很快,輸出結果為數據框,可以供我們進一步可視化。
我們主要看看mMCP-counter的工作原理以及實際操作。
背景
對于許多疾病,如炎癥性疾病或癌癥,準確確定疾病發展過程中組織中的細胞組成(免疫和間質細胞種群)通常至關重要。有多種方法可從人體樣本中獲取這些數據,包括IHC或FCM,或通過轉錄組學數據進行估計。
對于腫瘤研究,分析組織中的免疫和間質組成尤為重要。事實上,腫瘤是高度異質的組織,有各種免疫和間質細胞浸潤。研究表明,免疫細胞浸潤密度通常與疾病預后有關。例如,在大多數癌癥中,CD8+ T細胞浸潤密度與患者的生存期延長相關,而極化為M2表型的巨噬細胞通常與不良預后相關。
組織樣本的轉錄組測序可以得到樣本中所有細胞的基因的平均表達情況。由于一些基因在特定細胞亞群中獨特表達,因此可以利用它們的表達量來確定潛在細胞亞群的豐度。基于這一特點,作者既往開發了MCP-counter算法,用于定量人體組織中的免疫浸潤,并且該算法具有良好的表現性能。
雖然小鼠模型被廣泛用于解析各種疾病(包括炎癥性疾病和癌癥)的病理生理機制,但與人體樣本相比,目前用于測量小鼠組織免疫和間質細胞組成的計算方法非常有限,如DCQ(Digital Cell Quantification)和基于CIBERSORT算法改進的ImmuCC算法等。
因此,作者基于MCP-counter方法開發了適用于小鼠免疫和基質細胞組成估計的算法—小鼠微環境細胞種群計數器(mMCP-counter)。mMCP-counter可以作為R軟件包使用(https://github.com/cit-bioinfo/mMCP-counter)。它的輸入文件為基因表達矩陣,輸出文件為樣本中16種細胞的RNA豐度。其工作原理如下圖。
主要結果
mMCP-counter可以鑒定哪些細胞類型
基于mMCP-counter可以鑒定16中細胞亞群,其中12種為免疫細胞成分(T cells, CD8+ T cells, NK cells, B-derived cells, memory B cells, monocytes/macrophages, monocytes, granulocytes, mast cells, eosinophils, neutrophils, 和basophils),4種為基質細胞成分(vessels, lymphatics, endothelial cells, 和fibroblasts),每種細胞的marker如下。
流式細胞驗證
那么mMCP-counter的表現能力如何呢?其結果是否可靠?作者同其他已發表的方法做了比較。此外,作者也通過小鼠組織進行了驗證。作者使用流式細胞術和RNA-Seq分析了14個樣本,包括脾臟(n=4),外周血(n=4),腹腔(n=4)和TC1腫瘤(n=2),并使用FCM估計的每種細胞類型的比例作為參考。不考慮組織來源,作者將所有樣本合并,使用mMCP-counter算法基于RNA-Seq數據估計了免疫細胞組成,并計算了流式細胞術估計值與mMCP-counter評分之間的相關性。作者發現大多數細胞亞群的mMCP-counter的評分與流式細胞術得到的比例之間存在良好的一致性,相關性介于0.629(嗜酸性粒細胞)和0.975(CD8+ T細胞)之間。
mMCP-counter區分腫瘤類型和對免疫檢查點阻斷的應答
基于小鼠的臨床前研究模型在藥物臨床試驗中發揮著至關重要的作用。免疫治療在多種腫瘤中顯示出良好的抗腫瘤有效性,并且改變了多種腫瘤的治療格局,那么mMCP-counter能否預測免疫治療的應答呢。因此,作者將mMCP-counter應用于接受了CTLA-4和PD-L1聯合阻斷治療的腎癌和間皮瘤小鼠模型,以研究mMCP-counter是否能夠檢測到在免疫檢查點阻斷中與治療應答與否相關的腫瘤微環境組成的差異。結果表明mMCP-counter可以很好的區分不同腫瘤類型以及對免疫治療應答與否的患者。通過mMCP-counter發現在兩種腫瘤模型中對治療應答的腫瘤具有更高水平的T細胞、CD8+ T細胞和單核細胞/巨噬細胞浸潤。然而,對于不同的腫瘤類型,對治療應答的腫瘤與非應答的腫瘤具有不同的微環境組成。
mMCP-counter識別早期阿爾茨海默病發病的免疫和基質相關因素
最后,作者在AD動物模型中驗證了mMCP-counter的表現性能。首先作者從CK-p25小鼠的海馬體中獲取了RNA-seq數據,隨后將其標記為AD小鼠,并在神經退行性發生的2或6周時獲取了相似的對照CK小鼠的數據。使用mMCP-counter,作者觀察到樣本的免疫和基質組成可以很好地將AD小鼠與CK小鼠區分開,表明AD影響了海馬體的免疫浸潤和血管生成。
mMCP-counter的實際應用
我們基于RNAseq數據看下mMCP-counter的具體使用方法。
首先我們安裝mMCP-counter包并加載相關包
library(devtools)
install_github("cit-bioinfo/mMCP-counter")
library(mMCPcounter)
library(tidyverse)
讀入數據并做預處理
#讀入數據
expressionData <-read.table("Expression.csv",header = T,sep = ",",row.names =NULL)
#去除重復基因名
expressionData<-expressionData[!duplicated(expressionData$Name),]
#第一列轉換為行名
rownames(expressionData) <- expressionData[,1]
expressionData <- expressionData[,-1]
#標準化+log2轉化
#去除在所有樣本里表達量都為零的基因
expressionData<-expressionData[rowSums(expressionData)>0,]
expressionData <- log(expressionData+1)
接下來是重點,估計免疫細胞浸潤
Immune<- mMCPcounter.estimate(expressionData, features =c("Gene.Symbol","ENSEMBL.ID","Probes")[1])
通過以上步驟我們就得到了每個樣本16種細胞的浸潤水平。
然后我們就可以進行相關的可視化了,這里我選擇用熱圖可視化。
#繪制免疫細胞浸潤熱圖
library(pheatmap)
#列注釋
annol_col<-data.frame(Group=factor(rep(c("A","B"),each=3)))
row.names(annol_col)=colnames(Immune)
annol_color<-list(Group=c(A='#66C2A5',B="#FC8D62"))
pheatmap(Immune,
scale = "row",
cluster_cols = F,
cluster_rows = F,
show_colnames = F,
annotation_col = annol_col,
annotation_colors = annol_color,
gaps_col = 3,
border_color = "black",
fontsize =10,
cellwidth =20,
cellheight = 15,
color = colorRampPalette(colors = c("#66C2A5","white","#FC8D62"))(100))