非負(fù)矩陣分解(NMF)應(yīng)用于scRNAseq的細(xì)胞分群

NMF算法簡介

非負(fù)矩陣分解(Non-negative Matrix Factorization, NMF)的思想可以描述為量蕊,對(duì)于任意給定的一個(gè)非負(fù)矩陣V痰洒,NMF算法能夠找到一個(gè)非負(fù)矩陣W和一個(gè)非負(fù)矩陣H哨查,使得非負(fù)矩陣V≈W*H 成立 回俐,從而將一個(gè)非負(fù)的矩陣分解為左右兩個(gè)非負(fù)矩陣的乘積吹艇。

利用矩陣分解來解決實(shí)際問題的分析方法很多麦牺,如PCA(主成分分析)钮蛛、ICA(獨(dú)立成分分析)、SVD(奇異值分解)等剖膳。在這些方法中魏颓,原始的大矩陣V被近似分解為低秩的V=WH形式。這些方法的共同特點(diǎn)是吱晒,即使輸入的初始矩陣元素是全正的甸饱,傳統(tǒng)的秩削減算法也不能保證原始數(shù)據(jù)的非負(fù)性,因子W和H中的元素往往含有負(fù)值元素仑濒。從數(shù)學(xué)和計(jì)算的觀點(diǎn)看叹话,分解結(jié)果中存在負(fù)值沒有問題,但負(fù)值元素在實(shí)際問題中往往是沒有意義的躏精。NMF約束了原始矩陣V和分解矩陣W渣刷、H的非負(fù)性,這就意味著只能通過特征的相加來實(shí)現(xiàn)原始矩陣V的還原矗烛,最終導(dǎo)致的結(jié)果是:非負(fù)性會(huì)引發(fā)稀疏辅柴,非負(fù)性會(huì)使計(jì)算過程進(jìn)入部分分解。

非負(fù)矩陣分解在單細(xì)胞數(shù)據(jù)分析中的主要應(yīng)用:
1. 非負(fù)矩陣分解在做亞群細(xì)分和提取feature的時(shí)候是一個(gè)非常有效的工具瞭吃。
2. 多樣本整合碌嘀,LIGER中用的是非負(fù)矩陣分解
3. CellChat做細(xì)胞通訊也用到了非負(fù)矩陣
4. 空間轉(zhuǎn)錄組去卷積工具SPOTlight也用到了NMF

使用NMF對(duì)scRNAseq的細(xì)胞進(jìn)行分群操作

1. 讀取數(shù)據(jù),重新構(gòu)建Seurat對(duì)象歪架,保存矩陣和metadata信息股冗,去除降維信息

??這里使用pbmc數(shù)據(jù)集來演示NMF做細(xì)胞分群,實(shí)際上NMF在對(duì)亞群細(xì)分提取feature時(shí)候效果更好和蚪,對(duì)亞群定義很有幫助止状。

library(NMF)
library(Seurat)
pbmc <- readRDS("pbmc.rds")
pbmc <- CreateSeuratObject(pbmc@assays$RNA@counts, 
                           meta.data = pbmc@meta.data)
2. NMF

重新進(jìn)行標(biāo)準(zhǔn)化和歸一化烹棉,注意設(shè)置do.center = F,這樣就不會(huì)得到負(fù)值
在做nmf時(shí)怯疤,rank值可以選的比目的預(yù)期的細(xì)胞類型/細(xì)胞狀態(tài)稍微大一些的值浆洗,因?yàn)榉纸獾囊恍┮蜃訒?huì)富集到線粒體核糖體等噪音,而不會(huì)落到一個(gè)具體的細(xì)胞亞群上面集峦。(這里選了12)

pbmc <- NormalizeData(pbmc) %>% FindVariableFeatures() %>% ScaleData(do.center = F) 
vm <- pbmc@assays$RNA@scale.data
saveRDS(vm, file = "pbmc_vm.rds")
res <- nmf(vm, 12, method = "snmf/r")  #很慢
save(res, file = "pbmc_nmf_res.rda")
3. Extract cluster top loading features(提取分解得到的每個(gè)因子)

??:被非負(fù)矩陣分解出來的一些marker基因伏社,一般是很有生物學(xué)意義的基因(因此適合于亞群細(xì)分和提取feature,便于細(xì)胞亞群注釋)

