前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言实现非负矩阵分析

R语言实现非负矩阵分析

作者头像
一粒沙
发布于 2019-07-31 06:34:13
发布于 2019-07-31 06:34:13
6.6K30
代码可运行
举报
文章被收录于专栏:R语言交流中心R语言交流中心
运行总次数:0
代码可运行

著名的科学杂志《Nature》于1999年刊登了两位科学家D.D.Lee和H.S.Seung对数学中非负矩阵研究的突出成果。该文提出了一种新的矩阵分解思想――非负矩阵分解(Non-negative Matrix Factorization,NMF)算法,即NMF是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。

上图引自网络(有出处请告知),NMF的思想:V=WH(W权重矩阵、H特征矩阵、V原矩阵),通过计算从原矩阵提取权重和特征两个不同的矩阵出来。属于一个无监督学习的算法,其中限制条件就是W和H中的所有元素都要大于0。

今天我们给大家讲下在R语言中是如何实现的。先来看下NMF包的安装。这个有点麻烦,我们首先必须要把我们的R版本升级到3.6及以上,因为有个rngtools的依赖包所需要的环境是3.6及以上。

另外,Biobase包需要从Bioconductor进行安装需要在安装NMF前安装好,如果没有安装则会显示下面信息:

以上都按照要求安装好后则会出现下面的成果信息:

那么接下来我们运行下NMF自带的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
meth <- nmfAlgorithm(version='R')
meth <- c(names(meth), meth)
meth
data(esGolub)
res <- nmf(esGolub, 3, meth,seed=123456)

接下来我们看下nmf函数的主要参数:

Rank:就是因式分解的级别。其中自带了计算最优等级的函数nmfEstimateRank:

其中重要参数:Range:等级的分布范围。例seq(1,5);Method:就是NMF算法的选择;Nrun:范围内每个值的迭代次数;Model:如果有已经构建好的模型,那就是直接把模型写在这里,优化等级计算。构建模型的函数是nmfModel(rank,c(features,samples))或者是nmfModel(rank,data,W,H)。

Methods:就是对应的NMF中的算法。

.options 中可以设置是否保留每次的运算结果:keep.all=T。例:.options=list(keep.all=TRUE);如果设置parallel – p则可以让函数进行并行运算(例p1,p2)。如果在4个以内可以自行调内部函数解决:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res1 <- nmf(esGolub, 3, nrun=5,.opt='vp2', seed=123)

当大于4的时候就需要载入并行包doMPI。在这我们就不去细讲了。如果需要可以参考下提供的实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(doMPI)
cl <- startMPIcluster()
registerDoMPI(cl)
library(NMF)
# run on all workers using the currentparallel backend
data(esGolub)
res <- nmf(esGolub, 3, 'brunet', nrun=n,.opt='p', .pbackend=NULL)
17http://cran.r-project.org/package=doMPI
17
# save result
save(res, file='result.RData')
## 4. Shutdown the cluster and quit MPI
closeCluster(cl)
mpi.quit()

接下来是结果的可视化展示:

评估结果的绘制:

首先构建需要评估的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
estim.r <- nmf(esGolub, 2:6, nrun=10,seed=123456)
plot(estim.r)

当然我们也可以只提取里面的任何一个数据然后绘制图像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
coph <- estim.r$measures$cophenetic
plot(2:6,coph, type="b",col="purple")

判断最佳rank值的准则就是,cophenetic值随K变化的最大变动的前点,如4-5变化最大,所以选择最佳rank值为4。

有时候我们可能需要对多个等级进行对比然后选择适合我们模型的等级,那么可视化将会帮助我们大忙。例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
V.random <- randomize(esGolub)
# estimate quality measures from theshuffled data (use default NMF algorithm)
estim.r.random <- nmf(V.random, 2:6,nrun=10, seed=123456)
# plot measures on same graph
plot(estim.r, estim.r.random)

热图的绘制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
consensusmap(estim.r, annCol=esGolub,labCol=NA, labRow=NA)

热图反映了对应的等级的选择最后所展示的聚类效果,从图中rank=4我们可以看出其聚类的情况最接近实际情况,当然这个图你是看不出来了,自己绘制下,得放大了看。

误差追踪主要是为了帮我们筛选适合我们的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res <- nmf(esGolub, 3, .options='t')
 
res.multi.method <- nmf(esGolub, 3,list('brunet', 'lee', 'ns'), seed=123456, .options='t')

compare(res.multi.method)#对比各模型计算的参数:
 
compare(res.multi.method,$Cell)#当然也可以选择其中子数据进行评估。

接下来就是误差追踪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot(res)
plot(res.multi.method)

那么,我们的W,H在哪呢,我们最后还是需要我们的特征向量。如下参数可以获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res@fit@H

那接下来就可以去拿特征向量去做自己的研究了。

