简介
NMF又称之为非负矩阵分解,可以理解为又一种降维聚类的方法,常常运用于单细胞分群,癌症RNA-seq数据分群等运用中,下图即是NMF分解的示意图:
其中:V矩阵是一个n×m的矩阵,W为n×k的矩阵,H为m×k的矩阵;而分解出来的 k 可以理解为所分出来的 k 个亚群(当然 W 矩阵的 k 与 H 矩阵的 k 的含义有一定区别,后续会举例子说明)
在R中实现
在R中完成NMF分解有两种方式,第一种利用R包NMF可以完成:
# random data
x <- rmatrix(20,10)
# run default algorithm with rank 3
res <- nmf(x, 3)
其中 rank 可以理解为矩阵分解后的 k ,即你要区分出来的亚群数量
如果是单细胞数据,还有一种方式是通过seurat选择降维方法来完成
# 提取单细胞标准化的data
vm <- data@assays$RNA@scale.data
res = nmf(vm,16)
# 将nmf对象注入到seurat中
data@reductions$nmf <- data@reductions$pca
data@reductions$nmf@cell.embeddings <- t(coef(res))
data@reductions$nmf@feature.loadings <- basis(res)
## 其中coef(res)为 H 矩阵,basis(res) 为 W 矩阵
data_reduction <- RunUMAP(pbmc, reduction = 'nmf', dims = 1:16) %>%
FindNeighbors(reduction = 'nmf', dims = 1:16) %>%
FindClusters()
举例
之前我们说过NMF的分解图:
在单细胞领域可以理解为,有n个基因,m个cell,并进行NMF分解,W矩阵可理解为:
有n个基因,k个cell clusters;而H矩阵可理解为:
在向量空间中有 m 个细胞,H 矩阵的每一列代表该细胞的 k 维坐标,因此 H 矩阵可以理解为 V 矩阵投影到低维空间的点坐标;即如果我们用NMF降维聚类并在二维平面上可视化时,H 矩阵的 k 维坐标取贡献最大的前两维即可;在seurat代码中有:
# 将nmf对象注入到seurat中
data@reductions$nmf <- data@reductions$pca
data@reductions$nmf@cell.embeddings <- t(coef(res))
data@reductions$nmf@feature.loadings <- basis(res)
## 其中coef(res)为 H 矩阵,basis(res) 为 W 矩阵
那么 cell.embeddings 就是降维后每个细胞的坐标;而 feature.loadings 可以理解为一种权重
网友评论