# 每個(gè)因子提取30個(gè)
fs <- extractFeatures(res, 30L)
fs <- lapply(fs, function(x) rownames(res)[x])
fs <- do.call("rbind", fs)
rownames(fs) <- paste0("cluster", 1:12)
write.csv(t(fs), "pb,c_NMF_TopGenes.csv")
DT::datatable(t(fs))
分解的每個(gè)因子所對(duì)應(yīng)的topmarker塔淤。這些topmarker并不是FindMarker找出來的摘昌,但是和傳統(tǒng)的降維聚類尋找marker的方法相比,NMF找出來的topmarker往往更具有生物學(xué)意義高蜂。
4. 選擇用于后續(xù)分析的因子聪黎,使用NMF運(yùn)行的結(jié)果進(jìn)行降維和聚類
### 選擇用于后續(xù)分析的因子
s.f <- 1:12   # 因子 1 主要是線粒體和核糖體

## 降維
cell1 <- colnames(pbmc)
cell2 <- colnames(coef(res))
cells <- intersect(cell1, cell2)
pbmc <- pbmc[,cells]
pbmc <- RunPCA(pbmc, verbose = F)
pbmc@reductions$nmf <- pbmc@reductions$pca
pbmc@reductions$nmf@cell.embeddings <- t(coef(res)[,cells])    
pbmc@reductions$nmf@feature.loadings <- basis(res)  
pbmc <- RunUMAP(pbmc, reduction='nmf', dims=s.f)

## 基于NMF降維矩陣的聚類
pbmc <- FindNeighbors(pbmc, reduction='nmf', dims=s.f) %>% FindClusters()

## 基于因子最大載荷分類
pbmc$cluster <- apply(NMF::coefficients(res)[s.f,], 2, which.max)
5. 降維聚類結(jié)果可視化
p1 <- DimPlot(pbmc, label = T) + ggtitle("Clustered by Louvain")
p2 <- DimPlot(pbmc, group.by = "cluster", label = T) + ggtitle("Clustered by max loading")
pc <- p1|p2
ggsave("pbmc_NMF_Cluster.pdf", pc, width = 10, height = 5)
左圖是Seurat的算法進(jìn)行聚類的,右圖是基于NMF重新降維聚類的結(jié)果妨马,12個(gè)群是非負(fù)矩陣分出的12個(gè)因子(12是前面做nmf時(shí)挺举,rank值定義的)
FeaturePlot(pbmc, features = c("CD8A","CD8B","CD3D","CD4","GZMA","NKG7"), ncol = 3)
saveRDS(pbmc, "pbmc_NMF.rds")

注意:
如果細(xì)胞數(shù)比較多,在做NMF時(shí)烘跺,用于做非負(fù)矩陣分解的高變基因選擇6000個(gè)左右比較合適湘纵,沒有必要用全部基因來做。(這里演示用了2000個(gè))
NMF運(yùn)行很慢滤淳,在做大群定義結(jié)果和Seurat相差也不大梧喷,因此做大群定義的時(shí)候沒有必要使用NMF。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載脖咐,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者铺敌。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屁擅,隨后出現(xiàn)的幾起案子偿凭,更是在濱河造成了極大的恐慌,老刑警劉巖派歌,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弯囊,死亡現(xiàn)場離奇詭異,居然都是意外死亡胶果,警方通過查閱死者的電腦和手機(jī)匾嘱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來早抠,“玉大人霎烙,你說我怎么就攤上這事。” “怎么了悬垃?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵游昼,是天一觀的道長。 經(jīng)常有香客問我盗忱,道長酱床,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任趟佃,我火速辦了婚禮,結(jié)果婚禮上昧捷,老公的妹妹穿的比我還像新娘闲昭。我一直安慰自己,他們只是感情好靡挥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布序矩。 她就那樣靜靜地躺著,像睡著了一般跋破。 火紅的嫁衣襯著肌膚如雪簸淀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天毒返,我揣著相機(jī)與錄音租幕,去河邊找鬼。 笑死拧簸,一個(gè)胖子當(dāng)著我的面吹牛劲绪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盆赤,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贾富,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了牺六?” 一聲冷哼從身側(cè)響起颤枪,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淑际,沒想到半個(gè)月后畏纲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庸追,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年霍骄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淡溯。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡读整,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咱娶,到底是詐尸還是另有隱情米间,我是刑警寧澤强品,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站屈糊,受9級(jí)特大地震影響的榛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逻锐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一夫晌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昧诱,春花似錦晓淀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜈亩,卻和暖如春懦窘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稚配。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國打工畅涂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人药有。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓毅戈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愤惰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苇经,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

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