热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用NMF包绘制热图

学习文档:

学习文档: https://cran.r-project.org/web/packages/NMF/vignettes/heatmaps.pdf

Heatmap引擎

NMF包中的热图引擎是由 aheatmap 函数实现,其余的热图函数都是基于它的修改。而 aheatmap 函数本身又是 pheatmappheatmap 函数的修改版本。引擎具体的优点作者有在文档是写,我就不唠叨了。

数据和模型

为了演示热图函数的用法,我们这里创建一个随机的NMF输入矩阵,以及一些注释和协变量。

library(NMF)
#> Loading required package: pkgmaker
#> Loading required package: registry
#> 
#> Attaching package: 'pkgmaker'
#> The following object is masked from 'package:base':
#> 
#>     isFALSE
#> Loading required package: rngtools
#> Loading required package: cluster
#> Warning: replacing previous import 'colorspace::plot' by 'graphics::plot'
#> when loading 'NMF'
#> Warning: replacing previous import 'dendextend::cutree' by 'stats::cutree'
#> when loading 'NMF'
#> NMF - BioConductor layer [OK] | Shared memory capabilities [NO: bigmemory] | Cores 9/10
#>   To enable shared memory capabilities, try: install.extras('
#> NMF
#> ')
# random data that follow an 3-rank NMF model (with quite some noise: sd=2)
X <- syntheticNMF(100, 3, 20, noise=2)

# row annotations and covariates
n <- nrow(X)
d <- rnorm(n)
e <- unlist(mapply(rep, c('X', 'Y', 'Z'), 10))
e <- c(e, rep(NA, n-length(e)))
rdata <- data.frame(Var=d, Type=e)

# column annotations and covariates
p <- ncol(X)
a <- sample(c('alpha', 'beta', 'gamma'), p, replace=TRUE)

c <- rnorm(p)
# gather them in a data.frame
covariates <- data.frame(a, X$pData, c)

查看下生成的注释数据:

head(rdata)
#>       Var Type
#> 1  0.0900    X
#> 2  0.0418    X
#> 3 -2.1354    X
#> 4 -0.1632    X
#> 5 -1.6008    X
#> 6 -1.0027    X

head(covariates)
#>       a Group      c
#> 1  beta     1  0.601
#> 2 gamma     1 -0.486
#> 3  beta     1  1.661
#> 4 alpha     1  1.017
#> 5 alpha     1 -1.177
#> 6 alpha     1  1.553

这里 X 实际是一个矩阵, rdata 是行注释, covariates 是列注释。

下面画图:

par(mfrow = c(1, 2))
aheatmap(X, annCol = covariates, annRow = X$fData)
aheatmap(X)

使用NMF包绘制热图

接着,我们使用NMF模型来分解矩阵。

res = nmf(X, 3, nrun = 10)

混合系数矩阵:coefmap

NMF结果的混合系数矩阵可以使用 coefmap() 函数进行绘制。该函数默认添加2个注释通道用来展示 从最佳拟合结果中获得的簇(聚类数)和一致性矩阵的层次聚类 。在图例中,这两个通道分别以_basis_和_consensus_命名。对于一个简单的NMF模型结果,一致性数据是不能显示的,只能通过最佳拟合进行聚类。

opar = par(mfrow = c(1, 2))

# coefmap from multiple run fit: includes a consensus track
coefmap(res)
# coefmap of a single run fit: no consensus track
coefmap(minfit(res))

使用NMF包绘制热图

par(opar)

默认情况下:

  • 行没有排序
  • 列使用 aheatmap 的默认顺序,不过设置 Colv="basis" 就能让列根据由主导的basis组分定义的类进行排序。或者设置 Colv="consensus" 让列以consensus矩阵排序
  • 每一列和为1(刻度化过)
  • 调色板使用RColorBrewer包提供的“Y10rRd”,有50个刻度

如果想让 coefmap() 显示 aheatmap() 函数的默认形式,设置 Rowv=TRUE, Colv=TRUE, scale='none'

自动注释的通道可以使用 tracks=NA 进行隐藏,或者设置一个( tracks=':basis'tracks='basis:' 可以分别设置行注释或列注释),图例名可以以 tracks=c(Metagene=':basis', 'consensus') 的形式进行修改。除此之外,利用 annCol 参数可以添加用户设定的手动注释。

opar = par(mfrow = c(1,2))
# removing all automatic annotation tracks
coefmap(res, tracks = NA)

# customized plot
coefmap(res, Colv = 'euclidean',
        main = "Metagene contributions in each sample", labCol = NULL,
        annRow = list(Metagene = ":basis"), annCol = list(':basis', Class = a, Index = c),
        annColors = list(Metagene = 'Set2'), 
        info = TRUE)

使用NMF包绘制热图

par(opar)

基底矩阵:basismap

基底矩阵可以使用 basismap 函数进行绘制,默认的行为是添加basis注释通道,每一行显示主导的基底组分,即每一行有最高负载的基底组分。

opar <- par(mfrow=c(1,2))
# default plot
basismap(res)
# customized plot: only use row special annotation track.
basismap(res, main="Metagenes", annRow=list(d, e), tracks=c(Metagene=':basis'))

使用NMF包绘制热图

par(opar)

默认情况下:

  • 列没有排序
  • 行根据默认的层次聚类得到的距离进行排序( eculideancomplete
  • 每一行和为1
  • 调色板使用RColorBrewer包提供的“Y10rRd”,有50个刻度

一致性矩阵:consensusmap

当使用NMF进行矩阵的时候,一种评估基于指定rank评估聚类稳定性的方法是考虑由多个独立NMF运行结果计算得到的连接矩阵。有篇 不错的中文博文 讲的比较清晰,建议看看。

单个拟合

我们所用数据 res 设定的参数是 nrun=10 ,因此包含了10次运行得到的最佳结果以及基于所有运行的一致性矩阵。

opar <- par(mfrow=c(1,2))
# default plot
consensusmap(res)
# customized plot
consensusmap(res, annCol=covariates, annColors=list(c='blue')
, labCol='sample ', main='Cluster stability'
, sub='Consensus matrix and all covariates')

使用NMF包绘制热图

par(opar)

很显然这是一个对称矩阵,结果看上一半或者下一半都可以。

同一方法,计算多个rank的结果

函数 nmf 可以接受一组 rank 序列用来拟合多个不同的rank的结果。

res2_7 <- nmf(X, 2:7, nrun=10, .optiOns='v')

然后可以同样的画图

consensusmap(res2_7)

单个rank,多种方法

可以比较同一rank不同方法的结果。

res_methods <- nmf(X, 3, list('lee', 'brunet', 'nsNMF'), nrun=10)

class(res_methods)

consensusmap(res_methods)

通用热图引擎:aheatmap

还有很多自定义画热图的例子,使用下面的命令查看。

demo('aheatmap')
# or
demo('heatmaps')

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 记录一些 Latex 的技巧
    Latex一些技巧:1.如何创建不浮动的的figure和table\makeatletter\newcommand{\figcaption}{\def\captyp ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
手机用户2502903213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有