單細(xì)胞-注釋

注釋是很關(guān)鍵的一步,這幾天先把注釋完全搞懂∏捎椋現(xiàn)在有幾個(gè)問題需要解決:

1碉怔、搞清楚不同注釋方法(手動(dòng)、網(wǎng)站禁添、用已發(fā)表的文章里面的去注釋同一測序樣品)撮胧;
2、如何提取細(xì)胞亞群老翘,進(jìn)行亞群注釋

單細(xì)胞數(shù)據(jù)經(jīng)過降維處理后芹啥,得到的tesn和umap圖就是根據(jù)表達(dá)情況,把表達(dá)相似的細(xì)胞聚在一起(也就是不同的cluster)铺峭。注釋這一步其實(shí)就是給這些表達(dá)相似的細(xì)胞群起名字墓怀。

參考:

【生信純干貨】 生信分析手把手教學(xué) 第六課
第五講-基于Seurat的細(xì)胞注釋分析
單細(xì)胞數(shù)據(jù)分析系列講座(三):細(xì)胞類型注釋


注釋原則:

image.png

image.png

image.png

1、手動(dòng)注釋

注釋網(wǎng)站 CellMarker
就是先搜索組織 再定位組織里面的細(xì)胞 打開之后卫键,給到你某個(gè)組織中特定的細(xì)胞的 Marker 基因傀履。然后用 Vlnplot 看marker在不同的群里面的特異性表達(dá)情況。 然后慢慢篩選莉炉、調(diào)整钓账。整個(gè)過程需要對測序的細(xì)胞比較熟悉,尤其是腫瘤細(xì)胞絮宁。

marker 展示方法:


image.png

image.png

image.png

image.png

image.png

image.png

2梆暮、自動(dòng)注釋(內(nèi)置參考集,也就是celldex包)-人工檢查

這一種注釋方法比較常用绍昂,最常用的是SingleR啦粹。使用時(shí),需要下載celldex參考數(shù)據(jù)包窘游。

使用內(nèi)置參考進(jìn)行注釋(最簡便的)
使用SingleR的最簡單方法是使用內(nèi)置參考對細(xì)胞進(jìn)行注釋卖陵。celldex包通過專用的檢索功能提供了7個(gè)參考數(shù)據(jù)集(主要來自大量RNA-seq或微陣列數(shù)據(jù))。
singleR自帶的7個(gè)參考數(shù)據(jù)集张峰,需要聯(lián)網(wǎng)才能下載泪蔫,其中5個(gè)是人類數(shù)據(jù),2個(gè)是小鼠的數(shù)據(jù):
BlueprintEncodeData Blueprint (Martens and Stunnenberg 2013) and Encode (The ENCODE Project Consortium 2012) (人)
DatabaseImmuneCellExpressionData The Database for Immune Cell Expression(/eQTLs/Epigenomics)(Schmiedel et al. 2018)(人)
HumanPrimaryCellAtlasData the Human Primary Cell Atlas (Mabbott et al. 2013)(人)
MonacoImmuneData, Monaco Immune Cell Data - GSE107011 (Monaco et al. 2019)(人)
NovershternHematopoieticData Novershtern Hematopoietic Cell Data - GSE24759(人)
ImmGenData the murine ImmGen (Heng et al. 2008) (鼠)
MouseRNAseqData a collection of mouse data sets downloaded from GEO (Benayoun et al. 2019).鼠)

pred<- SingleR(test = norm_count,   #輸入表達(dá)矩陣
               ref = ref,           #參考數(shù)據(jù)
               clusters = scRNA$originalexp_snn_res.0.2,
               labels = ref$label.main)
head(pred)
table(pred$labels)
scRNA$singleR_cluster = pred$labels[match(scRNA$originalexp_snn_res.0.2,
                                          rownames(pred))]
table(scRNA$singleR_cluster)

3喘批、自動(dòng)注釋(已發(fā)表文章作為參考集)-人工檢查