至此我们就可以筛选到属于我们的最优模型以及最优rank。那么我们总结下具体的一个流程:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
3 条评论
热度
最新
请问对nrun的设置怎么选择呢,nrun的选择是不是对矩阵分解的效果有影响?
请问对nrun的设置怎么选择呢,nrun的选择是不是对矩阵分解的效果有影响?
22点赞举报
那个要靠经验
那个要靠经验
回复回复点赞举报
那按照您的经验,对于530列,1500行的矩阵,nrun设置为多少分解效果比较好
那按照您的经验,对于530列,1500行的矩阵,nrun设置为多少分解效果比较好
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
基于R语言利用NMF(非负矩阵分解)替代层次聚类进行肿瘤分型
随着芯片和测序水平的发展,使得我们研究所有基因在整个基因组里的表达情况成为了可能。合理地利用和解释这些数据,能够帮助我们探索相关的生物过程和人类疾病的机制。目前已经有一些软件或方法,可以将具有相似表达模式的基因或者样本进行聚类,但是都有自身的限制。NMF包基于非负矩阵分解(non-negative matrix factorization,以下简称NMF)方法,提取基因表达矩阵内数据的生物相关系数,通过对基因和样本进行组织,抓住数据的内部结构特征,从而对样本进行分组,目前在疾病分型方面受到广泛应用。我前面已经介绍过了NMF的基本原理【NMF(非负矩阵分解)的算法原理】,这里我介绍R语言实现NMF。下面是一篇今年刚发的一篇纯生信的分析文章,用的就是NMF这个方法来对肿瘤进行分型。影响因子为4.8。
DoubleHelix
2022/01/19
20.1K0
基于R语言利用NMF(非负矩阵分解)替代层次聚类进行肿瘤分型
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
肿瘤分型分析是生信文章中的常客,大致是通过将基因的表达量进行聚类或者非负矩阵分解,发现新的亚型,然后对不同亚型的临床特征,免疫特征等进行比较分析,文章末尾简单的列了一些应用。
生信补给站
2023/08/25
6K2
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
使用NMF代替层次聚类
前面我们在教程:使用R包deconstructSigs根据已知的signature进行比例推断,顺利的把508个病人,根据11个signature进行了比例推断,得到的比例矩阵以普通的热图,以及pheatmap包自带的层次聚类如下:
生信技能树
2020/06/09
3.2K0
转录组非负矩阵分解(NMF)/一致性聚类(ConsensusClusterPlus)
非负矩阵分解(NMF)和一致性聚类(ConsensusClusterPlus)是两种常用的聚类和模式识别方法,它们在算法原理、使用场景和结果解读上都有相似和不同之处。这两种代码流程已经被诸多老师所解析和展示,本次也是跟着老师们发布在网上的流程进行练习和整理。
凑齐六个字吧
2024/08/13
7720
转录组非负矩阵分解(NMF)/一致性聚类(ConsensusClusterPlus)
使用MutationalPatterns进行肿瘤突变频谱分析
MutationalPatterns是一个bioconductor上的R包,可以用于肿瘤突变频谱的分析。肿瘤突变频谱针对点突变进行定义,A,T,C,G四种碱基两两突变,共有4X3=12种排列,考虑到正负链碱基配对原则,正链上的A->C突变,对应负链上为T->G, 所以进一步转换成了一个组合的问题,所以某个位点的突变可以划分为以下6种模式
生信修炼手册
2019/12/19
3K1
使用MutationalPatterns进行肿瘤突变频谱分析
基于非负矩阵分解的单细胞降维聚类分群
可以看到,在CD4和CD8的T细胞的各自矩阵内部降维聚类分群,这6个细分亚群都并不是泾渭分明的界限。听完分享才知道,原来作者这个时候的细分亚群其实并不关心它们内部是不是有不同的独立的单细胞亚群,仅仅是有这6个不同状态或者说发挥不同功能单细胞亚群。而区分它们的手段是非负矩阵分解,并不需要有很清晰的界限,只需要各个亚群的核心功能基因集有差异即可。
生信技能树
2022/03/03
3.1K0
基于非负矩阵分解的单细胞降维聚类分群
单细胞分析十八般武艺:NMF
非负矩阵分解(Non-negative Matrix Factorization, NMF)本质上说是一种矩阵分解的方法,对于任意给定的一个非负矩阵V,NMF算法能够寻找到一个非负矩阵W和一个非负矩阵H,使得 V≈W*H成立 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。
生信技能树jimmy
2021/03/25
13.3K0
单细胞分析十八般武艺:NMF
使用 sigminer 进行突变模式分析
突变模式分析(Mutual Signature Analysis)已经逐步成为变异检测后一个通用分析,本文简单介绍如何使用sigminer进行突变模式分析,以解决2大分析任务:
生信菜鸟团
2020/06/10
2.1K0
使用 sigminer 进行突变模式分析
推荐算法——非负矩阵分解(NMF)
在博文推荐算法——基于矩阵分解的推荐算法中,提到了将用户-商品矩阵进行分解,从而实现对未打分项进行打分。矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积。对于上述的用户-商品矩阵(评分矩阵),记为Vm×nV_{m\times n},可以将其分解成两个或者多个矩阵的乘积,假设分解成两个矩阵Wm×kW_{m\times k}和Hk×nH_{k\times n},我们要使得矩阵Wm×kW_{m\times k}和Hk×nH_{k\times n}的乘积能够还原原始的矩阵Vm×nV_{m\times n}:
felixzhao
2019/02/13
1.5K0
【机器学习】NMF(非负矩阵分解)
  本篇文章主要介绍NMF算法原理以及使用sklearn中的封装方法实现该算法,最重要的是理解要NMF矩阵分解的实际意义,将其运用到自己的数据分析中!
