使用NMF包绘制热图

栏目: 数据库 · 发布时间: 7年前

内容简介:学习文档:

学习文档: 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')

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

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

One Click

One Click

Richard L. Brandt / Portfolio Hardcover / 2011-10-27 / 25.95

An insightful look at how Amazon really works and how its founder and CEO makes it happen. Amazon's business model is deceptively simple: make online shopping so easy and convenient that customers ......一起来看看 《One Click》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具