前兩種注釋方法介紹的帖子非常多撩荣,這里主要關(guān)注一下自己用已發(fā)表的文章制作參考集铣揉,然后用singleR做注釋的方法。 參考復(fù)現(xiàn)的是全網(wǎng)介紹最詳細(xì)的 TOP生物信息 的帖子餐曹,參考帖子鏈接如下:

單細(xì)胞輔助注釋工具-SingleR
SingleR如何使用自定義的參考集
使用SingleR包進(jìn)行單細(xì)胞類型注釋分析
【單細(xì)胞】SingleR注釋細(xì)胞類型
學(xué)習(xí)對scRNA-seq數(shù)據(jù)注釋的R包SingleR
Lineage-dependent gene expression programs influence the immune landscape of colorectal cancer

先復(fù)現(xiàn)TOP菌的代碼逛拱,然后找一篇文章自己做一次。


image.png

演示用到的數(shù)據(jù)集來自2020年發(fā)表在Nature Genetics的一篇結(jié)直腸癌研究台猴。文中用到了韓國患者(SMC)和比利時(shí)患者(KUL3)兩套數(shù)據(jù)集朽合,兩套數(shù)據(jù)平行分析,相互印證饱狂。

TOP菌只取了髓系細(xì)胞曹步,用KUL3數(shù)據(jù)集中的髓系細(xì)胞為參考,來注釋SMC里面的髓系細(xì)胞休讳。我這里用的是全部的細(xì)胞做注釋讲婚。

23例韓國大腸癌患者的單細(xì)胞(GSE132465 )
6例比利時(shí)大腸癌患者的單細(xì)胞(GSE144735)

代碼如下:

對應(yīng)TOP菌的 0.R

library(Seurat)
library(tidyverse)
library(data.table)

setwd(dir="D:/SingleR自定義-TOP-0801")

### 表達(dá)數(shù)據(jù)和注釋可以到NCBI下載 ##########
#https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE132465
#https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE144735


#1、這一步是全部的細(xì)胞俊柔,TOP菌只用了髓系細(xì)胞筹麸,比利時(shí)人KUL3的注釋文件
KUL3.anno1=read.table("D:/SingleR自定義-TOP-0801/下載的原始數(shù)據(jù)/GSE144735_processed_KUL3_CRC_10X_annotation.txt/GSE144735_processed_KUL3_CRC_10X_annotation.txt",header = T,sep = "\t",stringsAsFactors = F)
KUL3.all.anno=KUL3.anno1%>%filter(Cell_subtype!="Unknown" & Cell_subtype!="Proliferating")

#2、讀取原始數(shù)據(jù)  fread和read.table是一樣的
mat=fread("D:/SingleR自定義-TOP-0801/下載的原始數(shù)據(jù)/GSE144735_processed_KUL3_CRC_10X_raw_UMI_count_matrix .txt/GSE144735_processed_KUL3_CRC_10X_raw_UMI_count_matrix.txt")
mat=as.data.frame(mat)
rownames(mat)=mat$Index
mat$Index=NULL

#3雏婶、制作KUL3文件
KUL3.all.mat=mat[,KUL3.all.anno$Index]
rm(list = c("KUL3.anno1","mat"))
###################

#4物赶、KUL3的Seurat標(biāo)準(zhǔn)流程
BLS <- CreateSeuratObject(counts = KUL3.all.mat, project = "BLS") %>%
  Seurat::NormalizeData() %>%
  FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>% 
  ScaleData()
BLS <- RunPCA(BLS, npcs = 50, verbose = FALSE)

BLS@meta.data$Index=rownames(BLS@meta.data)
BLS@meta.data=inner_join(BLS@meta.data,KUL3.all.anno,by="Index")
rownames(BLS@meta.data)=BLS@meta.data$Index

BLS <- FindNeighbors(BLS, dims = 1:20)
BLS <- FindClusters(BLS, resolution = 0.5)