全栈程序员站长
2022/07/04
1.8K0
【机器学习】NMF(非负矩阵分解)
R语言实现突变信号(Mutational Signatures)分析
突变信号(Mutational Signatures)首次2013年在《nature》进行报道。并做了相关的定义:细胞在成长过程中,基因组不断受到内源性和外源性DNA损伤的威胁,正是由于这些威胁,使得细胞基因组不断发生变化,并最终发生一些突变的积累。每一个突变过程都会留下一个不同的基因组标记,也就称为突变信号。
一粒沙
2019/07/31
9.4K6
「R」使用NMF包绘制热图
学习文档: https://cran.r-project.org/web/packages/NMF/vignettes/heatmaps.pdf
王诗翔呀
2020/07/03
3K0
跟着生信技能树,学习 CIBERSORT
首先有一些背景知识需要了解(特别是一些算法),但是我的理解方法特别粗暴,不知道Jimmy老师会不会打我。当然了,如果是原始的CIBERSORT R脚本 https://rdrr.io/github/singha53/amritr/src/R/supportFunc_cibersort.R 其实懂得使用即可。
生信技能树
2021/02/03
7.4K1
跟着生信技能树,学习 CIBERSORT
单细胞非负矩阵分解分析python版(cNMF)学习
前置一个推文,老师的推文已经详细讲解了非负矩阵分解的算法原理~ 如果对算法原理感兴趣的可以点击以下链接~
凑齐六个字吧
2024/09/15
4410
单细胞非负矩阵分解分析python版(cNMF)学习
推荐算法——非负矩阵分解(NMF)
一、矩阵分解回顾 image.png 二、非负矩阵分解 2.1、非负矩阵分解的形式化定义 image.png 2.2、损失函数 image.png 2.3、优化问题的求解 image.png imag
felixzhao
2018/03/20
1.8K0
推荐算法——非负矩阵分解(NMF)
单细胞实战之单细胞非负矩阵分解(cNMF)——入门到进阶(高级篇4)
接下来将回顾学习非负矩阵分解这个工具, 单细胞实战之单细胞hdWGCNA分析——入门到进阶(高级篇3):https://mp.weixin.qq.com/s/KGSoRx3klmliKPVL7ml28Q
凑齐六个字吧
2025/05/11
2580
单细胞实战之单细胞非负矩阵分解(cNMF)——入门到进阶(高级篇4)
R语言实现meta分析过程中的可视化展示
大家应该很熟悉meta分析,所谓meta分析就是一个全面收集所有相关研究并逐个进行严格评价和分析,再用定量合成的方法对资料进行统计学处理得出综合结论的整个过程。今天我们给大家介绍一个在R语言中进行meta分析的工具metafor包。我们通过这个包把相应的meta分析的常规的一些图为大家介绍下。
一粒沙
2019/07/31
4K0
R语言中的突变signature分析工具
新的一年开始了,今天给大家介绍一款用于发现、预测和探索突变特征的综合分析工具包musicatk。此包主要基于COSMIC突变数据中的最新数据进行肿瘤突变模式的探索。我们首先看下包的安装:
一粒沙
2022/03/14
1.6K0
R语言中的突变signature分析工具
R语言中多组学的因子分析
多组学的研究在不断进入各个疾病领域,那么如何整合这些多组学的特征成为多组学因子综合分析的挑战,今天给大家介绍一个可以类似于PCA分析对多维组学数据进行降维分析的工具包MOFA2。首先看下包的安装:
一粒沙
2022/03/14
1.2K0
R语言中多组学的因子分析
预测三分类变量模型的ROC介绍
我们对Logistics回归很熟悉,预测变量y为二分类变量,然后对预测结果进行评估,会用到2*2 Matrix,计算灵敏度、特异度等及ROC曲线,判断模型预测准确性。
Jamesjin63
2022/11/03
1.2K0
预测三分类变量模型的ROC介绍
推荐阅读
相关推荐
基于R语言利用NMF(非负矩阵分解)替代层次聚类进行肿瘤分型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验