10X單細胞(10X空間轉(zhuǎn)錄組)數(shù)據(jù)分析之NMF(非負矩陣分解)

今天我們來學習一個簡單的數(shù)學內(nèi)容票顾,NMF

NMF算法簡介

NMF是什么挽拂?

圖片
非負矩陣分解(Non-negative Matrix Factorization, NMF)本質(zhì)上說是一種矩陣分解的方法蝇更,對于任意給定的一個非負矩陣V余掖,NMF算法能夠?qū)ふ业揭粋€非負矩陣W和一個非負矩陣H祭陷,使得 V≈W*H 成立 峦椰,從而將一個非負的矩陣分解為左右兩個非負矩陣的乘積。

NMF的特點壁拉?

NMF最重要的特點是非負性約束谬俄。

矩陣分解的方法有很多種,如奇異值分解 (singular value decomposition, SVD) 扇商、獨立成分分析 (independent component analysis, ICA) 凤瘦、主成分分析 (principal component analysis, PCA) 等。這些方法的共同特點是案铺,即使初始矩陣 V 元素是非負的蔬芥,分解出來的因子 W 和 H 中的元素往往含有負值元素。從計算科學的角度來看控汉,分解出來的因子 W 和 H 中的元素含有負值元素并沒有問題笔诵, 但負值元素通常是無法解釋的。NMF約束了原始矩陣V和分解矩陣W姑子、H的非負性乎婿,這就意味著只能通過特征的相加來實現(xiàn)原始矩陣V的還原,最終導致的結(jié)果是:
  • 非負性會引發(fā)稀疏
  • 非負性會使計算過程進入部分分解

給大家對比一下PCA與NMF分解圖像的效果:

圖片.png
PCA分解之后街佑,每個主成分(PC)都會保留與其他PC不正交的全局特征谢翎,并且PC保留的特征是遞減的。
圖片.png
NMF分解之后沐旨,每個因子保留的都是局部特征森逮,它們的權重是基本平等的。通過這張圖可以看出磁携,很多因子能與面部特征一一對應起來褒侧,例如鼻子、眼睛谊迄、嘴巴都能找到相應的因子闷供。

NMF在單細胞研究中的優(yōu)勢

單細胞研究避免不了要回答兩個問題:組織中有哪些細胞類型,每個細胞類型又有哪些表達模式统诺?NMF解決這類問題具有天然的優(yōu)勢歪脏,因為它分解的因子很容易與細胞類型或表達模式對應起來。Github上有很多基于NMF和其變種算法的單細胞分析工具粮呢,我比較喜歡的有單細胞整合分析工具liger和空間轉(zhuǎn)錄組去卷積工具SPOTlight唾糯。應用NMF分析方法發(fā)表的高分文章也有很多怠硼,我給大家介紹一篇,更多的文章請自己搜索移怯。

Chen, YP., Yin, JH., Li, WF. et al. Single-cell transcriptomics reveals regulators underlying immune cell diversity and immune subtypes associated with prognosis in nasopharyngeal carcinoma. Cell Res 30, 1024–1042 (2020). https://doi.org/10.1038/s41422-020-0374-x

基礎NMF包的安裝與用法簡介

安裝NMF基礎包

BiocManager::install('Biobase')

nmf函數(shù)簡介

NMF包通過nmf()函數(shù)實現(xiàn)矩陣分解,它的用法及重要參數(shù)如下:

nmf(x, rank, method, seed, nrun, ...)
rank值一般是要通過測試評估后確定的这难,但是分析單細胞數(shù)據(jù)這是一個很難完成的工作舟误,5000個細胞的測試時間可能超過10個小時。替代辦法是使用經(jīng)驗或先驗知識指定姻乓,可以嘗試略多于細胞類型或細胞狀態(tài)(細胞亞群再聚類時)的一個數(shù)值嵌溢,例如我在本帖的PBMC數(shù)據(jù)分解中就指定為rank=10。因為NMF一般是從隨機數(shù)開始蹋岩,通過迭代算法收斂誤差的方法求出最優(yōu)W和H矩陣赖草,所以seed不同最后的結(jié)果也不同。為了減少seed的影響求得最優(yōu)解剪个,常規(guī)的辦法是通過nrun參數(shù)設置運行100-200次矩陣分解選取最優(yōu)值秧骑,也可以使用特殊的算法選擇一個最佳的seed(設置seed='nndsvd'或seed='ica'),這樣運行一次也能得到最優(yōu)解扣囊。下面我們測試一下不同方法的運行時間:
library(Biobase)

10X PBMC數(shù)據(jù)實測

測試數(shù)據(jù)

測試數(shù)據(jù)來源于10x genomics官網(wǎng)的示例數(shù)據(jù)集乎折。
圖片
數(shù)據(jù)下載鏈接:https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3_nextgem/5k_pbmc_v3_nextgem_filtered_feature_bc_matrix.h5

保存文件名:pbmc.h5

基于PCA分解的降維聚類

library(Seurat)
圖片
圖片

基于NMF分解的降維聚類

## 高變基因表達矩陣的分解
# pbmc大體可分成T,B侵歇,NK骂澄,CD14+Mono,CD16+Mono惕虑,DC坟冲,Platelet等類型,考慮冗余后設置rank=10
vm <- pbmc@assays$RNA@scale.data
res <- nmf(vm, 10, method = "snmf/r", seed = 'nndsvd') 
runtime(res)
#    用戶     系統(tǒng)     流逝 
#1063.147   78.019 1139.831 