BLS <- RunUMAP(BLS, dims = 1:20)
BLS <- RunTSNE(BLS, dims = 1:20)

DimPlot(BLS, reduction = "tsne", group.by = "Cell_subtype", pt.size=2)
DimPlot(BLS, reduction = "tsne", group.by = "Class", pt.size=2)

saveRDS(BLS,file = "KUL3_BLS.rds")


#######################

#5、開始做韓國人的留晚,
SMC.anno1=read.table("D:/SingleR自定義-TOP-0801/下載的原始數(shù)據(jù)/GSE132465_GEO_processed_CRC_10X_cell_annotation.txt/GSE132465_GEO_processed_CRC_10X_cell_annotation.txt",header = T,sep = "\t",stringsAsFactors = F)
SMC.all.anno=SMC.anno1%>%filter(Cell_subtype!="Unknown" & Cell_subtype!="Proliferating")

mat=fread("D:/SingleR自定義-TOP-0801/下載的原始數(shù)據(jù)/GSE132465_GEO_processed_CRC_10X_raw_UMI_count_matrix .txt/GSE132465_GEO_processed_CRC_10X_raw_UMI_count_matrix.txt",select = c("Index",SMC.all.anno$Index))
mat=as.data.frame(mat)
rownames(mat)=mat$Index
mat$Index=NULL

