Dirichlet Multinomial Mixtures

Community typing with Dirichlet Multinomial Mixtures

Dirichlet Multinomial Mixtures (DMM) 是一种用于对微生物群落分析数据进行群落分型(或聚类)的概率方法。 这是一个无限的混合模型,这意味着该方法可以推断出最佳数量的群落类型。 请注意,群落类型的数量可能会随数据大小而增长。

library(microbiome)
library(DirichletMultinomial)
library(reshape2)
library(magrittr)
library(dplyr)
# Load example data
data(dietswap)
pseq <- dietswap# To speed up, only consider the core taxa
# that are prevalent at 0.1% relative abundance in 50% of the samples
# (note that this is not strictly correct as information is
# being discarded; one alternative would be to aggregate rare taxa)
pseq.comp <- microbiome::transform(pseq, "compositional")
taxa <- core_members(pseq.comp, detection = 0.1/100, prevalence = 50/100)
pseq <- prune_taxa(taxa, pseq)# Pick the OTU count matrix
# and convert it into samples x taxa format
dat <- abundances(pseq)
count <- as.matrix(t(dat))

拟合 DMM 模型.,让我们将群落类型的最大允许数量设置为3,以加速示例。

fit <- lapply(1:3, dmn, count = count, verbose=TRUE)
##   Soft kmeans
##   Expectation Maximization setup
##   Expectation Maximization
##   Hessian
##   Soft kmeans
##     iteration 10 change 0.000029
##   Expectation Maximization setup
##   Expectation Maximization
##     iteration 10 change 0.000000
##   Hessian
##   Soft kmeans
##     iteration 10 change 0.030731
##     iteration 20 change 0.000110
##   Expectation Maximization setup
##   Expectation Maximization
##     iteration 10 change 0.000063
##   Hessian

判断拟合效果

lplc <- sapply(fit, laplace) # AIC / BIC / Laplace
aic  <- sapply(fit, AIC) # AIC / BIC / Laplace
bic  <- sapply(fit, BIC) # AIC / BIC / Laplace
#plot(lplc, type="b", xlab="Number of Dirichlet Components", ylab="Model Fit")
#lines(aic, type="b", lty = 2)
#lines(bic, type="b", lty = 3)

选择最佳模型

best <- fit[[which.min(unlist(lplc))]]

参数pi及theta

mixturewt(best)
##          pi     theta
## 1 0.3738027 159.10473
## 2 0.3188891  81.91265
## 3 0.3073082  64.24696

元素(otu)分配给不同cluster

ass <- apply(mixture(best), 1, which.max)

每个otu对每个组成群落的贡献

for (k in seq(ncol(fitted(best)))) {d <- melt(fitted(best))colnames(d) <- c("OTU", "cluster", "value")d <- subset(d, cluster == k) %>%# Arrange OTUs by assignment strengtharrange(value) %>%mutate(OTU = factor(OTU, levels = unique(OTU))) %>%# Only show the most important driversfilter(abs(value) > quantile(abs(value), 0.8))     p <- ggplot(d, aes(x = OTU, y = value)) +geom_bar(stat = "identity") +coord_flip() +labs(title = paste("Top drivers: community type", k))print(p)
}

Dirichlet Multinomial Mixtures (DMM)的R实现相关推荐

  1. 基于狄利克雷-多项式分布做文档聚类代码(dirichlet multinomial mixture model)

    论文来源 Yin J, Wang J. A dirichlet multinomial mixture model-based approach for short text clustering[C ...

  2. Dirichlet Multinomial Mixture Model做短文本聚类

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 论文来源 Yin J, Wang J. A dirich ...

  3. pvrect r语言 聚类_技术贴 | R语言——肠型分析:介绍、方法

    点击蓝字↑↑↑"微生态",轻松关注不迷路 导读 2011年,肠型(Enterotypes)的概念首次在<自然>杂志上由Arumugam等[1]提出,该研究发现可以将人类 ...

  4. Multinomial Logit Model (MNL) 模型R语言nnet包multinom函数实现实例

    最近做项目涉及到要使用multinomial logit model (MNL) 模型.看了一堆文献讲mnl, 但是没有给什么具体能上手的实例,就算有也是一笔带过,打算找一些使用R 语言来实现mnl模 ...

  5. 狄利克雷分布的matlab代码实现和R语言函数调用

    主要参考的是:https://www.douban.com/note/45584915/ 和 http://www.biostatistic.net/thread-33740-1-1.html 最近需 ...

  6. r\$\gamma_0=\$

    学习sklearn-example中有一句代码这样的: estimators = [("Finite mixture with a Dirichlet distribution\nprior ...

  7. Nature Microbiology:肠道菌群如何划分肠型

    题目:基于肠道菌群组成的"肠型"如何定义? 认识肠道菌群领域的29位大佬,从熟悉他们的名字和单位开始. 作者:Paul I. Costea 1, Falk Hildebrand 1 ...

  8. AAAI-19录用论文清单

    AAAI-19于1月27日在夏威夷召开,今年是33届会议. 会议录用论文清单, workshop16个,tutorials24个. 标题的词云分析: 作者单位词云(按作者人数计算/一篇文章可能有多个作 ...

  9. LFDMM源码剖析(融入词向量的概率图模型)

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 论文来源 Nguyen D Q, Billingsley ...

最新文章

  1. redis字符串匹配_Redis的数据类型和抽象概念介绍
  2. Facebook如何预测广告点击:剖析经典论文GBDT+LR
  3. 可视化卷积神经网络的过滤器_万字长文:深度卷积神经网络特征可视化技术(CAM)最新综述...
  4. VMware记录(一)- vCenter Server 服务安装提示无法解析此完全限定域名
  5. python处理多个excel文件-Python将多个excel文件合并为一个文件
  6. 18.28 getchar()函数与缓冲区问题
  7. 后端:Java中如何更优雅的处理空值,看完你就懂了!
  8. 据说这是双11前互联网人的一天~
  9. eclipse工具栏sdk和avd图标
  10. web前端开发:JavaScript 基本语法,
  11. windows系统上安装与使用Android NDK r8d(二)
  12. 计算机一级b必背知识点,全国计算机等级考试B经典必考资料_知识点总结.doc
  13. html表格 行 自动向上,javascript – 在bootstraptable中向上或向下移动行
  14. linux c实现通用hash表
  15. Linux环境下右键无法新建文档的解决方法——Ubuntu 16.x
  16. 锁存器芯片74HC573芯片的用法,及其在实际电路中的应用
  17. 今秋如何让自己的C币也来个大丰收
  18. 停课不停学致家长的一封信
  19. formula 返回list_如何在Hibernate / JPA中使用@Formula
  20. 开放数据库:青少年健康主题数据库——国家人口健康科学数据中心

热门文章

  1. bootstrap--表格(table的各种样式)
  2. Python基础——零基础学Python
  3. tcl/tk实例详解——eval
  4. MOSFET 工作原理
  5. centos恢复图形界面_centos7恢复图形界面_centos7没有图形界面
  6. java socket 循环读取_java socket tcp(服务器循环检测)
  7. wifi爆破学习记录
  8. 《Excel效率手册:早做完,不加班》
  9. 北邮计算机学院4组,北邮信息与通信工程学院导师组介绍(十一)
  10. Python实现极大似然估计