## 分解結(jié)果返回suerat對象
pbmc@reductions$nmf <- pbmc@reductions$pca
pbmc@reductions$nmf@cell.embeddings <- t(coef(res))    
pbmc@reductions$nmf@feature.loadings <- basis(res)  

## 使用nmf的分解結(jié)果降維聚類
set.seed(219)
pbmc.nmf <- RunUMAP(pbmc, reduction = 'nmf', dims = 1:10) %>% 
  FindNeighbors(reduction = 'nmf', dims = 1:10) %>% FindClusters()

## 結(jié)果可視化  
p <- DimPlot(pbmc.nmf, label = T) + ggsci::scale_color_igv()
ggsave("pbmc_nmf.png", p, width = 9, height = 6)
p <- FeaturePlot(pbmc.nmf, features = c('CD3D', 'CD3E', 'MS4A1', 'CD79A', 'GNLY', 'NKG7', 'CD14', 
                                        'FCGR3A', 'PPBP', 'FCER1A', 'CD4', 'CD8A'), ncol = 4)
ggsave("pbmc_nmf_markers.png", p, width = 12, height = 8)

圖片.png
圖片

NMF因子可解釋性探索

對比PCA分析的結(jié)果溃蔫,NMF雖然毫不遜色健提,但是它的運行時間更長,我們?yōu)槭裁匆肗MF呢酒唉?一個很重要的原因是NMF的因子可解釋性更強矩桂,每個因子貢獻度最大的基因基本代表了某種或某個狀態(tài)細胞的表達模式,相比差異分析得到marker基因更有代表性痪伦。

NMF因子與細胞類型的關系

## 人工定義細胞類型
pbmc.nmf$celltype <- pbmc.nmf$seurat_clusters
pbmc.nmf$celltype <- recode(pbmc.nmf$celltype,
                            '1' = "B cells", 
                            '5' = "NKs", 
                            '10' = "CD8+ T", 
                            '6' = "CD8+ T", 
                            '4' = "CD4+ T",
                            '9' = "CD4+ T", 
                            '0' = "CD4+ T", 
                            '3' = "CD4+ T", 
                            '7' = "CD4+ T", 
                            '2' = "CD14+ Mono",
                            '8' = "CD14+ Mono", 
                            '11' = "CD16+ Mono", 
                            '12' = "DCs", 
                            '13' = "Platelet", 
                            '14' = "Unknown")
p <- DimPlot(pbmc.nmf, group.by = 'celltype', label = T, label.size = 3) + ggsci::scale_color_npg(alpha = 0.6)
ggsave("pbmc_nmf_celltype.png", p, width = 9, height = 6)

## 查看細胞因子上的荷載
tmp <- data.frame(t(coef(res)), check.names = F)
colnames(tmp) <- paste0("factor", 1:10)
pbmc.nmf <- AddMetaData(pbmc.nmf, metadata = tmp)
p <- FeaturePlot(pbmc.nmf, features = paste0("factor", 1:10), ncol = 4)
ggsave("pbmc_nmf_factors.png", p, width = 12, height = 8)

## 查看細胞主成分上的荷載
p <- FeaturePlot(pbmc.nmf, features = paste0("PC_", 1:12), ncol = 4)
ggsave("pbmc_nmf_PCs.png", p, width = 12, height = 8)
人工鑒定的細胞類型
圖片
細胞在因子上的值
圖片
細胞在PC軸上的值
圖片.png
對比上下兩張圖侄榴,很容易發(fā)現(xiàn)NMF的因子比PCA的PC軸解釋性更強。

提取celltype的signatures

## 提取每個因子貢獻度最大的20個基因
f <- extractFeatures(res, 20L)
f <- lapply(f, function(x) rownames(res)[x])
f <- do.call("rbind", f)
DT::datatable(t(f))
圖片

NMF的10個因子中网沾,很容易發(fā)現(xiàn)我們對細胞進行分類的marker基因癞蚕,是不是很神奇?

生活很好辉哥,等你超越

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載桦山,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者攒射。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恒水,隨后出現(xiàn)的幾起案子会放,更是在濱河造成了極大的恐慌,老刑警劉巖钉凌,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咧最,死亡現(xiàn)場離奇詭異,居然都是意外死亡御雕,警方通過查閱死者的電腦和手機矢沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酸纲,“玉大人捣鲸,你說我怎么就攤上這事∶銎拢” “怎么了栽惶?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長无午。 經(jīng)常有香客問我媒役,道長,這世上最難降的妖魔是什么宪迟? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任酣衷,我火速辦了婚禮次泽,結(jié)果婚禮上穿仪,老公的妹妹穿的比我還像新娘意荤。我一直安慰自己啊片,他們只是感情好玖像,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布紫谷。 她就那樣靜靜地躺著,像睡著了一般捐寥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞒窒,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音乡洼,去河邊找鬼崇裁。 笑死匕坯,一個胖子當著我的面吹牛拔稳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壳炎,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匿辩!你這毒婦竟也來了榛丢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤晰赞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掖鱼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡戏挡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拆檬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡竟贯,死狀恐怖逝钥,靈堂內(nèi)的尸體忽然破棺而出屑那,到底是詐尸還是另有隱情艘款,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布磷箕,位于F島的核電站,受9級特大地震影響岳枷,放射性物質(zhì)發(fā)生泄漏呜叫。R本人自食惡果不足惜殿衰,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闷祥。 院中可真熱鬧,春花似錦凯砍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽座泳。三九已至惠昔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挑势,已是汗流浹背镇防。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潮饱,地道東北人来氧。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓饼齿,卻偏偏與公主長得像饲漾,于是被迫代替她去往敵國和親缕溉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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