SMC.all.mat=mat[,SMC.all.anno$Index]
rm(list = c("SMC.anno1","mat")
###################
Han <- CreateSeuratObject(counts = SMC.all.mat, project = "Han") %>%
  Seurat::NormalizeData() %>%
  FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>% 
  ScaleData()
Han <- RunPCA(Han, npcs = 50, verbose = FALSE)

對應(yīng)TOP菌的 1.R

library(Seurat)
library(tidyverse)
library(SummarizedExperiment)
library(scuttle)

KUL3_BLS=readRDS("KUL3_BLS.rds")
KUL3_BLS_count=KUL3_BLS[["RNA"]]@counts  #提取counts矩陣

#準(zhǔn)備注釋信息
pdata=KUL3_BLS@meta.data[,c("Index","Cell_subtype")]
rownames(pdata)=pdata$Index
pdata$Index=NULL
colnames(pdata)="ref_label"

KUL3_BLS_SE <- SummarizedExperiment(assays=list(counts=KUL3_BLS_count),colData = pdata)
KUL3_BLS_SE <- logNormCounts(KUL3_BLS_SE) #Compute log-transformed normalized expression values #參考集一定是logcounts的數(shù)據(jù)

saveRDS(KUL3_BLS_SE,"KUL3_BLS_SE.ref.rds")

對應(yīng)TOP菌的 2.R

library(tidyverse)
library(Seurat)
library(SingleR)
library(scuttle)
library(SummarizedExperiment)

KUL3_BLS_SE=readRDS("KUL3_BLS_SE.ref.rds")  #導(dǎo)入?yún)⒖技?SMC_Han=readRDS("SMC_Han.rds")  #待查詢的數(shù)據(jù)集酵紫,韓國人的

#下面開始是構(gòu)建待查詢數(shù)據(jù)集的SE對象
SMC_Han_count=SMC_Han[["RNA"]]@counts  # 導(dǎo)出表達(dá)矩陣counts

# 下面這三行是把帶查詢和參考數(shù)據(jù)集 取交集,注釋的方法依賴的就是交集基因
common_gene <- intersect(rownames(SMC_Han_count), rownames(KUL3_BLS_SE))
KUL3_BLS_SE <- KUL3_BLS_SE[common_gene,]
SMC_Han_count <- SMC_Han_count[common_gene,]

SMC_Han_SE <- SummarizedExperiment(assays=list(counts=SMC_Han_count)) #創(chuàng)建SE對象
SMC_Han_SE <- logNormCounts(SMC_Han_SE)   # 對創(chuàng)建SE對象倔丈,做logNormCounts處理

#開始SingleR注釋: labels參數(shù)的意思是:用參考集里面的說明labels去做注釋,
#由于制作的參考集只有ref_label(用$符號就可以看)一個(gè)憨闰,如果用SingleR自帶的包的話状蜗,可能有2個(gè)需五、3個(gè)labels。例如SingleR的 main大類轧坎、fine小類宏邮。  
singleR_res <- SingleR(test = SMC_Han_SE, ref = KUL3_BLS_SE, labels = KUL3_BLS_SE$ref_label) 

anno_df <- as.data.frame(singleR_res$labels) #將labels轉(zhuǎn)換成數(shù)據(jù)框
anno_df$Index <- rownames(singleR_res)  #給數(shù)據(jù)框加行名
colnames(anno_df)[1] <- 'ref_label_from_KUL3'  # 換列名


#把得到的注釋信息整合到seurat對象里面
SMC_Han@meta.data=SMC_Han@meta.data%>%inner_join(anno_df,by="Index")   # 屬性數(shù)據(jù)庫和anno_df有公共列Index
rownames(SMC_Han@meta.data)=SMC_Han@meta.data$Index                    #屬性數(shù)據(jù)框是沒有行名的,再把Index賦給行名

DimPlot(SMC_Han, reduction = "tsne", group.by = "Cell_subtype", pt.size=2)+
DimPlot(SMC_Han, reduction = "tsne", group.by = "ref_label_from_KUL3", pt.size=2)

最后結(jié)果:

可以看到用比利時(shí)人KUL3注釋的缸血,和作者手動(dòng)注釋的結(jié)果差不多蜜氨。 TOP菌提到的一個(gè)很關(guān)鍵的因素就是:比利時(shí)人也就是參考集的細(xì)胞比較少,然后要注釋的韓國人組的細(xì)胞多捎泻,這樣可能不太好飒炎。最好是參考集的細(xì)胞數(shù)比待注釋的細(xì)胞多情況下比較準(zhǔn)確。

還有一個(gè)要解決的問題就是:看了很多帖子說可以同時(shí)參考幾個(gè)參考集笆豁,然后去注釋郎汪,這樣更準(zhǔn)確赤赊。但是沒找到詳細(xì)的參考資料。

作者手動(dòng)注釋的圖
用KUL3比利時(shí)人注釋的
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煞赢,一起剝皮案震驚了整個(gè)濱河市抛计,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌照筑,老刑警劉巖吹截,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凝危,居然都是意外死亡波俄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門媒抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟断,“玉大人,你說我怎么就攤上這事趴生》浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵苍匆,是天一觀的道長刘急。 經(jīng)常有香客問我,道長浸踩,這世上最難降的妖魔是什么叔汁? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮检碗,結(jié)果婚禮上据块,老公的妹妹穿的比我還像新娘。我一直安慰自己折剃,他們只是感情好另假,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怕犁,像睡著了一般边篮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奏甫,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天戈轿,我揣著相機(jī)與錄音,去河邊找鬼阵子。 笑死思杯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挠进。 我是一名探鬼主播色乾,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腾么,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杈湾?” 一聲冷哼從身側(cè)響起解虱,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漆撞,沒想到半個(gè)月后殴泰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浮驳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年悍汛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片至会。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡离咐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奉件,到底是詐尸還是另有隱情宵蛀,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布县貌,位于F島的核電站术陶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏煤痕。R本人自食惡果不足惜梧宫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摆碉。 院中可真熱鬧塘匣,春花似錦、人聲如沸巷帝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锅睛。三九已至埠巨,卻和暖如春历谍,著一層夾襖步出監(jiān)牢的瞬間现拒,已是汗流浹背黍聂。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工衷掷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人基显。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓脱衙,卻偏偏與公主長得像侥猬,于是被迫代替她去往敵國和親例驹。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容