DirichletMultinomial/DESCRIPTION0000644000175200017520000000303614710276434017436 0ustar00biocbuildbiocbuildPackage: DirichletMultinomial Type: Package Title: Dirichlet-Multinomial Mixture Model Machine Learning for Microbiome Data Version: 1.48.0 Authors@R: person( "Martin", "Morgan", role = c("aut", "cre"), email = "mtmorgan.xyz@gmail.com", comment = c(ORCID = "0000-0002-5874-8148")) Description: Dirichlet-multinomial mixture models can be used to describe variability in microbial metagenomic data. This package is an interface to code originally made available by Holmes, Harris, and Quince, 2012, PLoS ONE 7(2): 1-15, as discussed further in the man page for this package, ?DirichletMultinomial. License: LGPL-3 Depends: S4Vectors, IRanges Imports: stats4, methods, BiocGenerics Suggests: lattice, parallel, MASS, RColorBrewer, DT, knitr, rmarkdown, BiocStyle Collate: AllGenerics.R dmn.R dmngroup.R roc.R util.R SystemRequirements: gsl biocViews: ImmunoOncology, Microbiome, Sequencing, Clustering, Classification, Metagenomics VignetteBuilder: knitr URL: https://mtmorgan.github.io/DirichletMultinomial/ BugReports: https://github.com/mtmorgan/DirichletMultinomial/issues git_url: https://git.bioconductor.org/packages/DirichletMultinomial git_branch: RELEASE_3_20 git_last_commit: 37dd5f3 git_last_commit_date: 2024-10-29 Repository: Bioconductor 3.20 Date/Publication: 2024-10-29 NeedsCompilation: yes Packaged: 2024-10-30 00:26:04 UTC; biocbuild Author: Martin Morgan [aut, cre] () Maintainer: Martin Morgan DirichletMultinomial/MD50000644000175200017520000000364014710276434016241 0ustar00biocbuildbiocbuild3475b569afd2d75e9d493b6075fb1339 *DESCRIPTION 442dbf51825b3f574a81f30f85020e42 *NAMESPACE 09b40be3e73f967eb2cdba3ad3596fe8 *R/AllGenerics.R 61d1779b1e27dddcd919bba1226b7e2d *R/dmn.R 7a5131876aa953f9a1c9fc77f687b741 *R/dmngroup.R cde2f4a81db5aff8f6df444b60449ea4 *R/roc.R cafe20b9282a670f89696694105e7bfd *R/util.R f8f036e3fc3b27281168ff6d30e28238 *README.md f1ef1ee2763b20e53380deeea9980019 *_pkgdown.yml ec01b8d829336b3a9d08d9ab1aa7b850 *build/vignette.rds b5027d3c403b571c9f55d0d98c6935d5 *data/bestgrp.rda 47b55f72705242de095c2d142915c634 *data/fit.rda 7568178d2fbb1f139cc1cad7b00f22b4 *data/xval.rda c05fc74e50115f38870f8c62ac5c781a *inst/doc/DirichletMultinomial.R 47fbc62d26bca9b9d48c03d54506a05a *inst/doc/DirichletMultinomial.Rmd 80259de262c0c1cee87e77827e690647 *inst/doc/DirichletMultinomial.html db581cfda569d7e309d91dd16d23b033 *inst/extdata/TwinStudy.t 4655f03e32d3a39fc7d7b32bf81d6d3a *inst/extdata/Twins.csv ee71c2d7ed4f84543beeb1ecc1b92623 *man/DMN-class.Rd b925e731b21d8704652893a0da7f3f73 *man/DMNGroup-class.Rd 4b2210b7ff3f20b2285a1de88fe2439f *man/DirichletMultinomial-package.Rd e454c4e245cd399fccac9c5419f6ebb3 *man/cvdmngroup.Rd 0ea9bb5396de267ab62c2a3cabedb2ba *man/dataobjects.Rd f2e36cf890dd3f8f38163125c33720ef *man/dmn.Rd d69669d1531ec99ccedb20b16abf74eb *man/dmngroup.Rd a6b886687da8bdba3637fbd7787c0ffe *man/fitted.Rd e773527d31898cfaef6d1ff76afdc55e *man/heatmapdmn.Rd 9b642dd41d28d7a15b70628864f72b56 *man/roc.Rd 131e29bd9b90498c3e34da6b703dd14e *man/util.Rd 768db9de175ce840d23227a399a106af *src/Makevars ebb46f8b1bae6de018e88b656d112392 *src/Makevars.win 32d5b099aacdf5d23acf273d605a1d9d *src/R_init_DirichletMultinomial.c 0d78400c85fde52ee3880bb14c6f4e82 *src/dirichlet_fit.c 207b415cb2c355f1a3c38aed38d1f468 *src/dirichlet_fit.h 3ca58de359c1010378c50b33656ff385 *src/dirichlet_fit_main.c 3ea3d0430cf2cfa0f62a211c8cfde87e *src/dirichlet_fit_main.h 47fbc62d26bca9b9d48c03d54506a05a *vignettes/DirichletMultinomial.Rmd DirichletMultinomial/NAMESPACE0000644000175200017520000000117514710220024017131 0ustar00biocbuildbiocbuilduseDynLib(DirichletMultinomial, .registration=TRUE) importFrom(graphics, axis, image, layout, par) importFrom(stats, runif, setNames) importFrom(utils, head) import(methods) importFrom(stats4, AIC, BIC, summary) importClassesFrom(S4Vectors, Annotated, Vector) importMethodsFrom(IRanges, length, lapply, names) importMethodsFrom(BiocGenerics, Map, sapply) importClassesFrom(S4Vectors, SimpleList, List) exportClasses(DMN, DMNGroup) export(dmn, dmngroup, goodnessOfFit, laplace, mixturewt, mixture, heatmapdmn, cvdmngroup, roc, csubset, ## S4 generics fitted, predict) exportMethods(AIC, BIC, summary, show) DirichletMultinomial/R/0000755000175200017520000000000014710220024016107 5ustar00biocbuildbiocbuildDirichletMultinomial/R/AllGenerics.R0000644000175200017520000000010114710220024020412 0ustar00biocbuildbiocbuild## promoted generics setGeneric("fitted") setGeneric("predict") DirichletMultinomial/R/dmn.R0000644000175200017520000001073514710220024017016 0ustar00biocbuildbiocbuildsetClass("DMN", representation=representation(goodnessOfFit="numeric", group="matrix", mixture="list", fit="list")) .DMN <- function(goodnessOfFit, group, mixture, fit, ...) { new("DMN", goodnessOfFit=goodnessOfFit, group=group, mixture=mixture, fit=fit, ...) } dmn <- function(count, k, verbose=FALSE, seed=runif(1, 0, .Machine$integer.max)) { stopifnot( `'count' should be integer-valued` = count_is_integerish(count) ) if (verbose) message(sprintf("dmn, k=%d", k)) if (any(rowSums(count) == 0L)) stop("some 'rowSums()' on the dmn() count matrix equal 0") mode(count) <- "integer" ans <- .Call(.dirichlet_fit, count, as.integer(k), as.logical(verbose), as.integer(seed)) o <- order(ans$Mixture$Weight, decreasing=TRUE) ans <- within(ans, { Group <- Group[,o, drop=FALSE] Mixture$Weight <- Mixture$Weight[o] Fit <- lapply(Fit, function(elt, o) elt[, o, drop=FALSE], o) }) with(ans, .DMN(goodnessOfFit=GoodnessOfFit, group=Group, mixture=Mixture, fit=Fit)) } ## k-means mixture <- function(object, ..., assign=FALSE) { if (assign) { apply(mixture(object), 1, which.max) } else { object@group } } ## Dirichlet goodnessOfFit <- function(object, ...) object@goodnessOfFit laplace <- function(object, ...) goodnessOfFit(object)[["Laplace"]] .AIC.DMN <- function(object, ...) goodnessOfFit(object)[["AIC"]] setMethod(AIC, "DMN", .AIC.DMN) .BIC.DMN <- function(object, ...) goodnessOfFit(object)[["BIC"]] setMethod(BIC, "DMN", .BIC.DMN) mixturewt <- function(object, ...) { data.frame(pi=object@mixture$Weight, theta=colSums(fitted(object))) } .fitted.DMN <- function(object, ..., scale=FALSE) { fit <- object@fit$Estimate if (scale) fit <- scale(fit, FALSE, mixturewt(object)$theta) fit } setMethod(fitted, "DMN", .fitted.DMN) ## predict .neg_log_evidence_i <- function(x, alpha) { .B <- function(x) sum(lgamma(x)) - lgamma(sum(x)) -(.B(x + alpha) - .B(alpha)) } .predict.DMN <- function(object, newdata, ..., logevidence=FALSE) { if (is.vector(newdata)) newdata <- matrix(newdata, nrow=1) lambda <- fitted(object) K <- ncol(lambda) alpha <- sapply(seq_len(K), function(k, lamda, x) { apply(x, 1, .neg_log_evidence_i, lambda[,k]) }, lambda, newdata) if (is.vector(alpha)) alpha <- matrix(alpha, nrow=1, dimnames=list(rownames(newdata), NULL)) if (!logevidence) { wt <- mixturewt(object)$pi offset <- apply(alpha, 1, min) z <- sweep(exp(-(alpha - offset)), 2, wt, "*") z / rowSums(z) } else { alpha } } setMethod(predict, "DMN", .predict.DMN) ## print / plot setMethod(show, "DMN", function(object) { cat("class:", class(object), "\n") cat("k:", ncol(mixture(object)), "\n") cat("samples x taxa:", nrow(mixture(object)), "x", nrow(fitted(object)), "\n") cat("Laplace:", laplace(object), "BIC:", BIC(object), "AIC:", AIC(object), "\n") }) heatmapdmn <- function(count, fit1, fitN, ntaxa=30, ..., transform=sqrt, lblwidth=.2 * nrow(count), col=.gradient) { stopifnot( `'count' should be integer-valued` = count_is_integerish(count) ) p1 <- fitted(fit1, scale=TRUE) pN <- fitted(fitN, scale=TRUE) if (!setequal(rownames(p1), rownames(pN))) stop("taxa in 'fit1' and 'fitN' differ") p1 <- p1[rownames(pN),, drop=FALSE] diff <- rowSums(abs(pN - as.vector(p1))) taxa <- rev(head(order(diff, decreasing=TRUE), ntaxa)) pN <- pN[taxa,] cl <- mixture(fitN, assign=TRUE) ncl <- length(unique(cl)) nms <- names(cl) grp <- factor(cl, levels=as.character(seq(1, ncl))) idx <- split(nms, grp) ## 2 * ncl + 1 (for labels) panels mwd <- .15 * length(cl) / ncl # 'm's take up 15% of total width wd <- c(unlist(Map(c, lapply(idx, length), mwd), use.names=FALSE), lblwidth) layout(matrix(seq(1, 2 * ncl + 1), nrow=1), widths=wd) op <- par(no.readonly=TRUE) on.exit(par(op), add=TRUE) par(mar=c(1, 0, 1, 0)) for (i in seq_along(idx)) { image(transform(count[idx[[i]], taxa, drop=FALSE]), col=col, xaxt="n", yaxt="n") image(t(transform(pN[, i, drop=FALSE])), col=col, xaxt="n", yaxt="n") } xat <- (seq_len(nrow(pN)) - 1) / (nrow(pN) - 1) axis(4, xat, labels=rownames(pN), las=1) } DirichletMultinomial/R/dmngroup.R0000644000175200017520000001036514710220024020072 0ustar00biocbuildbiocbuildsetClass("DMNGroup", contains="SimpleList", prototype=prototype(elementType="DMN")) .DMNGroup <- function(...) { new("DMNGroup", listData=list(...)) } ## dmngroup dmngroup <- function(count, group, k, ..., simplify=TRUE, .lapply=parallel::mclapply) { stopifnot( `'count' should be integer-valued` = count_is_integerish(count) ) if (length(group) != nrow(count)) stop("'length(group)' does not equal 'nrow(count)'") if (!is.factor(group)) group <- factor(group) lvls <- setNames(nm=levels(group)) counts <- lapply(lvls, csubset, count, group) tasks <- expand.grid(group=names(counts), k=k) tid <- seq_len(nrow(tasks)) ans0 <- .lapply(tid, function(i, tasks, counts, ...) { count <- counts[[tasks[i,"group"]]] k <- tasks[i,"k"] dmn(count, k, ...) }, tasks, counts, ...) ans <- if (simplify) { ans1 <- split(ans0, tasks[,"group"]) opt <- lapply(ans1, function(ans) { which.min(sapply(ans, laplace)) }) Map("[[", ans1, opt) } else ans0 do.call(.DMNGroup, ans) } ## predict .predict.DMNGroup <- function(object, newdata, ..., assign=FALSE) { if (2 < length(object)) stop("only 2 groups can be used for classification") res <- lapply(object, predict, newdata, ..., logevidence=TRUE) offset <- apply(do.call(cbind, res), 1, min) prClass <- local({ nClass <- sapply(object, function(x) nrow(mixture(x))) nClass / sum(nClass) }) pr <- simplify2array(Map(function(x, alpha, prClass, offset) { prMix <- sweep(exp(-(alpha - offset)), 2, mixturewt(x)$pi, "*") rowSums(prMix) * prClass }, object, res, prClass, MoreArgs=list(offset=offset))) if (!is.matrix(pr)) { dmnms <- list(rownames(newdata), names(prClass)) pr <- matrix(pr, nrow=1, dimnames=dmnms) } if (assign) names(object)[ifelse((pr[,1] / rowSums(pr)) > .5, 1, 2)] else pr / rowSums(pr) } setMethod(predict, "DMNGroup", .predict.DMNGroup) ## cross-validation .cv_dmngroup <- function(dropidx, count, k, z, ..., verbose=FALSE) ## e.g., k = c(Lean=1, Obese=3) --> 1 group for lean, 3 for obese { tryCatch({ trainz <- z[-dropidx] u <- unique(trainz) train <- count[-dropidx,,drop=FALSE] if (!is.factor(trainz)) trainz <- factor(trainz, levels=names(k)) if (any(is.na(trainz))) stop("values of 'z' not all in 'names(k)'") if (!all(names(k) %in% as.character(trainz))) stop("not all names(k) in z subset") trains <- sapply(levels(trainz), csubset, train, trainz) fits <- Map(dmn, trains, k[levels(trainz)], ..., verbose=verbose) fits <- do.call(.DMNGroup, fits) predict(fits, count[dropidx,,drop=FALSE], assign=FALSE) }, error=function(err) { message(".cv_dmngroup error: ", conditionMessage(err)) matrix(NA_integer_, nrow=length(dropidx), ncol=length(k), dimnames=list(rownames(count)[dropidx], names(k))) }) } cvdmngroup <- function(ncv, count, k, z, ..., verbose=FALSE, .lapply=parallel::mclapply) { stopifnot( `'count' should be integer-valued` = count_is_integerish(count) ) n <- seq_len(nrow(count)) grp <- split(sample(length(n)), cut(n, ncv)) names(grp) <- seq_along(grp) cvresult <- .lapply(names(grp), function(idx, grp, ..., verbose) { if (verbose) cat("cross-validation group", names(grp[idx]), "\n") .cv_dmngroup(grp[[idx]], ..., verbose=verbose) }, grp, count, k, z, ..., verbose=verbose) gid <- rep(seq_along(cvresult), sapply(cvresult, nrow)) cbind(data.frame(group=gid, row.names=NULL), do.call(rbind, cvresult)) } ## summary / print / plot setMethod(summary, "DMNGroup", function(object, ...) { k <- data.frame(k=sapply(object, function(elt) ncol(mixture(elt)))) sxt <- t(sapply(object, function(elt) { c(samples=nrow(mixture(elt)), taxa=nrow(fitted(elt))) })) goodness <- t(sapply(object, goodnessOfFit)) cbind(k=k, sxt, goodness) }) setMethod(show, "DMNGroup", function(object) { cat("class:", class(object), "\n") cat("summary:\n") print(summary(object)) }) DirichletMultinomial/R/roc.R0000644000175200017520000000030214710220024017010 0ustar00biocbuildbiocbuildroc <- function(exp, obs, ...) { exp0 <- exp[order(obs, decreasing=TRUE)] data.frame(TruePostive=cumsum(exp0) / sum(exp0), FalsePositive=cumsum(!exp0) / sum(!exp0)) } DirichletMultinomial/R/util.R0000644000175200017520000000160614710220024017212 0ustar00biocbuildbiocbuild## utility .gradient <- # RColorBrewer::brewer.pal(9, "YlOrRd") c("#FFFFCC", "#FFEDA0", "#FED976", "#FEB24C", "#FD8D3C", "#FC4E2A", "#E31A1C", "#BD0026", "#800026") .divergent <- # RColorBrewer::brewer.pal(9, "RdYlBu") c("#D73027", "#F46D43", "#FDAE61", "#FEE090", "#FFFFBF", "#E0F3F8", "#ABD9E9", "#74ADD1", "#4575B4") .qualitative <- # RColorBrewer::brewer.pal(10, "Paired") c("#A6CEE3", "#1F78B4", "#B2DF8A", "#33A02C", "#FB9A99", "#E31A1C", "#FDBF6F", "#FF7F00", "#CAB2D6", "#6A3D9A") csubset <- function(val, x, pheno, cidx=TRUE) { ridx <- pheno %in% val if (!cidx) cidx <- colSums(x[ridx,]) != 0 x[ridx, cidx] } count_is_integerish <- function(count) { ## values of count matrix should be raw counts; the following is ## approximate max(abs(count - as.integer(count))) < 0.01 } DirichletMultinomial/README.md0000644000175200017520000000226614710220024017173 0ustar00biocbuildbiocbuild # DirichletMultinomial Dirichlet-multinomial mixture models can be used to describe variability in microbial metagenomic data. This package is an interface to code originally made available by Holmes, Harris, and Quince, 2012, PLoS ONE 7(2): 1-15, as discussed further in the man page for this package, ?DirichletMultinomial. ## Installation Install [DirichletMultinomial][] from [Bioconductor][] with: ``` r if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install("DirichletMultinomial") ``` Linux and MacOS with source-level installations require the 'gsl' system dependency. On Debian or Ubuntu ``` sudo apt-get install -y libgsl-dev ``` On Fedora, CentOS or RHEL ``` sudo yum install libgsl-devel ``` On macOS (source installations are not common on macOS, so this step may is not usually necessary) ``` brew install gsl ``` ## Use See the [DirichletMultinomial][] Bioconductor landing page and [vignette][] for use. [DirichletMultinomial]: https://bioconductor.org/packages/DirichletMultinomial [Bioconductor]: https://bioconductor.org [vignette]: https://mtmorgan.github.io/DirichletMultinomial/articles/DirichletMultinomial.html DirichletMultinomial/_pkgdown.yml0000644000175200017520000000012014710220024020232 0ustar00biocbuildbiocbuildurl: https://mtmorgan.github.io/DirichletMultinomial/ template: bootstrap: 5 DirichletMultinomial/build/0000755000175200017520000000000014710276433017024 5ustar00biocbuildbiocbuildDirichletMultinomial/build/vignette.rds0000644000175200017520000000036714710276433021371 0ustar00biocbuildbiocbuildmQ 0 zAD "k:E旫:Ѻ@Ҥ>!$$$0FCPs­Nҁ6 7*p&ˍe3y* K^CLVZK^i)JqB\kIQ謺5G.ll:)w>EN4YsՇ^1Aj~ sJЈDirichletMultinomial/data/0000755000175200017520000000000014710220024016617 5ustar00biocbuildbiocbuildDirichletMultinomial/data/bestgrp.rda0000644000175200017520000004245614710220024020770 0ustar00biocbuildbiocbuildw<0n4$ ʞ~4WR e޲(IJy#N~|:=s_i 0h3PPPPQP1R?i?()h(ёVockhmIAI/#o7tģ:_t6r8[je52ZXmlT ۢ+u\8ku !Vݾ[W0U=R>#I9:[ȧ/D}yCގrj*h8oCi >|oQ(l }ì: x_N̯T/Gޱ G\9ug'ӖJ;7^bi2}I/?{ǨH*Tw'Шpj, nWhx0\,Oyj08NyÝ[6>d뛞QKr]֐wXY4:8.ߛ]ȴ4 RPR^ohxzu++"%wUQ[٘Zv54؁B=í_H!} &' 3䂙I.۲='Ӛ*Pwb$DW:>bw!]0|t⯸ԛa613&>kp(9ݸR|$N2ue4 ) #]Ѧ3l}:pg׸}Pdz``RK;:@b/ntW*CqpG+ro] .Nt}Ye#/60-Εe~/ $?>_eg[[lvfOj-#>BBOfYZšvJ H3'= eb6ÙP҄grcKSca75]Y#Mnؔ"jIji8K4/19gkmg'5ֶF 3KpQuzz8=)zi[ K4?,XɆ =dYX99̹E;Y;Z35au63&e9o$Y0,Lʃ,onh9emZYS A0TXquhېdIrQ(I:Y kgmlKL7Q9o4BO▐dI3 # i*9 kzFpYNgphaL9ooZ\ U/__fM&D| +h&Ս%Xyĺq$BܯbU ӈӄ?zn>NeY֘[8D޹v+64[ Iuʃc4 AbZbgYHF~_z9K7D=Ǜ=E넾Hc9 jNGR.Ik7w}-Nb?I)V+GR#ʑtHr$]9IWD#iۙ-Pjҏݺ<1![CO/~eTNMnU Ҫ\#--!)Z/Gp4]n 8x߃. ] 2yxEv7K .Ά2^z)h9X~ dfmo$VA7սk>9"YuI~ &p(6t7T֥y 5&tE~00} 1i;TZ6_ q:i@»u˝~{.`M4R]⯄|Aàq}֥A'^(> %*6Fn\Vf?'}<3~@]lK>oc9_&uŴ8*$]G&oJlH$|s&+Bc7Ӌ JolP>zżLl"CS1/ÚN$ B.5! \\) ּ52Kֿ &?&}Bt)F̺ źK.(HX:N5\! ?dAdwjk|O[>&X<2)(뇛Gɱa d(=BwMB&.J]q[oÊ!H),;ٶ]WL",]2qZr-ngp1ƧՈV=혡g;'umI`W =)|X/&M.:|<\CY$SЁs vǵg{߀\o.dlRBa'1_b>3VFs FckMaCwsuJ.W"ͅhv7yD[T&`o/D͵qLm)sܒ1{ NL50,9~XSdc+gnm$=N]s2 مTy@![ :M@i^qx>#4;{sCz}ߟӁcVƆP~#0{}nb.JXGCp;Լ` |rO5~gӄQL#zF9|WLž͛1 k^nnpFnS;o:d^/Am99gz$'/#&o[yJk@xwM;yNȾO Q'yF]E;?v%!_ʵ'FjpF̽}zav70L[0$%̲9!rf51>ClO6B|k]˜$T?=3iέvt%ri%C1C_p\|RߐU8~eHr9c}׿Ҏb\vGhb{>DjʵSukӼǔ86jjXLڥ[RWWhY/"FቕUɋŬ/TQS` 2 ٗwxLN 6!%>S&4aʷVK7v#$d>CLuWC 񺵟;aFW4Ŏq zy-HSu9VehwLSCd+TQ*P :rӯXvX2EV?C{05o6{b>މw9L9ebEaH QJ`$˫R7%=ɕowiMk 14y%O;6)*=~dX+_[g㯱k6hbzyq:B.|5Z|N[xfiylS&Pk*ȋ Jٜgs9 ׮'\4^ /· gk@-'*_dWF5/̅||ߝ 0Q["~LڝG,CElK'qReM -WG4|׳|Qåh3<>Q*}ӣcpfTL;Éy6uMFֿN Yc%Hy;. 8gǁW}嘯.4\+x0xC b"Y`lYh|F1@v; }}sD ޵Q-Jh_; Ï JR !Г_5A:@{iҳNb Hl@ȖXpȸ a%9@TGpSb!Mi=w'WU Y:0=0zL 1==|P۔x0|ߎqM/P'moA>SjssFB(Jø̭MxJWa8N095syd-zܻՀ8ܡyy:d! EN MƔ9ve Ҋ]xᡱ,lgA^ǵ' %^'s@ ~Î<^-HNs]`{FDh=TO e8:y{lD wKw,{#TJMU7oGKk;61I;{-M4sE_jK~:yሯ}QzNiڣ> yQ@nQa>*FN{_ͳ|T+mE>Fo| EłM콻%fEÝjUvC }ſWIcfYŭ.!Gמyْ _Sg ,+!'' +uAxNGEIzX*WqG/{=kuha&j6!Zgug.[wi` K Ak55ӆK:vâ_ii{׷n86%IpڃRk-\[:p}W&_`ߧpX @0 I/e8,BN!{qxuI" w?5~rkɭ޲O~?-lxIr'y ͳ`$!HC4rNI$$C A9$Ϻ iEB$O i-HhAD ^"D !TB4B"S<B"Oi*S!D !!H8#Ia؄c&M<6a؄&m\^"Bj@܀r"d @D @D @Dɗ1Qr5jDՈ#ϧib,F^b$׼$fP|Y%In!Yod)$($# oس$i"$"NF!Elo?BdB$1 (L0Y$1 ]#L0ٕ9&PȢ&?"(Q"d舐ʐ]$B2"d8*B"d1 YzM@$JiQL-JRxD$HfZ,dQEB%,0QȒ.Ft1vob$y FYH.FodI#YI+J,$i'K8I-N,8q/NxqI' [$lqΉ~y|S"Z^=Yz }N 8QzA^7q6dګlkcE1^$&*gU]Ai,Sjgnǿ4N7h$tGYX\pCR$}Y oil "^K/TKvJf4dSWl  MoY⻵4@ӹbϫw¡rA  m #>n';sn9xT[$S2٦ -~P)^Lt<%kNGU-Ȳ]? +X.AO,BbPvyӷ0xYY(M%w~RK"rxT0.W3iZP9,v]*UQ>h%MfH"b}%@)3>W1&ZE[v[>RW9y2=1)-G;Dm? fx|wPu@yӝp4jMk+Kfr,H0Vͅ'7{w5$:x3e5JvV>x|T)`7|#+=\?RX 0nQy_g2Ӊ+ -]yG#C;7sϨg~u^cWJ(|}[}~`UB{"i>[USU&x+G&`)>pdco%R@+g7SJ>Qʠ_qPGfћkӷKeTBLtC!A3̶w:@lrsXG0l~ #E4΍1>?Fvc'd{H>Q.=9c2:t\}חH毶HP#nQƸ~qt1H>7h=d<lm@i7d$rù릊`// Mo>[ ]rGî r!7]yl"w/,JVSQ3u32򒈰4Ϝt,\dCY~E`hH̷-nU6(^{3 z+rVUlNAT&)A=r򂲉͍VO+q2؇Eu {QycSBN.j} 1 '5V&%re[pL(}i0!$oE(Bp$.#2w5Mx4-ÆձOo̶ w_p'Pj8$ HaA.#W^b! 'l-AP~A"ovn3 T; ޏ.YD2аf=TV`Ce;s(Mض$)B2pmo3Zqz]%'n}%s1fR)+HvLT۔g6bAyY)^=yYsҡb~jc]Ѯ2_Y]q!$]S?WL@Yo\4- 7XUуR?+~VZAF'a47䪉Z7ָ{/ O0L68+|t>(8?A Iߍm݈rP~9C'Gm8ڧ fP4%*S&ɤq]Ɣ[`p?\Bwu00Y= wdi{ބ?)7{ҕg8}n[Q*=b[G&6P{篟 Oe]tABJ~gG35{2CvT]=FToDW*3!V^JE]Kvc@qa&}2L's]~10R-y e*݆jrgl{Q?iH6 IJ_u/=)!@h_Z|iϗV>_Z|iϗnԠ D7@J҅[#dԷ#?o"&M:;ǥ5!?7P@&w{U$A5u 8T[bT%< 櫵`$#t>/]nx2Bԟ}˖)"4b?n2 *OH ??qo~h#YB{8^T4Q^.㼪q0*G?yO WUvB{|5H\~ bo2^CLUўQN\~z.sdv~Y |x^=n\Mrʕӿ3p6y/r<|wzȯfaв_xX*zd|Ogk˧8&83Ifp+;pUpw r;0.t8lκk8}q4nz[?䗄I|X'6{XF40j; \ⵐZJ'tط:1Yb5~ JlRd4x`̭Y㲆[B!O"v/GQvL$;7Pm?̻+)SJ&vG˂DU!8eaNgBX 㭑 [D@bCV:xxk-)i F.Ov0ۥzۢUO]_o"oAQIj#| *x1މ߁{pp_"~:f >?&hau+O% >4ocKbʆi/}VIw~Gab7^N*xCcWk_ҁ͂o~Mr~czg~{={rTfTQz2…*y@'p L %Z UMC,W)h`=UXw[@|wɊS H Q5°pB=ސo/< cOq[tYWsQ; ;ιʿ_ eU !ޤq:;d!Cмg d*࿛Jj:dۏF@չXZ)CwDES)yeJ-G>{Z[{ :x 4ahs\\x֌_S&k c VnT B``]61IlV\lMɢ&x)0{^ "׫||zϸ 07R.)CDYlVh݇ }.燬򔩼Ѷ3D*m|f脠rB6Β^| {Ͼ&~ Z('B T:BZTj3h|t/(p.U#ڻ6! dY`:uy8";4K^k񳮷:;Z7e颤znf0㞀mYb ~qCZċKM=o])LuE v?7 5AZEvn)1Ά[\s.np($OGӇ-s;.g(K W۴W"JeΉ#/shA_tz7^B t^1Xq*fٞS|eŌE+h`/ i] vH,hx WCQoe%Ayg)4kqk : ruwo9Ňp&'c]7ocE`} .t91Ya(G j\ rapb~rS7;am-0pI( kڎjޑR6O9>X@NHׇ84F!lŽ, ];vGKU B?RL'9A!si>w]adpʚb+kW+W^Y^yez5uD.[=* W_]o"Ϭ_"G~Ó¶#έ;5w{!a=x2,Pֽ2cm͛nuIdxұ? މX;rq}͑OvcegxzHo:n/yi.}J>ϧϋcX sMFܸ븫C"vqzޒctZ~ý^Wyz&ҵ F8 _BJ/J1WrNFCM(2|s%xPq{w~AFl_1ac{զOe&QP|AYRf.H` 8̗>B0ՙ D/MYrsRMS̆'mvݸߍ?lUe<0m.[x:ndZx= Z|OA23CwP^ AvJ_~ʲ9}/Ɯ"k˯h[Bɹ{}sy`r 4SԿa ,vҙ a*m#b1'[q1AܰzZ̙72<~DJPG?c&C`5▀S.'`1Ww>p{y}@2O>PL{"_ &oDR7tY@7׃&@uL MDs@=~;0u={*lNNm q1pMmNGIF~5[)]_AI.(n) 3~t4^@շuPul$LӃ8.)~(kUBT,SțJ4q 34 W18w2 yb\â"^UYR*%~Ȓ²&d8߻Kkv@[)pI酒*Poz|Dմj"yW)@nkq׋j *PtՇkۋu-!'2at-ڡ-b$8. wxf]=aD{HwPI}+3?i˃zG%}0eXIdCb{(}μp4:$&ck^ǫnVOr)DcukAsWHtZ&End82 d֟ n ig6۔BҧLyeiP:9YNe :N?({ Oix=ЧU=H)A ު(zD(?ݹ5k 9Ŷ_sW%,w%.;z 6!]5'z-,NPTLKj߄ތA\S9󉏩geO:5/lz"Mj3>{B7ӄɞFrro6ZN/6U腥h0ڨqy혖,!/\Ah~Ϥ[R-] .ȱ"3Y{m]E.>6o]Purws8OQ;po A{EoPmtjtٜZ3nCyṁ?zH[v< 3U_(Ư*y^y*im{@xEa(s ׮ Ap(R~s:j쳜L+VP{r6=EVC c u(̯*k*q c΍:m[ G((ӾA4||qzZnNO˼a fZ;Kyw8-?2uyBz|3/{ɿ% D#>Oq>c k*!z Hi$SAvIM=A jmh9y^:5 /N@u rpvkqmC/-^vb?n;L%K5p ޓu5jZI7L%s E['|× K3 ^'+Ugi4wZ=HLqy3_faQ-Q/?\A3 9^P܀ot._RC݁@u2WА "=T2/@qm*=,e."DgKn{^w4Յ֏K@[n -_G^yԛejXHd\yxgr#P+Yk!.#|ߓnq$S (Ez-qDp'AmuPQL5eᔂV{x&}pH4kjE#O"@=aw7*5T>v~W7X;al]cp1w +LC]ҡd TNo0#O2!߭UP_֗G5PEҩ yYqrPw@[w\ӗFGFA酦rN!\j>" \Hx0 I^\8 ӌy.3:_—Wk1f=ts<DN)>,}Cmjh oִI5Z3niŠmVBGqY\5 bd@m ~2[pDndq2S$% LM7cJΣ~@v#;? h~󏡸NVnޞݖmVZ:V&:ZV:45?״7 W_Z&ZZZ֖TײBPnkBqƶZ: u,5L,5ooio1512)6;OqZt]]ktsOHyRYYXjR~ +LoQqZZZF5oejZok  Kmh k,4lqh Ҷ}}FF:fh5OH9(alfk8jX(;9[ZdFZ8@& m45+ryM-4M5,hX[GkmMtO k$BZ:HBo Z>0E6?xi!lb⟺Sg򘰥j i= [i&:&??$_X[$:&AQS m_V th1onj{ojo}7u,PH[]֜imaj?/ōt4wο<3/ƃhVNolUIp[Z %JggW2 &&V^A%th\jοxIXVLB_$,M _]B~{%)wљoYXXwܱA;4c8xWjXhhתU_ Wmf?k-P͹}wuvɻ:f#[U2_-iXjiXhz𮩅ZJ6XlR"{&kk;'ad ʿ1%A)dng>)SKMk݈LH@"گoei# _!{Mt4 %F% k\7BT]LO.9:緅/Eɥ5q+֊PZ 5K_H{ϸ"5A;3rIetНmZ.cwژKk9 %ΒǧrI졆Ѷi}$U5ew}ۿo>IK9vCzob7蘉oԔ׏X;Qly/hmfA`2E 1!`M~mTҼ8OϜwBeH|]3!YvWЀλC݉@ma;H*G7Zjg&aKhZs5l8>j8HrkNjI\>A [2k(H0~q`$m}30%k )Vb^5b&}>_X Uv>1 >V C:"QIlDxXB&c.^B.Geniϸ*$gLwʻ WW\e+D7T~^2xoJ肇q!NlI5bG++KJ-ަ;D_< v+XύPqYh'(0:jJ0;ARQ[3 +dP>-'fX !P!̞Jhأ0s7Xt M'G^ZKkW mhZF6?R݀dS_ tجadb$8ʌ4~ߍ_̨Ouҧ#Q %I}'%^Ӗ[N}uxT]w&:98T奻yobw?Iv?Iw?Iv?Iw?Iw?Iw?Iw?Iw?Iw?IV$<˪ '5~]4:)f~0lhuC̹$C)(A" ^ˆ7PAIӟ{jpM fC3!16,r!z~Zt}g)9 F_ _(e<#*  jVRu/p}bn |0si [$Sv(Z톶=wCe'W%xy18 _Rٷ;Jo/1V 'g Q5h.F>P_tnv`9;2Qrgz[[Jwnmc!0~0-||4n}w5-~4:x Kf^A[;ã"y{{R?*_1qgK'hjBpSt1XՆDn <Ʉ2D"jyZnUH$Mpg*ӾY Mw6&j&tΠy/e}92K{?A(| G4= ^Tb'4Tkc i/l$6Eg tU;(_y ~$ƟP|@Ϩݗj揸tH44>eOJ?t:bpuPY> - ^{PHy1yT ukiWy>[拠45\B4-`,V]LoMIU}|(ڿqrKR9',q[h;Sd>si9CkL˓LCͽkl2o+Cﻶ[L8P9v߆Qr}qTP>i,~Wf${E?ϬVI| WsN@ko ?OQ/ Vq}(dE` .dk$5V`ߔoa$$$$$$$$$$[t?%uo(RFY33HC h[%c34 4\n$lzoMx2>BU@QN˨7z|lo!߰LT/CMSf0g9Nԩ( =D|Q P8%~YHuIod;7kxQ);;//`փ 4+2`j.: uU}ME7=?WO?vv93`y2E lTqK_ԁbU8}Uƶxu#M6ldʥ3دe!Ō:Zj#)K_T][y=^}9.a\]rKis ~k h N} O w9x ~4mӁ_ɋF%+zQgTpo\JKvxrZ<ל Q{TQ >P@5Xk?V;/$Q'Ӵ_DL'Ї-gJNJvNk}?oiD"G/Z[CJm0.GU :XXܬ E^9ЀWK@3S⏪c-$T~ZDvθ*bQM7y#6k2(_{!k`nkiNtK6&[yD..Bi(?1.o2G%.nEGO/l55gʣ.SbH%pWjG4eshyl3yb8Ү~ϻ>.zVjW;`rQVʗ(ҏO3_wS ^VJ=.~Òٻ,Y;R h?}۾(mݛZ'"Ƴ}n17pPGK4/έ3l1 K9+ T"Kp,$s"{%$qt^7bb_,'0&sz F=hl#[ut~ญѹm3iٽ~pC,|8>9~o(m}gǩ?W^"=Ty'uuNO&WaԵ۟G"*},橣w(Y'wJT Aӈnm3ԉ)>qe}3\O~aR-׭r'gtP.^{Jk<͍n $eZBLP9U9+[Ƌ6R";#J7ӟ:֕ۦT8?ׇ ?G!4^"61^sa )OPeJ#Kjzt|r U?)kU>$QMYqbtˉFxe O!HH|(gACzM&Y?^3'u}5ct#ً:1Sp:U(=w2joj.H ZNomG2mQE뷊]$B 9屢`C^ 1!%h\=Fpt[Z" pe)zKt=YשE'5o!xd9i:Mʿjr,hqw~h-8puz;̴ ^DS.,]7oyi28 [4pvbb1^;i0W<9Pu*fdoQ mqs|D $|5)$g݆"+!ĕ>9 b!vE/>]P*rC/kEI Ʉ7ugrT߻ڎm(7`N%M5H j'ShY̚(9t&ƭ6Y@gw )gi?Z&C>Ats`fcSWzݷs/}J[gylpS(4oexn˕?}, om_%MG4=y)zc,O*5b.#s@ f/>È_No`EVhOC~o\آ@?-{^rՑZ03 3?^ҡE,[ )#qgԎy@״j>vE@8d./RpC޼y&Ju}Y< K܊CR]q*p>jޓN G4~7^Dr sCccV+:lGO[v7& d'E^ u8"s_H+='s(I.T8 :iGC_8xn_ 8ynn"xa/U{R{5`9tB#M+حӭ8ڞfF'/V,KOd1b=z]/y3Wnߝ>tVl0mNBUGۑQ=Z)&TT\x.^HNB\4i*s8"3p"7)7PW <4G ?t_,zi蘼YBBQJ/g T|jc<(qο +q>c(8*~) 3ZuM؊d}iFq}h ƿff A:?ngpXDT:2v)&n?҂Sާdh჋.1>xO3_j7eKtw΁B~|M#?w8ᡳ#T)90~wΤJ8ԌquԓҗS .!_UʵJ{o6n\5E:!a'wQ[<_~~f}|vhลsy4;m %7"uDpմ8zkMӅWco<p+KDT?~&%&PI7\(c&G>ue[zEZ^\+ofpaй>qkB͂CǪ^pldܿA?#3}?m־>]3>tbQ6WNV-so6B7ADSx鷕wf`+ yqPX=Ws 0ҕ(3 c{=>DIF\L6(bIª⣝9 ?HHC[rF#)R#B/jOə)ܒX;AqrHV/]DU$!wksqBg jZgGKN32R/0;!Ki Gc}{ѭkEwsZ޶km7ڶ\kZ͵&k-۶\k걛km7ڶ\kZ#j0\k"Pmi?Mk~wzW~0wB@ c7U$8P rӪ@ޓL^#0D@W@Nd B.VR:h*KڦBG5Y`Ȏ CuG?y]­w4 eBvL3> R ř$Spv@ 3=h~A oqu ,]6{ c"W5S;D-^6 F6IlƮp#'ܽqz ))xF9%P}J6/Wƙ&G%(m̫cv#e[CuˊhXt#]-ėZFq ӇOknPsqhW AtTʿ` he\iMMԏWtP,f] 8q*aꯉ@܀,gN:O;*VIRF0[@RgmOOf>ߥ~OWP-]z >̜<':.l)xi, =^v?r;[S591`OW-'sj e1zn$=$8ETAJk8,,Ia}S\Ku 2|swYiőf}BjsIcQv M$Bgf8ZXc Ĕ_@J’wMegV0'goZynpO`of. #ůh!Qٓ0LK5ρCxoC( m%||{KC.;'2p4Ag%ggezP|f6"v1co5tUEPta$@_I]ZD̩yM%BqnM!+*bC-KчBGn/ ƒ+P &L./ui]0FD$گX'm %B+le)-e? ?)@ʪx2VL=CC ~_ s{,R)ޞDH8)~sx}WZr$B ! `6,JP\U;[vH'=|=dz—ja:P9$i @CD+ TGzA9ڶ|;ՅWRf"ڼ 7Г4/?̂Cr~eDk?'s?'s?'s?'s?'sw.B8UBq%r [U_$YYxQ͇ Hh,sI<%/]!7B}sf.4LF@DĆsoe0dcfgC?=2h_ߒcE oÔ?xDcmtO,5C*1\;Ϙ>gsս0 G%] ,ꗮš,P$;Pd${""UB+ݗA+s_@s/гe)|4rբN$qzSvڣg]ӛLV7*t&(T!V @u EiK tߤ ûP`1>;3`upXof͈ к7B9\lO!3_J0e/}3U@Ҿ<6p># B_z<9,E_\ɁjaO>9#ȸ;~ۚ{ __$@#~:~4X0/_O}?;5C9`T,-)͟Cbt0(YG(JŃǷƁh}`6(VXт8aPTV%MÓ ?i֥.ր:߀o>PܞmX Q7V`gؔWfxR%eh.kYBtJ[R VG+8 y*u;Ow'J_}b^D?bZxgy [ O3i ,sR X1ܱ©ƫ;oNPp// }.\hŗ%BE{s:үap*s]No} wxW) %2-|n.j-y`$d6AN$>z J|uPEb B҂{iʏ@WD{\ʨm¡ם>"qHjBӬ{ a$)qDNu>Ul j=%B5J3 aՇj`w lsAkZ; ir!sN򝋌ZJ܄du'ZFME)e N^A(;cܠ/F ? Vr1̤BI$F@HM;~-w Ms7!E{V>w.oGK>=nWo ^!: X~o4R Wq,39|,+n.]úB_pq)h|h[O; UnO.]j o,_i,@H3Έj797 6ŒdZg""~F 1g?k?N_ YEQ͖toyLBkנ ϔ:NGAՌw_ QɩPJBu婗>|W=dϜbpԾATAk:zNjUA  1s.iTl<5v'G9XPg]Q(| Uo C $/%#qK͐c/kêV !N|}@CыuTauj9GEE!J#?Ԟf v16xsGlpK߯ay鋬êp"?6 ExV=ZII-2Bǐ/ 1O:!C0ͥ-/qτ<~IyF!|=/s`ޟ|yȂh/4V{t)w}8㣟W![}>Q*bn aegSr3c߰?׭02z`"1K~{5PېXdYw#.w;SY8@8cQǹH`[0:q 2o8@_ft H֦AAN@sQy[B>.|]I@YG8i_[bk}+wj6M--sgpᗤ W<_li&.|.f~'d`P*wmxӞqò)0v 7Z]X.[w!Po贋"4Z廸@<5NDkg/@7N2͢~ɐ D#`Re B .ѵcj6g ^ cWjerA 8{l5Hn/'j߄و:j[}.t-z*⟽#%̈́SRүA<.eTRTv,27_n,Ԝ;U 24f}Qze9}r^בoQN<5 2Yj{w^:6,\K?*u Yi9O {},WTxWTWTxWTWTWTWTWTWTWTy2ۉ7|% n7q; ݉ p\7U"`2x}mnŀ ?刱iTĕ^àL#ӭ (m/Cn1p)C6('`f$5/d[ 1U3^)[-y7~c1z)`WϏ4l%~so%6K$;hUE^٧֫إ3Ǿ @$qA0 Ps%\c.6\BKfD /uJ S?iM#)˩C^s'R#]O僙sy\L{\`veu2͙.p5sfi@&FJZL7 fRrRN|ʹ/`qF$` . aS K$Gk _~^[%(-4yIQNK #g_pw @/хLY9IטTri'_a?\b^BSh\ |BmAg!/cV°'?05v~mԅ#Tqu!a 7p .?Fzj#-gߓl8'aZL ާcxpݛm#g uL eS3ʚb=;0.!b:-N^Bn;b䧆OՒ \"} €W;mp#'^8-"Fr`O"wfD%{ce.Y6z^'@?>C ?,*o3D _cCl GO .ޣtjt/Gvh]U',ťX?Vp 7]֯obiETdL7PyHzeMjLOSsl:cףpa糉wC ,sf=f!y)ksg.^Ί.T{^\4讽5Ȍ~q絘^>>?7Nr WJOz {K<h j#Wk;RyvYj57,Wĸd eۃIO-N'l %_;)(=9x sHȮwg8` Xb+-\卽?+8LL(%lP>}gg.Z{.z[.ouaq?0u"\M⟐IM^}M7ށء&<Z7[o0yKPDW]Cl Ӡ v=C7Qc͚a-`Nz[B8^Ğ #0P&޸l-eЪkcTLvuG=޼Hi!K]Ě1Zp5+Z4^H|F+y Ҿ*y& υa[1dւLG .1;=h}qM'>{ CQRùMTU1x/)K)/#BƁ-h"w+!hƞ|$ B9TXY يĭ?oTFͰ)ƒ [c"kɲScI b!:6LCuZA"f{bii}i y$7~G W0# Ç1Ǧ(d"DFHTUQ})ɦBMoff4@JRc!rMj3d%*x#(N 9/yX4u_Nv'Z6;xP}C^!b͟Zq0E#^7FBƩUx@ ?#f^Z9`WdeKΚn찠J}Jiƃ[ __ң|tXp|(`T*Hj%8h,+;Z{SYUIFҔ,HaEG"Ua#zPb,}J/A,7R󺷽Wh͕zփqhayU3TGn"5Ɲ{0N19e)/܋ yzgńGlƚe_.+ ,,T^M_fviyx}|Y=GFhاo}OԕW@vYqDӿEi4Ama8M}P2.apOL\_=5T/b0ZA?Ґ!VCr[b+O",mtHۯ ygۋH_eI6c0 呩 )}t1oN{OD'|O}C\\p`f4\P@LXAJ|ї0BYgԿx?D~I=g.f\KZVćǑb٩ C0% *"aAI[%|T k B@8KtVeDk 7/amGCԶwBpUȾG>mI (F_"2bHhr,D\ϳ[1Cjf{h$tڷ_89gI0&7^ f)'G!yjsiQ,)W:kP6͍Rc~EM9D[(2Ҩu A?q (2Wc)»չ+~?k %C^4 Fh.JbZtFcZL_"sZw1F*j"=놗l$U!۵,A\Y{ wR"+;޶؅gW0Y+j왺t8]`A띞({u"2we|ִ*ks/DqzD _[\ll(yl"ǞMn\3Oq]" :OMhּ`p1ar^7>Bx'=Q:#'ZCnx|FЃ;jc!҄Qy"G8 oȒ6aE z |G{xu1rJ `nvLR.6vlxnP[Yj:VyFXl΅!o&  wgڍ;oSO'֫x-=bSL+iv\v L%2MS X8:`οJ[uE*嘞(c ^C8HĦ"Ddߐ~C`HN(̀ a1 2qŇ]SW 1zo`?`dw1/a[*T{$L[ȡK0)q9jd}~7}H(IXA 3_´AΉ-`$SO]y+IFv-l[ s8}I&8&CtDmMJA VBxCgh=DnV)Xzmcd n1z\bܡMNJF٫g]uE>j)sCEVEa6g|HVλqy(gIOO"]mJ$1ߛ,)z"ś! {fί7z{fAC݃jӈwG>t!J@InDG#޴LG^`iZd1"*$ab;;`J㇓}!%x԰~ABoOz<3p;8!% x-ju1/gY <k0fsҹ{# '[Tgi\R)٨o&¸u[mՠjxѹCp:WYH[ =]O]D- %)JB\ς2.+x72gh yiʺu]24 Y7pG-0? Ah LN :>di>!!`iOCr!K.EC.WIU=.AZV+<!WO"iH ܪJs(r|L %t}5՟ T?ӟ JON#Q>Q"} "pH)fZv/q8d\Ddؑt>p3Z V{,1S[EљhLIIFNtQ)%$: C^7Zl|_"A>:q9p7 b,D혘 ȞFt*x7!R.S’.be> {Bysp 7VC>sK_.ϪTpKe-rC {>tlI$iQʧ-`7# La0 /_FVI5r _"#"͸ݙv2i6E(>s< ^I\&Y%`" cpJ3[K&ĵ[wYܭyjFg+N|#l8C%%t7 H"3cf̞cej.YOU/ |yBǑ#qqͅƘS QtN03p^ãHzD/mH7-1!R#Ƚr&j;i "kRﭮCuZ%5̒lcFA7M)Ep*- ^|?<+4Wo vfo"=XF*b}y3YQ(s\qct|?D[b$+; )sk3nߣ}H?->G2 0?6̨W0;6ޮ\ntgfݺ1,=5dp\'$$.a #Wh0:Xx*9m'h z=*^>!\!L7ն!4Mb"?[b̥`%c~gG:۠Gy<-bٯ$l`(2's 񸬶ZY|m7U;rϹu`շncHuxFuӷ?x,ߢsf+ Yj?jt=h/+s_4;08EAXRУT5崒 mόR}z#ݣ#h#O :k"?!MFO-d3y8[ n7?))&4\D>BsG.1{ \W>Œ0dC95miQ2dtog|1̯E[0f -Ov 1&tD蓽Sl|ȰȞdDBįs!8:cn/?~DYm=9QrNqNGd$,1 HZjnwH-qcCڤI2jkF&1f7\+e]?TЪ/$3*ǑMeTPvUnVl(z5= هwzF\g΂+E.7fr{_/O*ױ#H8/1MmI ՀIa{P,Ǖ>6Mg G| {W-/es{_aƸVFMP3`&hd#ˍ\xŽ2ɾ]6v݇"v}(b[CEKCEPCPĿ$>e>P"`2x&ZN6 J`qSC$k %/<ž3͙#$&W* okAZM0`S_|sΞ;=qHpKޣ৐kO*ĐߵŨK/<gMJӛ{Z5aH٘˵ϭDEO]{YmFHgL!-CO@[cQFxOd97p_ tgNQq >'DE9nbkn$|+KFs݁Јd0Rr\!D$Dӗ% toE#:r]jF$$8nnz])O(qnl-tnS8֣J9AY4Wm<<:eX}?8, GM "^z,ǐϝe1 Y^$4sH$qbv [.:[Թ< 53l:-д_S=(=Ib?l ) >p1q#)T45y 0TNS8 pA~֖-~Kd*bxv9hNSC7&_!)O=n*5wΜw,M&")$az54977{޺~JWeS<"K24Aϵ 0Y9W / *qrJL UIZ(ȡ$R.l RONςHLۙ+cOQ|I1 <_Ki{^ß {H_<0 OXSh Y.H I=I8AnD7[:lj; |ݞMi)b_XCwR\;s(~" El34%v)ʞ U]GVO8@tD4x!͈iyv^>jQM |*~wQp}-w@o:=r>Bf8U"b|9RDvD*kicAU]i,W$@.40 t5o:5`f|C]1.9؛eׅ|B G!>ve}%/Ed/0= u0@Jח/mE5=~0s&iO}D,$g+\\/ؿCQRȝT#VK@`B<<\ [_r&\ΰYCft5GM: J_Go5Ufhį^"Is> =}ՠ$냌!Y/eȡrtB/O~˫g#I{d P^L!taD0\ze/4i(3h{f݆K% ~cD:Cpk7VM`=*L{z cρKIu?k?GI N<7&^!g^>uHRc~Lp-6CGd! >Pr tsH߃ x+6}HC&g :Pgk?$ ~Dj:P2.ޘ:MAYÆwa .J<-wlnPeʆlda?9QɼKz2#.hr: s>Xj/τ~L_z`xz3.U3Sw<,ӅK:$_@L̍6T>CU;$IGm@LjgUW<9QE_P/t'hʯ@4ofP?b Dgk:;]}ל_akfI:Ɂ$~<:Gm^{@,Aq!"ivS>M}o7nvSU|1+ PmHtS\r!)[.^>c)A"oRgI +D]wmkSKnL<6lO j+;b%:6<&d845_Ϭݢu[g2D\?42}kܟgC#"*TZ< *6/J:tp"7rsCpBbqJo>zw{uFL%'^RM(T%isԆ]p ;sI",x @qXpN}G 7N+O')C{8IH!OOSxԼ?yP W \RiD]9﷔fK!*Q8 \9m2*Q=>C4ATOf>wV!Al9TIOrF݂W27?ohSB?6[#)0I;6᧫,Zoө4x@ PC?5 XɃUM.ElBjU!t]W'}S|9x\je"$S,82R|!WVKL%4! ޹Dl]د A `^3~ oJT 7kʿ_{J[QcGcqZbT}_\O}mLMsUf0[+= ~ 9%8~oZp$( ('ɅVkhi=~qXhӣ~PgOGg-= >+xye_Ȋաqqϟ!-fv:/͘t sׁ X:2NOm.Ѣ؞;]j2671,g8tf`b4_81=$3D>KY閣t!ڒs^z^xNگSLu!^Aeó E/>R SƏR7ӿzA8k̵K$r"X_K{d]-ul脠bmdhqt/NrHrvOO8)/^.&6*A2gRS0rBh$y]/yҬvC)-ν+ߒ$x9C6:ȎJ~ E`JFQ#E!{x%5σi +GnU\ܩąBY'NE`r R+Y5(!ofp?-NwT{;pϜFǙyN]+Y.en1M5~׈EGh"=9I-S?!˨Gu g,!3(M8]~֛FS(NV/z/4;VEN nqp 5*)UP##)r3 4W" aV Zf "=ZfvG3bqRɢrYֱ{OH /3\тz__vgȾ0}IqlTM㖟Hji6+~G 7GnÏ8KPy[:Y nXs?s{r^?۷SŖﴨC7S*|l@=y2˓:+ fٌ'qy}wx84L RP 04 3?GJ_=mxLL:t 9zVgq[zwpcn(TdYP6ϛ H_kf"~j|D,H權|!&m;5\0VW&"jA^cRz0{(O6ȃaPxb.d\]ei=&:2ډuy1%z4'`~M 0BaKs8}Ox={,p˫oװ\WfÇlԘ k}LZyK0+wk8ujFjUU6xr[,3!S2&)ŗݔܕ|[t7~P|Á'k|R(yZR f.SߢpqhLA~׵󟜚^(XZ.Ad.vry*lMj@zEBU}xp3= _;Xpj7&ḡFOjP9({h"=<{z+2֏aGw}2%H}pѐ35?Eˁ7ei/ is`cȰ \ze>rYJrއֻO9K@I[Eu'\:-w=Bc쿯rxhiw& nS.;uSմ7!;n]:hE ynHt;E6Ĩ($))>i5Q=r2@KPK Rf-ZERBEX*b ERҤM[g˞7Ǵ3DF@>~-YPtY-zgqB%֚HȠ\TѝLwR<#%y8 EYn|S݁4WJi}ƙ7{ + 3嶳yP`s{~ Qr;Z`wMӞT +=Zjr_(Y:Z~3u? ԝ Tj m$+x B$kË}[(SGWj[{!Ͽ4@, z֦پ Yo@zP/)_\aƁuj*G@O/>7~pD@GàT^][ ^_Kt;ﱃ3G1}aZOj_9P~JoZ8v2Qk}o D:g`2{Zy莕?}~>-x * Yč'C U!# \T)NdIzq _i: qKOԠAMU/!N1P m47 N9M5צZ S+M|'XjM' N?6(կA ~E *oNqҳ /I8' vI '5X8@l`NI>8$$T3B婱nvh%ya 3|(jL)H~sUb$xZo:~A'K /TvO'?xμ'JB \v\j eA#PɇE+^~Da)څOR8%x#jpMO#_be#2l |ې[Um?H6? U/L8Uy~$m-Euj+*!4I{[fPu1矐]S7 YEx1xKY Ω0:-@89C7S[?΅r! q^(~ȇwꖣ*Ư@%О[3?ۢiݤթP& 7G,BDo UΛGa[!Gp$^!bN7'8*`±y) 7|AYD7@BX?4J z ^e0^=k*wfNyv DZ yk)W[ cuf1yH?^1,}nAg3D0fqH˒"Oȋn17 VC)I^{:fN<T2jϙJd4xU 2;fΫc0;4ju B\o!ʉ(7$K) e) G;> ]kV(#=Dt~/ElQ_/wYPn'&ZŸ6 [gt |L_wWOBW5|6 &cR dT&o@qhOݷ(mʏȫl 􂄆OWB1黔^4_ tEU(fV;>CP9h*~v'ox^+?^8g|Ptqi«sk*(EץD/U|h:Hd'HA$e_^K >׋G6z7ZhͶQrRv=z'Ar ̈́ =('rc!Dld DfvE댅QZIcozozzzzzzo?>07L~!UϙO(Ax4QQyJi&uZ1ԴSzD˃H{i*evInb@_}~=-!o?l<9g[yo#.m 85v to##~`׃6!L\9ή~A.ޟCf&m3`C"ȷ C?R8.ve,c\t?$)7wܑ21p=߱PxȎӤVbM\䠌=<67myPsZ[e,_xEOHpS{[g3Ku7mZk(Di!"{76~ 6; 5ͫ-»'%pĭ1<q ggk!Fp_~xovW]4&0޳/Y]GԨ.;@M$#E!F1CTn>/H둸ozR0Φ,׎=CdoN뙦[-ē\5g:ݳ(u'\ ^}_R;#GB#nF343AdkHv=Ctځc"'n65z/Ss#0|t%k0Bx"Uk^2Re6h}ϸ[> !ր 2յ{;yH>%ڸ6fE-G5Ċ^LEGBNm5Y!SgJr;ͧp(XE(~˖eaqܳ&c|ؕp q.2qmk.m!NȺP`|\H6gڼ5څM΍%3! &0(ٙZ30/#g;ZZYKp=b#ƝPA8!鵴pS&GNFρ>7d񛦌~qޓ B`Y}ϘN똼3HYpLD$Gyta&w)=y+Ap4~G֧Vl$<$<ڧi}@Q~ $f NŚhLՊ2E4r Oұ!TCrgCrc?3ﱧtOt!oaP fji"jx1ǙzKE:q#5Nf+O}cq3c,&Ə Cg4Op847rX! ,N9o`E0AX9oivM>*v,9/ڥbƕu#Z刪Ĕe4%pż(N]`Udr2Iۦ.94]\%YoDzyHE21)4j9rl5.*F¥v$ z:;ͥ}Y]W D: HK( &Bɉtdɗ{xʇiHLB$Dc~҆#ŧ؀#''CHG ~u9`VG"D?# Wq?=]= S)ſ M/bFu9n6 brWҙ˚ yie5i5=tTQ DO1>#bv8ŒP [3CM#03-kHyȭ_cQ'8}w||xy.%e~g `z+w#:ߟ(޹~"Ҁ;!4zQLBzrRbc kHrDHUc{#A \MSå=QL'\f&Ro=CfO!DXL Rጎ9Vφ[/6F~aHCTw4ݺIHQCW?{scHܨY`N &=Y9zyA?.(Pv}_Əx3q=1zdyoɎX:I0u9/ʎ=,X'( Y0uQX`*o=3<< !oCG6V WL-vP8yKnO@$J%F^ +@KpkKio _6HBݟAlTN"z3B^+:֘d:\ϻorI/$ݚ6=`zKn@ڷ ؚi#?v{ o}] ?GCtGNmA^HA|Cf%4χqYŰ%{-ҟr"W"hv|E;j jm{G$nP{k2Y^T(GQ!֝+*.N#l龅fu>=Lqݖ,y~~D}trFUF/ۍe`j֯D4Wޝ;`}QM_5oѥ`bӽ&pfqw yۀ9yYPB ٬L-lWb cG:' ΄~{_O>{() ?'iLϟ sPm2 {<8M32!;lȼ} $>?AnyPBpuѡrTs߀->c 78a`s Q}vr=ME(~HDupOyט3pA#+A4umQ謟\4Q8[,c|: H4~h23-py,h49Ө ܳ S~ڳ¬KdAGePv̆ߣNǻ69v9<%bsWY@ꊥ[@).W4׻t"xv:~a Xk~F =~͉B*~ )Avafp,C ~Бb.yA59)mF",~h PwGhIoViG\"Sr8JLvl_[]"}]f5n1.!L!ϧ.*TtpGn⅗i6w߁eAS5^XL'M5zRcnGhWw vX:44sY|C 0iq\pِllpFCjk'{H}t\ji޸Y~6 偬6( ؛CuHnAa2|w#Hg3Z ,n)W@XU,M& YkDƵ3 Et ϣ>|l(= jB}V3G.Qz_!7F052E זBqJ"v?CqiE v;{OV (0hɸϦP/&1{RN=C *\&q;rbq>A Lϱܫ {lLe*8 .)QI=V½~[yWl6M֩03]4( &%g\3Iɉ;m1>&*b]4$ 1TV衎oзwfv$Z5ȻkHz֕|{+/BLXya? []P+5UR>fh3@!*-ͫr K6s=ON2TF<ɦpޟj6_oG2Utt!QӅj[-!jܚ)_3wF$c[hLJ㵚y-iI|PJ:v4[ﶜ!~~Y_%[yTdʗσDQbYkjSr}S`&$q+̻q`Úޥ ]7V].`ۈ dF*yk0cWpw]m /:Ѵ#t1ÕEu/-F%)> Ahч ( x:6ug[^.9(?N|n|-aAgzSb77٘[Pf8 |G5KnC$i>uc^4Pyz^7#+bQ3E\/H.;!#G-<UxJD'3 ݛy9HBuwI4RkGB6tb=7L9Fɸ.;|B9$8l> *-2Pu±'3,_;R~]ڵBylxpyL})(w!;zLԻs쨫xĄ'nu%ʐ7w? HC2ޫQ! (ו7ʅK(E1/kҸo5t`ϙh4$-7 p?u}vUz,oT C{֡zgLup]rN6_sC5Bo3~7( SRro6ߘ`~Ө>lDȀK5k-|Uq[1?Bi_&DO"MGƑqsnFTJ.ftƎg;4ipCrzmTy[&ppM7uޭQrIB2E lO5,E&SoܰAtCLD%U]fVbsJb\`s :T"Jp6DΓrҌ\Tu_ZVF$Up".toT5W8+FyHpsc ~>9Jߡ* H-aoDJ75FĽuXɂ^7iy|ʖOnEr~dOb}񆷖2ʩomӌݐQWhz#ڵYj(HPM9(DR[+${h_$T5adۊ}O[P<%0FVU]`JD48x֗jUcQZh+Qp\@w#A'S|yt{!Ըp:ZvVf&;E+y*!D\Ms<,tg' ‹Z٘G+6U'v~4a2g%7a'қk@$Mj{bdU\Ϯݡ:mUJKܤk\`m)EȢQ~j}nP{S"v7z(` bJt*2pj C2dT gF{w"MeP2Tˍ2.`F17@ނeq /U!+dއ0~ !Q(S[S%P21 ϒ0ju4brhAf7ԯFa%zf&$upxCN Ա9g~2C/;00] "&Grs@ZJ1f~(Tchȴ&q_E6H4D\Ag=Oe*:pi/凞+ӡ0x[pd\k/׫1wr!bBYȤ f0.=z|=iP-amY|{Ε:*s׊x@d94)ުFn8W ?^cPv^_Wn_]2 S/]o O+H"$;%_W MJBDhR^Ƈ^ǐeGvJ n qYa!,ͅ΋fo@UCϣg^l-PMV ;%S^@&11FJ߂ޥu4sZ,Dy<ٽ!&vGWu5TYó$O@g7+^C^xf t i4m)`cy̗.ص;_+C`C<.x)aZIY{nVH? nR*? /+O+2C[@/ [&b]Eip;x1ZQ~~n|-D{]Y"Gnv2|R{ y„ nĝ f E؏Ið8dמy ( fh[~<M,vܽT AB2gϭCBh o>Z'|@ARv] C7<@Ob?$Ψ:Hu1hNC1j=Dwn?LNPCX67P懫ޞhtƣ$);63f`hM7d@IIHc[Pi`d W.3VWDC/4P\9pX=J{Rm,iK' ,3?vF2!¹_&Ԩra:p+caeH# ,$3ڙY$ Q$uY*Zv+x>!ګV+?t|SM1q:td@'}S$X, n~v71o!%KU8-Q _l3jZSs)c,xމj<M>2W/K/:i ז,@"Z%Cz]+#)ҝgL/`NbO~ `W!A@s M-r<+)YabhМ}l:<2HX8_ U %:|6$mYm# fM= +~ڣ JG5_>4 ;0WQBd ~M/kЛCeAG6D6 RlqvG?Phl`"U=~Z} %RPb\Kv p_u% K&),CfaDhegm4 xk8lK.?,:լt-{'C~:-}#%:PrUW=z|![=Of/Em$($ e9cbh|WDfUefJ:{KӣɚNP{$3LQd .@/1|6TkM*c/Bf;i 9 !݀WkxMhSD^; <;Š 1&,@(/{ $)x~R;p"׈xYO 7j%hOGܪclU!EcWk^v8Ge~T~=9Y5viOx R BPvi{i|]ob{&]IΦ}-;A/1)0T"yeߎY2҄ Hyp c߽!d]bMw8< ߰W[YFMv.eŸ́P8%#i6*Bً,8\~LWAS# /z*V>{q?J7 k@}h7(/? u{b~O DÐ?]DPlk̹:dx5j@-B{-H@/kUCxgm?yn+02zXP>fc<%i jVX8AzO %VBrC !" WQ$##P!S1P(+:K4u:CzHd|4vLxo [-T Kd'N*@QP%ub1;NSG,Mlmd>{ /W~M9".ρyU}? Ɉ6J F𹲞ퟪ< {VZ>6ۘ]^ٴ;ruՋQ'5q`fON*>w oiE[@աDG`޷i?O&%y"c6;] D#𼜟Y0=R랆wϜ39\v9mfbhJd XpCU l; l 'ӃXYPfy#GطN*UX]{.azy*џM&Ccu/$)- zAs_fkdNJ;{@ׂ&E.Ħ7o*':a$>Wp84Md9·Y>B9^Z?Y -#ںg'hr؍|wH"SCK;+ԶGrk ܭ-uzC0>`ZtlwJ= FkAV#d[:w ӛGM]]>aV }hrk:8\\kAaeϡ!0j9S B`5b;-L@ZOVnߺ+&czazsyCOwvη+zs$|n1@BWa R_68=۟{YY9s`ީ;}k ieHóD]EJmM]0\KGUjIlXT)'$ϯ a'C:(rXC;)4M;V<3S7♱nkxsd,N YmH;A@1n*>虋n_8'MM 1|7lqvG!< s Mpwbw?7jeRyaAЄh[=>b|Ul:]8 $h[ڏyOO(̦LDS,[y7 ә{*= 2`<'e_"'"W~/NNoNֵUTnWgvѮG5deqN7쩴*ce-U{$˲?^*.VrCQ0:W/&S^CgaVvQ3hЪG>ZIq[Jfurl9v#Z;|~)&ρW^[S=EOω vf0i]Tl ] i:9+T?Yk M PFӝ(_)O|8*{ ES{?"/~̃ bӶxH?{1:PR0u?7 *FrT}Xog~$z#ޞ3=$|qNm;d{/7{#ߣr7IxuvV>;||f3)="#,=#=u讟ެK{2 nY^e=AXHE^m)-6 N#(z@BnNҸ͍&'#nb*FJ^SiU?Euڨ֏oy~f_B*R<-JDH3\b>^i$|q[cX{ewvȊ0 O@,x] 3IADzd̨_nuB`[i b冷 $h;q]%&. 9Ng <9sԐIK0M "J4yp#9Lj^DGAqǝ 㧘aUޕ Ͷ.0~O6fOɖy%NUwvn6 䶬; tbr /|6;,>BPaPа X!oT-15|%`EMoдVC>:_^*!/$lEסGbb>D_WaQ})x R dD;XXBCĀ7h %iJ7{h~T pz;RZ\`-F.D|v Ĺ\xٝ/(G6 2֨s),cx5Ch+i[ {FAD9ДahڸxS /ÐMWb"9-reswvA;g;  bhY8uLe!=j8yJdAhOoh)< )u 0w'@[!ᨶ0GٌO^~NM`uuaMO%:$ZT ËcO_Ej107 Nʸ5VƻRX1_B IՑ n}8As7vo! Gh}7"uP9?2 H&+1k@5GH|9WBCHzFX  Qb/zY`a 󗒚A>V\֮_+a Dc/&3?oz'!QY،\s;lG3xm"Rs.A ?JDg(uyCQy|1c簺 J 'vQ`zs$WvACO=Ɲ* ,7d =R.X&@Fmev/MR ,ށ.5J Z̛xʇv~/8 d5vR?@ʉkJqеx+|/ɱ }<3 Bb.x@'Ppv a|jq,zzkLe\Pu56 ;ҿv&ʋ+sВa)>_Z`naw0$!TZȍ0KNԈDe@+P\(H4AYgvEqxEjP1X!B[7ًͯ\8v(f? ]\DNdbǬ&3ftz[{=q!,F0k5ƱOC'73{DXo.ϫK$ Ǐ@uaI ?{T q\6;YtC{W7#*/#zZBt-˧?vA7KX.al!^cz98 q 9AÏIK妲҈`dt @9BޤVr^|9?4ueq;G>Bm0wA]|e:kBqHi~=z-7_{^}@p ?v)jB2x[L좫OA$>c֮>;Z(q<[ |)K_~,>9 *(xf?T=W@>@D=t7~9w›S@ q/mL>9\00^ T&QxC.ʤ?M8CM@\#k4SIF^sdtC3Pz,o"/Q< Lwu?8 OM-4誃h'Us=c 1{L+3X2pM_ 9iž1]DR#%dׇ/l5kdzSlsќUvWf|-g͗@9k,?';D|"FH7+Z&v񼢇o| gšţ7ܞWR#6y6y q|t$T p /p|2)fMW7e154fo~@ d Xb; 97~JFr 'LKWW^n0H? @7>ㄸ犿"c0 >넆<@&^Cgϳcmp$\IJgA;i@ii`Ƽ!ƜL2-ϋvw@tO{cl|2m_y )N2Fh94Lö}*fV@?d> hz7x2@a4 [;󻇓m1:>J`# I;EoCƸ}ӹr03{ Z0+n3o!3~=a{9,S덟O"z!صk ̧"xsAv-gct4i!`:gK8C!4ߌG}=#=#={zKÿldbSHUcc ZB</.$TEpi|Z Y57OHĆҴ?s+`/6jJWDly!6<0?.(/ JW X5 >cD#dsNKi_+r]e?ڪ5χ fVF@-n0Weӫ63tϲÕ&0}V; ZQ ^U{Pm&kѷTåR{V璅1V2'AU tz3<Lѹ[H#AC7xS/djF?#\zùt$|any0ZIWT܇齩 xʵ3g-3p'B*q3DYҍA2{j"a_SzkVhǮT-G!*;"D0 z6USPa#=p VtX՞꼝SitǏ~q$BbH^&2cgl;'Ldmj.G~A ~:>vo(k'+2 .Db5~2=h&{SU(<9%M ZB=U̐,\КhdG\=Ţ@[DL woPĢYG=}f)v% R߈izI%2T/Pԅ5?k 1HFrЫ7DN@ﰊ@X& @"THddTc v?8^I^?v4j^TPj29d~B\8gd}ѧoVOIiy9a̬3{w#\*.77+W* .w۾H?P->J02]e{M/łE Zt.ɱGǞ̜]HM䶽sƂoടt-rQ{PAGA'Zhxc1M+|Q_mvG& {%i_O qԩCȎ b0$VGhiEç?U}nr`^'Lqn%|ϕrdj[HKI/$_v 6/f xNB:~&$W~D2sڏkG *א_ <}aW<=nN!6hP  byi~u.:0L,hWO07Kᄘ7nƻl*6\Þ'$˔в"&?RWT⮫E_lyx ]WrG)tZy{@lS96m+H"]zS|!X~ Ҹ6sFXK9AELGm"8ގgO41*}Fn!H1k.(hЕW_V9M@- НΒzpۯyo>2[$>E*>9QD`^{om%mܘ,Y+ dVg: 3̒T̎qh":Q6, f^N{,qtzZギ.uBH;7Q@xc K/_V"+Dscjo{auHWP8R6N7O55Ƅ˻uC=qtr%Dljl\@0jqvt' ^$ǜ`mF=L *AdEOTaba@nL|(7P%?(Nzb>~&^ FegKHaCLyP4-lHT}kwF~֭žB8@(X}GIOo{ cJ,+>y-׿U&6F2g5g"Ie^3$,4aM;E2jHqD}jΟ*J8 ye%a灾D3eΟN+>ôs_D(lzzND "~}=;nz'㪟%~k%}X oO(k8ۧ8dɯg(qR~J@Žx,\2J[[Ip4^ WEizc _Ek}˭ٍ&uS.BxT޻,A3bܰw QrCrDe CRh!MBT9vZ)d:aj>mE㏻Ӑg}Y]/DqVfBӹF3wI ӯ~J-#On ]M_Cz] |ۏOgF(i\ RH!Uh`f;hiҶC_m׿(Tٱ&:x2T$5:%EpFEN>+zWgVw57d'O]ztGDJ(~ 9d*o 턮tCQ`<A \/^G?NAӵ1#ͧ}^CvrKC+5nGSϙ^4~r }f.Y}$NޠU}Oqin勲hKJ spgC2T;@IÛ&Ʊ#'भR MPՉ(MeţMM*>yM.ܧ;TﲺGue ~^, i:RᰧxLDOXsBVY f;hl&`-&aְz^zw"(*Nd[g<3ZPT^Gk_!5jgj 3T&U.E:j| :K1CLOˣ,% Ė7fsG &o_?[vAhX= QM՟9sCPޟ ?t$,j^զ@6FMw=fDDiV$ߍ|tT#G0{eHPdȦXBojK̷>8 nejs;{.7,st1l{lhȏ׎%txj y }ɍ qf&/~޼[pRs-k*$8׏ô^(jƛDj<>8z&q%"W$BlHôoMx| P) τ""ٕ`wӥh}zWW(A_38r)*{ |w ]$h9JRt\{$~CWwg]FŬhncӄ}tIH8&f hu}嵪3tk}iG/s?9Pe:++} ]xe m#`j# k9(9':T4QjџN%|͠2AoPv̌vSby{k9\S&;r/g 6DS =ծR0S>qR.!D5K!)2C##H&/>5:!_LlUp%{ъ8{Qâ)ip]QW]0 t^|Ah7FsA\ Jr$ "NN0}]3"z-vE)g,6?3N =cwu26MV*HӵzMhm|ʇ4$mA{Vq{/;8d,VUb..~ܡF'N9xne2|u8:Z']y5h <8؄'е+cuC&RsӓɌ?8z[_T`\1jq(Jtg'{#-) 3I DD]W x;JUĩOjJ`awo.3ΦOO}6[6~r(څ.(z3R&4˶ j;$%T.PrFA:r9VOOaٷﺻktX<(mx}6≒\4rz.2~b+ $iUc I60ןF:3?_Kѻ{WsaRݨTb},Mh#K ͥ!'EZy6]pE49(}fV0ۻ0>d&' 5>: u{ۯ #6 ݓUIr a'/n6?!C4ƤQW[wsG0kF #Rr >W,!Z%ݟ:aɉcbs0vЭb'Z,;ŮOFI?|u>tn{*5ԁWӴ A h ZKTL3J ] u9//r/s_q9R h-NVqF(k_a<_ra9Jݸq @ɟ07Q^.E991(~VS95O }3bR$6KR.49FoЊotdgFT}T3DA[i[NˋHNpyrXxb`_/b̅$Exb+$GSQNO*Ns4!:rJժ%?£4yPKGi#w]'CBwAl[R\RR\fzYG6>r r=>TK%g.i 1W-JNPcD8C9pl{[]t4p$0LHvB=MH헵;g\qٵ)ȍMBT8\LJ._T XxRc:h4ve{9$C$ZyODCcMdPJ$-Y =DĮ u$Qzz jZaG \fOG#^`:r3%s43M01=~[?3D%v(Y~1M"mb˛A KL{1W?LqC.&~!yYioYf6p"u鐨JTIV?@,ٗ`}x23T`tuJ?^"Nҙzy1Cȟ$܂5Aq'n%;{ ORvcS'O~ą#kR|p,Qg+f lߔ! /jZcYq#E=USN"?+ϴ)'3kE )duHZ:O/u3>o4B|E'lXC\˧ˮT/o@卫)DφSv -ݙqs)C ;//띆^ ^C6gvVg *z+OO-!ؾud,L2ačzˆy5vz0c-"uQ֜@߀_kRRe|UR8[S0ZBVMɯr`G$ctfM(M&03)~0ۼ, f hI>-ni醆3;~P4]SZU#9bߤ8?D>(E}T 5!71 LǼ\/Oh75,/ЇQcˋ1S- Ex?T̸@< }&KFjr^?Q/ƻpH-vh9h4B-]{Sa"údkC9',vr$тVkF7ЕO< ѯN_ID39^&KY|1ȜIhכH%\ܘC,RLsičUdzy=za~(+u4dkd'Q+UJ?35 n3^uVF|9]o,0q]pI3zOYs4O>}QunXB@i-[/\lQyT;g"q¶6IC'nd|C($'ˋ;sBR V{KBn2qD &e2hiO| V6U8qK/Į j)I|^N ّl]$wL~F7^0-I{D c|~_^).Mm~ֽxɣ+P _PU ]aPs"S@^m^1܇hesېy{Z NSZV ŕ ~cu2b{ L{|y\(p/v~^qJ4a"6я+٢)g lْAO=ۋ {~x.Sl.^Krp ЯO|z ~$(UQ2I\h:[B59K t] TiusW:SiCU2vNo5k9}:&l"Qr+{=nr_3(/wu"n݈,x&ֶ#3V!N u.!H[|<Z](}-b:[Txp;rYnMtآԳ / B,1LqW;C=`!/w`i0=T;=)/5 I^ "wH+!{W~8_H҅hgڍ0|3k߯.VIuVE632g9o[d-i'qO_;.vl?c`$ZUۦ!_!3w;em0hL~m;ݐ_=˹yu蜞8DgtY!/̬X}$YOTgbuBBw#q?}h,Ds-\.!Q_?iG"@GcᢎӊV*Gy?<@3[nQBv4QBMy}EbzN=1ٍ< FHZcF޵GUӳ_~.6dq {vGf6dqܫڹ>4Ra{R*Qo2vhC)H$K;,j1w%CNxPJl.eiGТ괮\ȁO8/MLUt=rWPp  .rpKTБLUq qX,^NnwԶ WRHKA!2:N‹.ߥ wǥiqHSE_eQ]*EoP^+O8&vX7=í$cBw!wDNz^FyByڴ]hu\;>H`O@^6^a(ܵ~8l.CRb"XJHAT}֯fzSpsZn$G.5fR뻦q#:׾; ܒԈ`zD]|*>y=aSj~K缗½e 7#O՜M ^b@l_SI*7_`y0 {V<nEcuLN!ø"_Y|tgKhM|hKڟx_ܚ6D }5@,s䯉 TV:Af6զӆ-K ׌nGuW. GH & ֎8OoH9܊Nʻwo+!vB888888?b`wMV﶐n⸷{po{[=ڎڊV︷xdz;lo;nk~x{dz;lgw<[Vx{dzջɻ;nw{x掗g;n%˻=b[#ƻ=b[#ƻ=b[#ƻ=b[#ƻ=b[#ƻ=b[#f1#1#1#1ۦo{ƈo{ƈo{ƈo{F?ٮkk`| зQ l1y+ pml5R`[ ؞)6 lϔL lw@`aؚ)Z۫Y`k5 lfy*_p$]VE nbgqj8 m]Vh{`_ۭޚ}afo7Cxk[xUۭF}be!Ə`a|zw 6-m-ڲ1[> mœ-nw'[< %wjlƻ û3ߖ[|چڂކ*J÷-$6I|[$Oxoxoxo0eKŅ_mZ&M%g[T l6ox#-lF`KeY`KF`Knܖ--w[/m nYx,38זIZh_B'-B[f/~moOh7Bۼڒ?mڒ-~ o˟ o˟ҶE@xKE@xKE@xKE@xKE@xK0%(pJm+T߹vjjv [%l 6*Cj8M$<^]sH0"h1ڈIS.xv;XsqS/u[YSQGr9}$ As[̻z<}x%VLw@igMcPh3,x0qR.f`=wԆ/WL(o+W!>KJIR墀l{/p1Y.H'DnM=.Bn Kf#h^n\],b?4 s-M}T87'EۇjNhnZcD >E¯_BϋG`xZ<5ZV^N{MD?@+}wO2.vd]` RT5i}0=bX3t$e R+vUY_AxxjKU[:Y͋J XmUO0bh?Y^/ _;XP?mƇA Ͼ] {~o3/>Il%!ͭb\7}@Kd7<_: %/)LXa) e!;b%6ҚՇulKu;Vos7I`nZ Ora'/ [:cnk^ +F-y'-6Y'G4W߀lNa R/ʹgó'fdAVX4;V'q%G ĵ>ZgyמOTD}ه2*C 9 ,{# 򷜻[ &/86X|ShlC(ְP*<rqޑ; !=odȄpD@篕]xRk`J owkc4@W뇕 qȈH<NW^5BS-C34 M5- Wn?k3=PoͶ/K~?GVu{pa1kNWi̹S? B8զ%0o gg P2zZEfwx#tT-}[#yg찙wHGvݱ18y]~,ĉ@DT |U3?M/aqUp\̡BS; A IU(4@T䥂4_"cZ~º-xDA!K61zucˉM=WRBԙQ&5K:55 T|(q! ɡ =)W!{?aTޜa :_ Su;Wp;9Y>淵BY՞,|n(wob9pf 4~Urn񧪄؇Ը-jOa.BTcUe FWvr*݋;{2 ?h}vj""y4Y,aBzݓ S?`]̥u| t#z3:: txAGa( 6fO0awv0)WDirnr{r" o/9W:1c) _L®Wobޅ=>xci1Gqb%> T mmfa{D<ȻYwNkGF-<#*sbh~oHnHr|<w6aRbHjѠGCXKY/\ΡY{P5#/FXz`D<= MO|',~}ܮZAϗ{ݰ_h*c<)4B3b`#@L8~yݻҕNγBf׀%z5C:=y %3*-H Cvb+f|[{л7JWyb\>QxO3q n4YX>{6.OKiRnAg-;V Wٌ3'/ "ޕ C.h^+v 聏QDq5+lUӆi} ‹lvCrQIK)EM|E>YX=3])zj%]Wu({To;yFk.QWC䄚E-S~s+g".`\7zNy#,,GetuFɟ _,.(jZ^E)mv/^LflO_|z=>^# ˝%shZ{AOAAO송dAzk]*߇1m31P %N2mU#@Pl_"3K"hd\?:<`_]sǺۋt-N*~n1ts.'BǞSy}$4rr_R "Vɬ%-tR׉t9:NjqΘï v44yt&KMg'(5|0[- ㏱|G ^"RHYd!BjRy:s]0|'l@X h<>ίxi%;CA<˞Oo :öKUD{t5xkM,U!@Y[tp؎pT|O GJǙT1y~ c^8]t?3½`Arf|3"G10 9wK.3ěB.w!=5vqN#]-r:*>i`Ú_=6?I/kHkMդoiP74Ç Ifޞ91zRɞ:ЪJge@D ~67[.h]iĎYy =r[%;NvJH9uIR8!Sqm#lL1~~d&ͰC3xR )B;67?ဍݔul!j] 2(\VlZ[\ jfGgzrJo ێ:oڈ ^gj}eC_cŬM /WQP7Jz1; ~σEr_k]h䩺bṉO ™aD q]yED*IDޅ]#{ٳ&ϋ}z?u5AH[M_)mkG/o> Tgt"־k~'kNyBRu!QE8|S|"vΙtoXZ."T[l A:/> 5ռӥ͸s{7(^y%Ԝ9U "JCZ} ӻKwxA<1Bϯpӆs'+bivRÌ˝RY0_m-Ç%"yu&7-v4vGUP f|_vaߪ%e` ==)}ԥlf[A]{01K64x 6NzћvSCK=Y(&,l7)mTC!`%Ga&'{ ߿W`؍;kH;:A {dՔ%Tj5xhF!ā~;´2) c&q{A# ]|#H~ !vVktĆ]-  oJSnl4*:5%.^CLeCgN_{ԧ2o>dpnGTݵ'}!M竺ʦݴ{W;>_1i$Һ>eM\閖=3o!.%C~w$U'N|!+t?n]5W~,cEN=ygz/H1괻UwA18MWAo ހUc<3z3y :ܹ5mĞoB@).Qj8 1x۶l tH){Iƾ+muQ!̐pT^-ݕ iVdkxzaEC [В%)V UWn9>!|?eF*[x3 N72#C6e>h >=Aퟆ/C=ha~}%*s^vExo.鹮8`4_!3ן ̻5W4c$0psymN*7:w$Qo8j5q_7z!#c :)2>irŸߠ{&e ࡹ{@Ar2v~ϦIW =h~}{K)"K#ΰ\{J$Mj8n9`rS?>d)\-Mܒ,wPGÏk7OlrаZ<Ύ2N8oYRx(r!O&( yG!% MKAI cڏՁYFuy#{a@"?C\Hѝlb;$wjS n=BlKHK;W/S֊l³ mً!LB#PzyKnIп~ _Zꊡ, fp oӥ?1AlC7=, nG6 !IZvԱ)tO*;:,0t8+)<2xw}}2M>e,'=!_$Qʟt;}|pY=EϋarAeKp؟ګw oL,dV M~D/ #WPKfy9xs8m?FOڊƭx ) ײlB :O*4YXfP~_aKd?j> [:INCDByo(~]PF1YŭP8zC!''Xԟ77)S>|=ӆ6)\if@[ps6X<W)N*d rBţcĺu O;ŋBr؏?R5WƷ`MgPC ʊn78kL.t\]B)q\Ui!\H|_}f0UC) WvlLzz1kꆌq{iOҎyp u8_B퐅P(no,ڙA+ÇuX]}h^!2>fBz&p`Wq{qyqʹPO 0f-zv/{~h^ B(/Y`4)8 ,/OoB b{KN?1zayW َm+L <]|#>[DHÝڜ~~g@kgMԋ*0qeIw)g%b{ie+s<1^+[BFutG%CowӼXsijqfKlӾP3&v`(M1z24iy_ DU3v8@H+L z!wl"L x0m2u!c0eDS5aJg3=it-r݃P=?x)\/so~Lcgq& n/c%)\Cg!H@(/d9h`8Ň2x<$2/ѥ/ʀ>5 3NK\,mP%aw 3wM=ŠlI"-HmR9wǤk}Ma\;^T~ NRGĂ 2$kqlATd8bcE~-zlF-xg!4}^蘭 O4F; pO85>zAѐBbX'P/^:9 ?`t u#a]}c=zO}[~Ϡn{3 aHS7k!H(iQub3}i{҆eȫDe\6 ]6d>[0m5FKwWJQmoKw[IurtW_4h3 ;@N ;,0=in _g3ixX_7I5@{pU=)BK[Y{%ɌĜFt#f;4^41 {pB2wrxh >|y&4bLv e7'3j8Ih& f'g!%jsYx(pI+$9cCx" fMiD' J; 7SC 4Uѿtdwk&M}@;kPz$NCOt@6}ܬcаmCh}94^U)"mK@^rL7COʢCcO1UXQ 3#t6-qBlt6j@%/ڢn|?t6@4jw,++Zr+Soj&7c y5 :)Zpc45ՁVHSgu] ݪ*#.g< r#MA蠁!Hjjj*UZnߜp%kh:ykG ݰp]I DA.cYLqYu^̦_npJǐASNUh:LK_KqjM7@5S+4o-}_;Cs%1 sG>PRG[>7\]Y:?CX*C5\o{>T!j$,4[-aS1][iEL= ~x}ia&.O =d׻#Ve~ZۨUvb궣u7%Hꒇ а*D#" e 1I+(OCe5I4*S>q4hzh"lVcS|gg RL%&$,ytMKO8 LHv4M5vn`LߚChri+ܯh|-aEt$DJ^Hp%$D'Jwhrq ulmnƭOhSe6Q*Y\,zFM y< _ 9&!҇"w.s(7qAB˕X*{Ղļ- VvgsF~As7)|ߺ}4>=XKcU'TLc`dU"sSOF+V >d6R' 2G㉻38(5^f܃rT#; $Ik>qHk^GA!7;(fYo וC #w7ȴL]d? -Leo!W ȊG˴v9ȕ?}dlm9콳 Ũdod(byb%-Vr@S*?Bg"SaH]ﱥ1cW^o j "q+<$~Uߥ.- bK{vыx? o¤ކa΄ 0;M N1DEGC Y,02xǹ&BA"yDhP;OuM"C(nVʴCJ@fݥ5N} J{J:}|_ͫ%Rݥ]5}]>Sx9PS-4Gi!B0yWe^fo)!ՂG4v? {8WrU e _nkA.1hTs\-:imI!L+H0CbV)_ORZ+ +7ON@i=ikh]̎rm- q3s:NtF7rF!P?fm :''!%%)'+C/ŸNa?ȫp5 ^ڌ7~s:T/Cwy~{A۞TJ(,隿sTbUz?,෧!B'E, DE/kvri1;qk.0b6{r|ڔhVƏ$,96 v~x<_Jr,M_PuNJ% yʼn=8Vg;:9CHŪ8$TpAeKbY4?,s>=<~3 l QWK(b ?@;u(vkaUA .aK1iI{ n@3IM`Ĵbd];Su_@!žd%3Eor"}# b<:+Hpȅ/'ovdTERXNf_%STŹMjjFt^u@+\RƷd̟l6}=w4|vn)Gs?u$K&0jB^?1D\ yϣH{5F$Ylqtj11."1 M 3 Say+$k#2BPy7Ip<a7`XPC!7>K/4>TD!u75Nwʗȷwuw8G5CFqZn=v6޾(1N:H[ك٬`OaY,o l)Ɂ$vI#6 OA$MAEwLOS 2Fw7Ҧ {?B\!S&7#\.Mo33`RFH#66ФfN Agڭyޒ'ѾZj<ʒD]G M0jl8E^ˆ<|{rG,` P(37ke[,eCAkR0vGr_fEײ*Uz?9P\׷_}!(a;0kmgR %)W* Y!R6:X4d-O=|w_ժdwVDGDu6d?dc &s4oŠ_7rB(>)AP\g"25 Z>U{B>r#%hɠy ={B0s SrQ:"qJ,8SQ|ۄٙqHȭt$ XC|p HN#+q^T\P =3 {"jqj?9GAWW'M(W!{=`rGGcٯ3>o ]_r郌ُO~~w3к+A'$ J yϹgZ%B.'64VfhI:f *=K 'CoH4E[ ?3^\ '# m{qhzd G׈g5eВ!w.;s[>~-գL&2F%N0X% -9j!0B;UD1x/| 7>Dy|!oQ|C˴[41V`1dKBwVd+̖<{1 M "WB4xI,VuDEYi"8uRP''@-#\- -Aci{6Gi{Gi{woir^z(Σmx';O[jڏǭF+G޼Kkxy;yw92ӨXR8< $3ԯ8q4yCq#g9; >pghg RrQ@@'vg !vk$|$Jot}S1Y`+1%$Hc2 '?_3]a$^攏a,*qg[1N֊_+wy~* C,F]}@rVU+vd+Aw73Ʊe闼nPY쑫 qU 3?c J:I~D3'ui+/~fh(:mU{:)>.Wsʿ1#Uf"}k&ZpZFt'dNr>krrr[P^F_qh .[ٜ;]\Hw{9`>/ _ƛ!v2Θ[qRTq+Xؼw ׿T9+A?de =אq\< cȸ;wȁڧ)7:y/`gb NV2'7:,[= B,xɬ29>ƪtn%g}ҭƭ}<_*E´pz1[%~F .얈hx5/ YOBɿƍ"NJC"75o#=NHB% %p aW#cp=ž%WFf*<3ɽ ThW\~Ln>92(XDްs܋;29 y6svyզwqd !QUvS&NGY1~_) q 1LU/oA%6pz+^p!S=rځ83 y6 Ӆ={Oߔ~pc4UJa[p/8 3#DqR~Eb?ƗW!dnd2 f͚;08( 5DТUN"W&)?rD!Fk,ÄJ}T$[NGh~xgS7LI|%?ncFZ5,ߺױ@-KW^XZFͨ<ie!%&jH*&HSЫMpyg GZ>C&njk=_ =\300y=mo'XeF8V#̧/O1 QI؞B:heML݋K6B&7™ߢ%r Jp=rBG޵TׅSB%A%_K/Pm92*Vv~{أr ((/E/-f =zRHX^8kIHmKH`+Q穻®:{ 7NY[o: u&f-5xjkQ8=6 ӫqw,Ĕ~~!WetCÏd nuaZpׅ?tH@ڢd:^{rfnCo8VX7&ˋ.iCy |g?J\x'nYx3#L+wޕDZ}"pYaΧ_R`] Y+^ae64.!eLak|Hhv=s 87? "IZ/Ow(ot+3H:EXJ bLpx2b{MdJ@l]Xftj˿Wg80DLٸG|{QOFjԜy"]Γ#O"U}E|~P8,f 8v馑H !C5xÍ8W1z]^sv$erRZvo8u|wJN24vǮM -JIۇYgSIimnGs^*.,\YŐoh܃c5OZwz.UOEd>ܽO24|Y],DazieNaL]a3fn± =~t35GI$wKYvEY[ {u-2}'X{N>E9߿:2eeL"!=>2Ի^OM1KJ<&߰~(~SŌ,qfKvf٭}\̦;r[̫ջ*YaY9ke%#fHHY~GxE#[LD+K p?ܩЫ|@IphO?~,bE]ӝؖ_Fؙ>/}f &>yzVVR֍,^y͹ќy]|J- .Ӊvɑ`:Ϟp)3g|8>1;gemfma o~K8uF8R.vwoz.WaɆ ף=JV)Ry_=1XgCTqɁ#ؤ'ODd|,By!t(.A|0⢧Brwq^܉kgcYyڟy ~H3sũ9.0$&489[87 2*}'đEs,I5 T3@>}@)5]qg 3}Yէ.0tr$*2#4/?C iHH^]_@qEzQ}߅t?u=a`>P^ga,{bEQYIy#bke,2_@ Ւ˷E֔0t>@27IJ6AĹ4A8}r<.1:q=Q=zJNTP7$Dr[f b8jR0OKYO< Xgl=dF7α LJE#enggD6+?\7RJ*y=o$R8C+§gfĘxlq-eJ /*ȐY? I!o $X] N%N䉼X/]*y$T^g.AT5,C_3Ϥ03`ktn_\(f'pd69G\;Itv7kED=U{2S?VPM6Έw&^ctkE]0f"Ct!CJ z:^ eC}2Autc7\aouqXe?aZe;]a ķpѤlބydץ%%b(7{үw"6ȕa9TB W5`S:;6fXS+xҞ9 ,2Y).4ܼYӵv V'6ߓZlo4daXq\NQ3Q o'}8K)Ey~ik5}G"ƙV|mr |W9.&5ܣ8.ahdV#$e$ ~7vAPI3{C 5 -Y?Z[ыf`ݽ|-։)(`}Uشmqp%O]5#dXg(ڱB|a硵=@i`uKDuԅww_bXq 0nzw);Nd/DJ_+SS=s?k-.>ՆO6, -sqݚ`&@5U"EfŘ{\܋Q͝.bBE=ia{3 ȨKdSj}Ls7 S-FZGi޺6Ëv^ws=ySJt,mLx'5 HuŞP,{T͈2`zτ!D,dfJW/MXq'*iFp瑕OLY;f{% aE 0q҉aЧ\p܃ f-:{ 7TWl4z]۫ 3K+v_2|ls=aħjcլ'a27Tʫ$8Ģ I:/cLO+ȱ5VƧRla T+c9 C$;|2Q5bt{|puJBsb]ϧMӁMm;椱NSbl}ԀWj=ot 3&xM0 gMg 1+eNS| a/K!4j@_lx|j|YysQHآeTI8m[q bDԬ Y,#&,]*Wj]$XqVym1 =F>j6S+Da6)ǝ2PDΥk_~čk@"ϓ1-Eau7~2AXsܔNvna|y^%^Hs"8ۀdVC/5"嗓յP"qr122um~9<}yA:Kg^xPDVvʘ9bG䈆G: Xa 8l 7S9KA{0{'_%2ZFYO'>iŦԞ A/&37~z\IEKxruF)XBB]בT/JV#2rPC(۵Diy P{M;kPxС5o[Wex\뤰$B[n-v}aq(׽^ѧe<]G)yj-$YRzJVՖڜux9t+0zsQ?+%|Nz' ևҸCVlVklOD};G`mEȔDig!I [Hicl1JG+"&p\n蠏\<6 pXE2?z^?ǸX{5;җ\ 0>?/$ 3rg=؋z|0s>wRe;sD,őf@d8UfXG፞CȁDžO4J%*|ʟ3ykgWmFrbP"zJ=k!)#^lѕ }oa SZG ]c3s72=)ҽ?_?ʵWaFq˃gnqdžz~ڋ\t#ڞV߻R[^azϲ4N([˵.IU͜~pFLD;/fn?ukHO>N3$5WYA/ s0̰'{yiV4l 3G>[|fMM(yT1]+ ԧCm#}Gжl7'>9{e7}Rx~ӤÉztm 4U /'T`_q'/HWe$$|QիE꺚k 7T_"dgRpD_:uf,ERZgrj]vP w"^RXX&TpcMEң<)'>5,3#E>uzrZCjg=/d+؟MrRo!O˰;k SmL"wƵ cz r2'n\#7#~qRSzב U˂Ejk= $8e xI9udX}"߰RE\9@G~/̖t7qzAlVHlj/njt4H~WjH񇱦0[Y@ _ 7ϫ]$oGڒoy0d߲ݴ "aW˽e ~u9!Os} L G?#a\mDSR{C3~qD =#^,4tL1^HY@TQq\8'ikN7%8^NISY=̐kb?&GfQZJ(Ył\5?\y19 tמUwgHO2胷" 'N)SXm="q{D* -[拻L2zWr7bji'jy8k|[}|ҌD8aNQjwVF1ɃbsϜuq_ًHOy8#r/i"5evɶjԇҧеWሦ`nLynU@\{9R5a*ȴzS.`0R#HDb1G2$fOu=ORω0{s|Tp VyʉP:{0 AB Yp y%}M@=2٠DE$aq\{sEnqA\7Cˏg%s_& Kz|Gfo.6Drv`)TIX[z!EB\WKd`0؉i3IPFB$] w DVwEtiȽ/8lvrz^\-^hT Wkh iAgqŸfv[lle@}YD%Ul~.T<4*r98̤̒74Hz,ҷi]@ijOWLK\UiBڶ㜱M`EI )+53=tV'.l~nZkM 8vš w(CwTs^."RV-N`/CBƓH1?k FؽudM8̃9EvCFG /7?fhHE-V2V8sClXZ۱ߘ&/#ݢVTm>:1cΗi`Ma0c*h"/6 :ccO+ H?DcR2Gй*r~:%8!V]}RI;k-Ub_M>xO♱N޶n3l,C. H&Onz_?u{Y#_,ۤUa1 :~-gM=RF*'jY?zbnL<۸XYCK &:G8^,ʒy1Z?f" %<^=KĠ>@Ӄ:R?sK8j-콃V?_8ѵ@a6KnW0͸{ 82˘Rs..A_Verv צ˄s8.[>roMz#Į<IAx1VRxy\/WGI]7v"We{s¤SAb2Ffj۰lRPcz0e-im+pJlg>?x]^|' '?bV{KRB+yxFp:xHk1|(3X:WO:c7x>©SN1u5daf=2J3ؼ'nY<ջu߱/IKU&0 }NKl~^4{3\#ȵɪ,>bVTc}xm^mJ^,9O)<('T-;S%zzE260Pb3'Rb:^Z=uO^ƌ^"x(N)fs}f }PqL1D 7qߘn`# 6ӆq}L9]h;gd7ݓ2,Hrx#Ihti1>rGQ&A]5ladb/ASu o#2xل%Dd\g}Oqc1dD}7sXz"/D<_z߫wkr3OxĚ9-~+ixfa_c{P{'El+%]ǿwD3}0 5|S0B.2h _ t* -S6!Qŕ We?:7-vu|bm+{³DU:(BCC:XL”90QKj1Z5)Bh31>JyV|{iuioVEqCڦbKaeLUͿK%a/%pG3"M*%x?a]ȷM_w^y Q7Y6֜'5d{[խ-bK y|LHgi=f,4M- ao1%!7txJ6n)H4ԫ'Ű^ﰇVc no?U&,Dai+ SqwY1ġH_|Loԓso Gu 5%^8wE_oIܮiʿӔB`NC:::::ѝ:? b%Dǻ6MvNDNԉlDǻ6t|;DǷNDǷNt|DǷNt|DǷ߁':w{vv9u;N3ƿ1d;c;N3f lH`'G9ɑvvr$#Ns$# H`;G;9޾پs3vw $XlG-(c0O@wVv;:}HE m/Dhg,SB;%Ўv)>B;Yh4 f}_xIxgH!wrl g[~nRNĩ74^~E7@(LN 8 JwTʣ WĴJpЂtaߩ [KiW݅_od|r_>¾u`(v? lW׹6j;JU_ %lQ oh g7;2~!6朾# NE~,5,>TѽJMv?4>o񇡂Է8+8뽯' ݚz ^QbTBUYΉɂ. Zȼ.aWf^# ^VlNwsx0"ׯ g'7UKnNt{O?G=/rKIo L+nJC2DE_ձ;rs0~#T޸BMt~ zS9~~ &r`X(_r77}r,s*]V[XAfGOV?êp f hD6 aH- z#-!ն2, ]^ _K̖nf:r+nhޔUN7R?I17ge'p&30ji zWX$^?I| q~sy-dɯ_ώBYC"_}eGA2U퍼6|aXBo$3Tz$Ts'7c йm-k$1/<$xk}Z[q5PrRf|^fhWC*H`9#foݞ_drh:p1u 88xnrAe%l?}cWbg~ IM)'@SyO[a,H]t94\b2+dnAܝ7osnSi#)h0IZ/[\z`VFVAgg(=Qy#YO}\]y^ d$OK>Iu;gw\ߍ fwvbԄvf-\A M\x;?$i2(S~ߏciOyR>c+WNHzӨ\Hm ΄hݍO[AEr>qt9R|r5Y $C3_M I0U?6!I_BsMsESrlCRvn u\\üLVA'uR=3'I(ZS.m~[9W=ӹ0ɸe}!PNPoˁ(6ܛ73ʏ\[c򔮊TokWNOů>5k6%CF81x < ɗχL/ },bT95ǡ ֿ|7MiP o>_U ^G.mG^"] xr89O ߉6eR4vD)n6soDz7Oe2-hПxƳXϮ侪@!/Pm3MaHݟ( յAVߩ`% d$-(:쵫~q}`.C=bc=fZZiPF-Th, rWBq/>p Am*:^[RoWNy { ŅCm2K0`O >q>99<(:`w!B?wE:E}6-^1 j%&h "M!%ᚇ}J48hiқLJ[G=2ѯa{~g_gqG&Z1v0;-OT;jJs3_prԏ3?N{_) اq®%CGBn8‘ߏ|}K{u0j||S<,o]a%z1LgE .ۭbHB>&$m幂FJv_X@vq;?P{m)10DZpU󅹪a(CaAYU0f! tiM WwIi!$1x D˨3먤w zg:=6Oπgt4y 9~Q=vvMݾqǐhoUD rSC+AĞ|htueW`=!D/Imr9W](vlXD}g7Nh2m%3$ٖ!tM h|w{ |pCw?VG!\~Ŕ6DMЦhғ"Od Ųm^c){#F|ϴCKa.7tG#:9hz^(ܤ>id}}#FSD pVqU\>8(䰵Z/!d_49 _8Irq6ͼo[bM6vNO-=8W/OY#QPszт8zJd:z>K&8l aF؅kgv/woK"7Pr#qW4%5eKoAEۄMSO)ܴ eF ^rt efη^ sŕH~ݠ/Uix5IϾD9^ʞ> jFBnwv?c4z}JQLݗA|4 5el?`b´7^ky^:^:^C:^:^:߿RW\ qEje|Et _STxҸW4 -ǐ:J 'JՅ9v" p^x.PWւKjKN4ZCt{]jKqAY t忽֞-:BH ȩu;U$]J &+.} }?Xބ ͺ8MS=#}U%eL̥[ܦ 5;Ǿpo ?m/9_E$Auk}k^̾1.Qo)Fo]zT*ڪ178wQX%KPyNE.>v]o l8#u)y˵:SɠxH:/n4{(JJ‚ѣgI'cQEI@ƅdS^kYX;AI\?<_wd ]sbwU {4$d _CڞR[즚'؞ F&l &ixRH텚 n0?5no>di1p)~rAƵ#4] l1rxi1yœercz7p~` %{IIM~bƿ|z?6C HC8 blDsQ,nPo5MzS'kp%X:ˀ L{݋a2P| .[4_6oX2x fϒPVuhH?^wEԇUCE2h$]6d]7fsPr/8ܵFxܙp4ny Q?ܽԟOCu6/Q}pP[U|t d>qє\?A⋰W?c)ľ8&\( >qStg\o[ 8 V"CaKt!3iOo5g} /ZrGhJT:/mO ==foWkӡu= D&|NH 8EXg4r!7V"3WV4~ HP1 z[{lC m-CO /.y@ҍdL?qRE^g#Q(g'.g)U5RĜ+Ctc%V^ToVW)c2qP/@S`踻rT.~'ڳ޲)Y 2PǺ<IR53o噫=3ǞFB@S8b> O3xuyOcZo3.}JaQ}/2YGyv IV(9!t0]4ހ5EemyHΖ_֜`8BCC/[ix(H r.<8kW35MtNs8nB֩WȠؖ"qtƗXp\ɏ^$PD_|7^}<2h=|ʰZJ'l1fP^80N^ ի:sN;&'|ṻ'4Z ^X|r'I7ߙ+&,!@?_=j"'l-FphKآks1}`LʲҲ(: S5i</ՁʠpCcB ~? ~jl^N@v(&M@o?<س'ň=}jP'djk]FA+a\4dןl%I0~T!& h^SD!ًk`O4r[ ^LHcЦqy͘(K 0 xܞӾ=Kc9 j{Yޤ0y.Nk,e3\@1c\vU!6SoYK]&!\.m@nH)p ZWOG^S5Yfz.\ /znV( Å "?GPeckc !e2[wq}Rx·or7g2.u"^شc)ASc~>T4 !}!$XL>Iȭs qnA_Q0,rЇy^)<"4%Vqdp}[#_}Z1I/Tϙ>uSoR`ɥQzƃo}睟]į5؄AB9T؎u'ӔD J z켍E๚B3+wnvxNr_ +8P2G6i9B.ȩf#Xh-S9&o }ZNcjw!󹟭$hTN%rê;TGSr~z_]751ף5 !xT2Da~kzf_ ~O[ Xq1=" s44hI1V)'ykz-Cܒkv/Qܕ1r⋚䩤𡸿9쯷Uך{)jkvyq^{G%_B!KlJJS_.r$!k=ߖ]j7oӑYP~c E^7nъS&(Yj,ݢ:+ DOHC=-EX`!;CI KJ^{3T ƚI0ZiA/5 Pp܂]u0)_ͫ=T엪m{= lB#bA,2aO5/T ߧsR٣ӏ'GK몤CиMG e3X$;8䧲a,t,Z|`i[U9 akd|9>R <")OQMBY~KN's5N"+~,qVHѦ~_7 Wc * nSC!v^׉) 0VUo:k ϖ'Y`2ʻ@4~<^ힻ_vUkSf.~]CRľqBPQV]ۧ4c럨P"9U3 `|D.҅.9)4J<yozhۛ 5`A# ndܱ =q㊒?jHhCi>vm-MW`Ux9kX.HvݙBKOtd(F8q!U{:ajHvr*D{gڐ`X7׫KVR !LrPAC27-Xar"3<q)?! q3uOҴt4%G!F>()lCPUE9Bt|&7Ƭ)nysSx>PB^}!MqmM 11oq̙{AXxtX<< qGi67{TF eB}bE?h|0/&Л)֋n|pw;ykEN[wVZ﹊zSA[ ݢ>)6kkx5m .q_!|nlC;oQ;r #sa TQ; &~ng'NW_o%z|btQBsw*;#14w Lr Qo|s|{u+ @5j?oƭzxm;A ztx{f < : Mt\ , ʰm(}Xv!pLf10u^ N6z!gKS4z 55B /1|_N}}bnBx1e wi)bQ;{DP$3d>G%}'D)W*|v R~1K7$< }egGwc? @zU=k.oNe>?rKKתpCw_Iy]eZM[K3֬pFV6wr%&M:*t[z+sǴ؉?N(mecBGhbjx|F'R<]ՏV5W Zk`t L~tGI&OPbm(6Vu(r )qđ RG\aKzs=I>QA3/;fHdGO;"^^v/C#LY׵"xc8ͅ{U\wڲ|d5``x<]E`h1 /XZvI5$m'h|Ǐ7nr?G%Df!yM9 :KըqY\ x}俹kklsa5@a.?X L鲱*ةkN}-|'ѵ?g% ?KgwM@-R0+BxoY(ސu h@}'\a`Qv5 %RܵwеPl7/Bz* Єn ^n6N$M܈QM9YwPVBhԘV %:^h^8 |UknS 鮛AF5}z6 RCEsw.SXYhQ"?MZwAvT8;f:v+rY Y,$ ?ݒshu9*m.@lX] :q2Xp㴛غ ] ŝīk*tL׃U ћu. UM 9{}uF]p%h\3 N(4uJqP"pfo1g}x5]+P?!ې5Mm}7~aJBu?8j@1EPqwwFL < X)Bݾ|oPJН?zj79P8l|1$w]1~: X-~Qr!oDܒ\rZSw P`&_;|9y)D^&*Nc!tZdf\3⟅_UsXdܜDxʯ?Bj.h + Y@,G>p%-ً+Sn4Đ3׬\?WQzި!cI?HjgPK:4MT62 >o|!pVEd_ !w]+YC]VZ&? [|R?-1^NJȽ"CuDhbALJ u~dٛ_˯*>ߞJ۲ݒ!b%;xȠ:>k8]x[Y>h2=#ʞ}{$|zusğ*RaI,ruh5#TE-'ݾY : ߨ 0f\c.bRL`һy&z_sR+2;Qf-dauxI} td;ϡW?b8*udhTR( :PCGY^jZ htݡʣrbAD0s(`T#{BkZTw2Iۗ}^^VX5h&amL!/VG`}h%} ^=Hnm5ɻBH\29] ְ~$ƍ< U3 eXLC=>lRf^)AjTjc_ߘǵ?EШ5pM?.P|}ٿ̻oJ[w8"FWICKN:v9 k n^Iox.[v|=V2TNJr #)D{Bsrq#x@YZ.`WjHç{QυJ)GGy?>҅s>}!B!v!٘[!:ͧץ܏D-)@kc ?GH:,dOH텖3P(+"-e_4%q59qCJO:`= 3,c >o|w/4>n䡷J+ :U@KL[ճ#۰*:gBowoKnG& Pryf=PG,|Ay7 _l4;%1ft}_Rg\ϫ{u4B%d*YXb~"(cmh^⮥YAןVs0:i-%e,Ch)hf& MW? eyJH\TEԄމ]87C4&_q~7oסi?d-9FANEfVф˹ARѿҤNո{Qo+XߕJ, 6(Bhݭ9Ptݳ?(Av5 okW%*z9SM/\՞>m[Z>Psn>)e}M҉-PXwoMN&O$^40_E+[̰9W4ĮB ׳a=x'sA(KC;uB@kvKP D% bp'hرr.}sbH]@zw)ȬY4[w;+aWh{b~Yxh;B9a+נ=Uaw祝!c6h avT Y̪,i{&gPbrg%;cJҩ5auh!y s!ZfU:H7UNv UB( 5/y3(tژN9W> 2wbE Ws /s8 r{"" Zhe|nC Zsdω)/_ǒ Q\b˜>dT `JtK4VM fU[]|xȼ~M44}[ËG+j[S%ާ!b {_5h^".pBYVčp[ h8D&w&)Bcnh#?4D=ݪVDm2uL3)_jߡ[ 72+'T zaiuc'7Y`GAF0D ;J¤8GSGK s `C|B$dBCe-6EQV%}Mb4Jȭ|'c _XNԯ^=-I!m'r ө =!KKD^u9 Y5kdМ%d'^mz:'OM2,9҆]MO\pbn3Gǎ'݆'O}f=#vd}3ϱJKh2V;qNhAc|M j-^݈a͸и;A- ͙~ ^f_@A͸63].jK-S_AW ONnoBlYo!w1|МNX $cѸx*ؽ8!*ݓyZo\TܨSޖ.%}FƖo>ݱYaH'%馩a<_i7 46E9~`=G7[xJeA 4l{u?{˄]y˟բ'|vF~_׿!-l(,'\2zwK4 E7gfiNu-78ڙ}+aPYXՠpe)Ň-wpxsuMsȹLL|юr Phggq7#'j;[j#5V-a + d/~a/630q 2/;r*p7'WLs^ l$1H ٍ:[ܚ;> ,;~Z ZYlh~e6 NuiUջ?yؚW6.X7{}c?>P bף'^#Xs/RkՁcZ(3-CXٺPI,ᇋS{K.%O8Ȃ껜E4X_KF aOduX!VzfCw9M)s掚z+(t(=tKd8Vg+-܂eÂ42Tj_C0/Tj,0Ƿd٩u*9a0u^Us}FA][ ia/sWau)d9[$:guO:#5mY8O'Kk]P?\ XP Aϔ_#֗f{4S_|8)/p9d+o~/T~^Z ;T̛b>w̖\Ԇ}"?xiOyd߹|Xl&K ɡL-?׾N& ?BM@^O_ ?s "/󀈷CD8l`'ǎ>Bc-K歔z%jY^O%m?^ͩ{/=B#.=B#.=#.=#.=#.n#.;^m石ÈE1 C?Fy##o4k6y1Ҟ+ץL$;_Gkϱ-[O )_C 9(Ӻ N'J+F5Ǥ_!uOOR+esEYR7¦${D/Q/+! F{ꦧ@)U~րpEf~Lᡪ*']}5~L^-Q.zǰQzN߈˄7){`Rk*d>s~:(vFuy!\e\;QqRq/j!Za2IQB,⣗Hx"|Ao")V)^kʕ4Ѵk :#Oh()2oRsܷ֏>A~\#ϚM,a/|/ ɴ3f@P&Ër8o[GO9bB'.|7BZWEo>Hˁdpބ{G̓Jf/⊃hRn|6q'b(NTp^fj<Wgj691g#rQ݋pfl{9L\:UHO e9~W*x,})J6n|}]_"? Cw UZ|xݷҎH/] x]w.+M?]R0D8R;ڭk6AY{?cvoQ[GW^aW|; $]ԓ'%l8eo^Tl 2զx#Nn8+*E($[H\-Vk@iF.u}M:r4Fss/g뺞| O!:Dɼ3{92!v}*! =}0G|ѯucE dr,_YGGGzi߭cHw6Ne x!sOMrA)4^ bhP`/#J{]X?ێpY=G^PKLT2NPMJ5 Ԕ"?V@ṛ6sɌ8cn/Gy"GL"B4\8:dKƾF?W L&_h8̹Հ;U߈^%m,r1"ZwpJ-3im 5=]܇6kcqŃxlNk0q#H=|70kW!E'=2F  6\8M`JTTYH>4sNPɤ104Ǒ碽 ( Įaܸ&KZ݂v6-}huf/)aWA[<Ljjԋ1Iy.  KcW- husоO&g;m:+d7c}X TqhO(="bVx;)) xހdG#}qɡڂKMRpͺS8\I_id#UKuXVv^A/#-b%;O'X>⸄`t+0|ŜMMgfͺd ިuF|ƌ8Sb/[Ajzpcl&}:. HyӗpǗ< P]F[hSU_lҘ\ O"lq8Q|3#GSԧQM!;cqi[ZEʵpiw';Ið|͋={xK?!Ǖ9Ĵ,mx:p9%s"hT_t]-EYݼPAi>Rx|MZ~DQ[Ҿ Mt[7wXU锋 ^.óG-ISTq}}S, ϋt"pkFME%F 7Lw!=nB5ːߋ&~u E0xgj`#rR/ F{GqgӨgFwe8qB-AքZx1QbAwrs‡܂ID-ӂ-:z)œK3mfytb !ǧ(()o'v`#!z?ijWE]\(ŇFkTu){]p"<@qם|Qhۑ-8Xwp?^qDnԹʲd!U{ Ri޺& W@*md'4&􋝗K 20eO+9x 2ٟL9IF6us8g)?q_/K$gԖwzY=[bG?-֬fI~{|B-&$!GVCX?VB,讪H@Kbړore{cYS[H Lt>,ii8>Aw;]BuSpKaA4ѿ>6;i^xTzPV%1݇VUlAyr 5;1yAQGdrSr@"J]}]8?Q$r7ddo.1*1AYQ(Yyi"g)R W@<[m-cO.VMnYJFviy&5[>r4O7rK^N[&Ⅸ{zxQi\lT^^*I犾KtZ|ígep /'ْk#3$rå_>Hw$'=i;ٝ?4K)u|Cx +"y伝dds:Hhz 'ULet߉I vR b Un%%>UI]u^6{BXwؑʫBS`[#ݿ_%hK Rm#*x-~t+VH nM~>K#odڧdEW7ʀ(f/~4$8OGh=WΐUiοEC\B4Q!BunT#='T*겿Ժ-a5i.`EZbQ峫= $g>BohF3Ɔ#]擢 Qo1ܪ{CtO2_ݏ,1GT {67̯ wGԘ4~ms Dдc<>WJI0]TdPU$gK̼ApAOlSm8G6jU8\`avI0JF|?,LEiм. ی Dfl{ec^ҜFOîI@ɫ8f\|m[(!f{Qne2 C<]~cPQrT{1H#Qm-ݐ9E`qLvcF\6d&KEF#5B2M- +j|+vH8)hџ[OT33σ[udZy.p5R3<?A/Hʶ HN-#4/}6|ԛ'ٖA 4@aSx$)MoiLߕ˛яlY Lw6HNqo\3m혱n<1Gc-& -N׏Զ]pILD%OhFn|7T_)$}4۟D2ռHvC)p qѝp>L?Y^:opfH bVyi&/u M=G[d_n)Dyb,E[eWi0IT_ {Lt+~v<q zY=p]Ik0mJ(T>Od8Ϲ-<$8Gz.֑'!>mxK n;t Wg?=Km T3c`4)+"yELA#>CGs$"ą% ,R)'ڜpNGD'~Wurd\[o%\;Z!4p ;#OFQOorH _kC6LVl;ԾJ fᮩT!K~7hQ1e.w!RfwSof`>p9\T=𼦺} 6ڣUиZ=ݤ>.D.=5v9%8 OM7Mi5l?E%`zkA#$rT6kFSIoEG3Y!?_(÷k7NԎw)ޛ2&ǻ~DW%ʂ^5y8;Q'{ >YKw*7gF bM|TNL^A\_"#ሁ W}m:SV[Kx=) \(dgF ',Ǫ҆<(qqrHElC7ku׏mnZ{ro|f61Fz$oUGCO~lQBAf!{®fZ.)IAnd|D1` bLݎazߢ$)OJL}e ]k磃Ikph*j2Li+#ݲr,xKʒZFoPY:a n)uAJa>_hɏ# yfŹ#.gs=vѬ.w*.zy"kN\W*7nY9>{ x?ϐdAg׬9fѵlHc|y: T̙Ůۆ,^I\LeQw4O-0K9irknuIq0i3+-Aڠ4*g|̖IC ^o q̡?nS j7# +ofrJ{{D p4Z6 /OFtZXք˖!;ɣiUƨPݔ2M7mt@WrQ<;9u!C}t/NEh/(jV:覂mP|Ws}V8?z1CA8 Fw"(=osnEov@_քt$&|$*4H.B)P77\=@9, \6`|Ra!s(E竀kpgQK!TN>thVp2 3)>yߑpq}pGiYsQ? Δ0}pxd یu 6ЖD'?|]N!xxS3 PMTwaoxPt5Iʱ_f3A" =vd7k':2NyQ0qzsQK>3IzUBpJ=yLQE7(dz4Q33cׂqsG+ZxmmpW3K>z ӯ6ݰ޿7y~PNݥWQldL4x*=䕴}}BdoIa"5 9{_Z_"z~P}mLBo+sVe7l޸^O{Mh\bb5t uߋ6'펾~Iom>ͭd߻M(;' ?ria92r 0ï4L&v'OzKUcM.ZD T6G/L]7^C+%na竵I8L_ }=QCאD҉/eNn?Md)3r?@w &5+_o[TG4ދVTd>G2gPe x(/l9_#vUP9s7SF FdQQ ;Z B+`}@Yբ54^Џ>(B0[섛~W&TmMf]5YKzr/C3|GȓO򷂸Chi!*C!nͦe5Lۛzۧ=Ou&zrŮc|2 Sݷ;ޤEq=[C-YTG&}s^oY}l+0ml=жeO?z MbB_8'z!d !nR /6bD3=92G #H9s S9y78͵P$7+lk%) :w<צ ws##Y^ ]^{MAa0ƎAԊFxNZo})YOpGSN#_B9^\$~JnMzv}! ˉ Y5jXWh[x(Uvr'yM~{#d)L绽jhk6sTaY l 󝔢y܂SW^)lv8oSv>b2RӸaSM([Z)gDv@*}G1CF`NsxE:/hI<7 M͝;̞+MܟXsT>sI8uqڞimVMWF,,aO{0̾]p :g7`-B/Ro.csn'&qpPspA*^?˂j *ieA)H/]lO2h7.b09m\|08wk01'U}Z TK0lܗvW0=叆0u荬)R}d:Adhl^ jͮr{eduEO<8|Pe~e߇jXT>;cgiC$q=f./9<$z녟Ek{Zĉ:%q0 ddnC+kKv:?%cw!w yȧ1MEU##;,;Y6G ^In q5vH>38ק,.8cqBNfڏ"@Tԙ F䨽V' p/>Afj|8>ƉA/6:s"mr_0ykJ7])eWI2QQw5.S`0RϦmdAM2H'K]YZc+۾ 0*}7[RYGy[ o= ~Ԓj< 6#YL&7Lw!c{XT#L&82(mQ]ȣ4y)U:1ܺ~9.@ֱwWbPOk,k{jxM"!3:%cS 'z8v 5'1)jGތ|F=ZV 4W%$Wx.LHCIvadp_F*J뮚#Z4Yyi/=Pyϙ~0}Px8JU5&c lQsD{fb: }eqN7Kvy&_+ug7)Cmimwёqidԯ&5rĮw`@_TwX_IL6غ]@OVuBcbOK!u-ݯUdfD"iod"g.< *@\)+Ef 7:D|<Ҩq2AJy?6XӇ\%19К+>/$~P%]v~TC-st?XSjbw}>S u.r[-L"mGR6w1&L?3]C{X84a(:N ̒TD{kףܑs-%JvuE~qxU#ujN"SYl-)@^^=y)RIA)K<:/5C9tۉ dFH#ѱ@¹Uwȱ<#TGcq@0Շ$DR[FDď= Gni H]MNNUW$hIb{HQVXt܁;kj|f 6+Yףb7vX\i Ԍ*=]mT0N32yѦ.I4ʺՍIWFR6yQoyTPq27Sm,T~"Һ3M#fi>(>'FP~Z7PgN=>׼")^5Eso١ `(0F/+)kH|/+56q_/w IJQnpǘPy/z&W8s 1"@0đxZU"7l&iA:\TG8J 7k[=!Wg6cȻ 8E=5)>o~P~,2.9MUCZ9y?УK MvQMI YD.!5ym/Zj+E F AY^/DY03kt!HjI|OГZcV"7FF%se^`z. '# Z~ ?7?zhץRcۼ9z.\kh{J|1}D{^#Lf\]mJ.Ho5 OL,=|55~%}m$P{ZIBP\9a&WxN$Q= 2pl"XSs Yx!M߷sbQ+O`5)eg8N?z mMu%Ii4& =r A ޠ%?DzR$n<ḇM*| 7׽WS'R Z', 짯OLëY>uD)=yH2l>/Ѥu i57YjaHԩ}C}v{MeHyO 9w3. C_ i~hW$7oF=ZF=FCd" Ƌv tswp5W'XpC., ==2ήh>!LxziN:1̌60Jf1m}82TUc\Pu;n6]\JsGq]W&-IF@!k48>sj{|}e4,])8,m:}x1x JWVCOۇDxG I9WOb[^ KGe@?v>-~jIW|t:~UUD(xm~tA-m s <(R8O]'aJƋJ_M=6 #=bL8eu~κ*L%'Z`)=,%F'e'[J ̏J+j??PXB5La$knSu} Vӕ}՟q_DscXKt/G{* ljG` ֝hл_G@Aq*Za9JF <#yFBozVzXDõC„tpҐC-]QIgyƀĮ6 dK̹q$Ak]//9~e)U .Hy@qT4/LTtN 4qS$ͨr?5=2_ ul{|槫[@ϺQpG{pGP5}?1!亅4d%@$*4܋6:{MH7RpT}6!"I,E=P8ȂCݚ&za70*wC(wdv=Ȃ[LLjp:'~rKP#5an#H꽹UhyO#np&֪tAA6dXۢg`M2ޟH5h\ז ѕq9Q+נx 2Q uPf=Ċ]-Đi$n1 ; fcqJlp[4]1YK0RVaO~ZK]0l97՘FO%T8vrtڮpowȳƻƻƷƷ&&WٻlCd8inۉc;8#؉c;68؆s:Ν8iΝ8܉s;:Ν8܉s;:Ν8>\;qDǵqmNێ;Gkm'c\vƸv2Ƶ1qmgk'c\vƶ̽#q{;G;9Nw#q{;G;9N+ە,\g; <;INNxv(QpLc@yvVv?ޝe߮l/wg )5NxwwgxO3i>ͼ;w{yjۙo{J)>@ۇ0o' 3vbwϳ]^`{8+Yv lvV%xۃ}vٻmppl};׶<,;,vٰm̿6$rmGµ 6$\;pm;n;lXga{mv daafaنrroV $L2q/vxvų/|lgGyam *۶nw/1;Żm*ywǻ3hx݁whxuwGyuwGox mgoGoo7|J۷ہo~ہoyob=c?V?Ͽ~mG߁[w[]l)'f[`7۳`@`;ƀ1 m `@`C Wʈ6(.?FUt? aFR% u>$ߠ: TI ?l?l}xe7?crB4Li p)4'?DM; 7kEui%wkNYOX~ JUyc.Xc5Ua;^z]t[8% jԭUBm獗* lW)%2>Gl?X쾧 ~ނ,3s٪%2p Q \;xoѥy2$yۿf'-sA7!4DNf<:Hz$Ak7x(ٛC:hOv0K=a|?(,2џ6[a1O{ HA3W¾`8ǽF6i1s埸eһ #/%ܯWØ䝛BS.#ouc>8'`I~jy<;o`#TI4muJg 'DLl JxJFCDqHdϗ PʛPwzW7 9eOcoN߲[VAڻeɜ2cF<( "ФfiM9<6SЩh̿xo_*گؿχ w;TTxTlL>`$2]i/m9-9M7)W|l>Y,[7ܿ t2Pg */0ɰh9xS^=6܉ϖq/U/~WH']Jn ι{olOj~*JYjdIV?ʬ/ ȼ!a~-q@IɕSB:`+oÿP2%r ,)/륵0@ gVhpS (,׆cy#sLBm[vf iII'BQ|^ ONx+%Sб=ѧnw] ީ'7`YI;%9qx_&U~Υ딤ZٵHL]BEYD`zҝs/n&> qN V!=^Kur7au`~a#3 ^`vИǣ?W@_׍ tJpBic&'sXFW?6Y00M1y( e rˡ%zIn?@)#ggezY؝?fXÍCB.`񮌧;L|&88>>9<_k4m_{U2o|iAweR?I]SN->_nf]8m7>X">E"I 3PM}8yߓ0֧ZƝ/75lG5^>v +@qI;%65mpb#OV݌Omk_noСRJ!ꩧGL'=fn?$MWƅqru__>#uy~8 om_{ 9$1 ː}4!X9G^xɻ" ðPL6~e&h&uy{ܼoE-}(-<#t()z|Cw{P((\_N3 fN@̩e+%X[;?ir.[VaƖM07o~74Sx 1?z'> ۰>uϑiCΖpCTY#l.Dc\!c)R6ske"qdy]LO,0>{eX<$Oڈ{.Tٿ~ƺ|v>[Jeo^zxnk!U}axk\ؑbx~m4x;L t[L`z8xRY2fUF᰾ŃN}`=[!D]uר.lo~ ݗִ'AB?ָ0 C'4܄ݱpe:.tSk˯n?_hzet+5^a-Nቈ<ே丹#lh'Td-/4ߔBLTϖ_Fu{`x@Mk'.xiI;kb~=ڞvu.dp,;SbOS' ibt)d<74<o4BˆEE1#3hr[6`Fit#8PI7t ]v('ߠlU80ԋ'߿@wC+*֝\bS 꼋eH|;풌mZѹKi)2Ƨ`*hh븶`d/Gk!ȈϏ(1-}Ir4 EtQZRh{B"cD^@NVwIzp7̼ ~!֫Ð{~n sTxKzly3Mu 4wP>:[ij)5J= UpW}5+iT0y"<@ 8!01tO!,v֘;\4m2?O%-rUz I^~hOpԵ-jTA "<ނ\o%h:OgZ /r?[$\n`5?ޣx(ͨh:g"/=KZT$uUw_?v#_Kk&Bͼ}:Őo>}N~.\Gfo,< ,9Tv2oC^,EJm Q4q@k3 R%W?E K^:-C#x)4J(+Dv޽ν,@Ep"D3dɠjx+)hwj>h^R ZOۏ+\[ aJG_`ʠ#D ~:\~}G zCۃ9@:WDb&Xߩ&wx|3i!RClju )"Zu&`%0ATO7| wc,d 7nwg0$+\s@W>7e/''R 2-ye'X߸lQb\(vZJٿLy!WJ4s5x P1DeҸ{5- o1UxE1r'zF\p 鑼=_C"kEهbVl؟sjZƹgdyy9g_p\3K+<{͸ۈ?k fhvhNﲛȷYeo<U\LcmF)od砾dx,v|YWrTv[>`I p+p^4%d'{[xa -B>Ls 'LrHx䟲Kc~Ty6]p||O L?) @S1r>>fHi7ͥAuV0J9WA:zlӦ]p3pn)ҝ*0~'Y? ~s6$G-\>`e}0*:du$=eJ' [_>Vlcκ#[d!#W}qDˬ}!YȳzH.]E+P1vv-#i*{-ujBJc-$أ=iV6 ^}VOxavyR=D)0-~ y£h3.!vyU!VQ 42M\3|544|4=[?Ď*fAc[h0mO7 (>>װ&IyvG輦Ѧ= ^{.wJen1<ŕ iO.29?khy~ܩgqhP# ry_ =!>]߮`}xwMnښlm?s#=rvL1Vum΅xp ZcӄnU-,AYxk_Oҥϣ "Q;YL!U+ĈQJD }.[w~v|* 0kd3i8<W%~=;F|[M}iKtnߞ+BGmݔ`oUHNb_z[Rg> yOIa8q>gIۖw?4.]kbmGW8b}0\WB֟غ뎅B$͂qZB7ԝ>'= MJ߬W.B=1[r ˳WJD r߲5es.=c`5Efg<ԣ*ݯ>ت#;OpaUI”W*ʽV7 WX^j-0~Z g.J:fs(APH:"麷gqugb[{~n˞?sj% mIU$7c n9bB TJH>9 mTI;3a<}&%Ȼi#sTj/"N_}\z.;rx wW*MOJLNuJ,BCZH!x_g]h.ayjDeRH_a%kb}vD:g^9W>HQ's`>u K[" {>SoDYi_v5b?.|$_W+La1s:d-quj?x09 ~nmGZRr0"|xC n;!S̍_,< яt)|zJ@%:>;-0`~껭\/<xO>Yrř\ZgEf y5z_I{y0>h/nR 1B W‹))ooȟxF1-3}NZc/g"ɗ |XrExAwͪ'?VgxB!\PHht|#V:|surs _x TVԗ ԅ`JfP"dO*=$p&ֆ^^} Wk{6v3Z=61hb%,./ -x;gS57BӍ!%2?4gx>i0t'SNo\2t] H?/XF1уM58BƇ_r.i㘬0z&d[Xb#"vP]{S:Ce|W@ڟ,a]px*A -<=`r =~0:2Ni-'Q``+_=v6ZIx$:nTo@]{RJ xZ.!~1?/ zfxZ\LFܷP&q>fHyV{tl1zC6ё jHO?>!eY֧/c}RjI(IN=O^W.%QvxGfɆ](Nv0?2oOBut?x'Jg#.WA|krށdE{b{ߔ p03 =$qom g?&?jg>ٌi. xΎAȑp_-%x, EYO>? 6GC|Lݦ2ɀHU!N\nw vmyZvl̿Ժܓ֯B['agaX12M/ƹkuk5h<bOl 9#_ 9qwbqivB,]'|Ax%wߺ>1NLJ#N`c=M -){O/W>h#D<z@6sm`T`S :7I6> \¸7E'}ݬnF *%oI_E#]=w~0߯c؈l*uw3i z8Ĩo|͎_N>S2}T3l % `[NsmC kչbm*]X; sխCuz얂>)+õ',~QP)uwX]LwA1K Oҳ.!;e\wm^S1C.2twW`s+w\JUcr?k!dq l?櫐{}w!#r[}4W(BA_LP͝aKtkզKc`)pһiFBo!Yr);f/CL:Í {v~ٳGKkOAe zߢE)?Hq".8?ڵPҭ< ^aøI̞y=y5Cux)Hd} T̉:KۡGJhk*ϻ*9KJ[é.oŇ@'<8,)@HLƑ!mR(hRDnQjzp}_(x27C$xAjx/揂CXdU?;䅭zBܣ̉p)fj+7I I^T62Q![_ !kl|v,9&HJoC:!A阜|9R(!n%W|_\_xVOlZXLz>&dh/H Jxk TtKb<+4qyt6\8yt!g0w>1נ'3eYg~/=iϺT98La%,KU_2}!;C_$#fV 7-\)>eknѺ{Ge hz 7Fp]\̽Mk>D T9,r-o\\Ƥq7y{pP/6ZD*/7(CK NkiOu1poTx4XJb٫i~9IG5*c6t ELڮn)ǹ Q<!Ng6 mtοn { 橷!Z;k#uW?ָ4\3|p:z 턿bvE{Ҭא{hsaCuf\a뵳7!ìcE ?s}_TD2TQpOq-38P3-@BmήtPU^'";`QDx߅*1 1e軤{RE΅޸)+Qo!E~?4MDImq:&NC!o2alr/yE}O8AnC5H} /w75AMإ Jxm<1.p/m*rI9^y#y#yyy7呷I?AMKZ"2Obdx-W}-~7"kY,c.x.- 'noπdP㥇6SvgUϯϯ7=[EAC}hH?,o zW]$=~l/<yWE_?:ĻMj%z>k~ϼ~z/͓CAxƺdv9.$вn*WN| G𕪩;2SH!?aY_TB;SUdZ9IBsD0AT[u {2ӧMqHq3q$`mÂكA^H,:C]9~.WB'|_T̤Y@ޗFSFokBR HШu(MT"CeJ JE$3SY_JpO{{k׾Bn.d"su:WY +QJdGb8x,Y^x~Ǽ+x&"Sb<UL]PS 5ǥ?~~k#z8~L 3je z> ‡g n6(w{N" ;QÚ^$zGǘa޾wW3ɀtga:1\_ jz'Nz<5|c~wdj˼jJ&+R5oub>Fϐ_El8XGB/ _Ƨ"ɑW(> ֳ.zˠk697{z5ҹwu*'c?H*Sb ##vd߈|0 &~->i`A!H( [? >qHko|/IJ~M\=S΢XD9-BV%2!-G{>%P1,(}IA /бfGڨ?+ sͧEW7;ЖD\:SXg0ӓ|MRK1IڻZ$O_hӐߩX,wpG?w*piB}Rܭh}VFceLhY UL Q#,3תGy*G,$Qlz(0oj3"T8ŸIFfɈ*^ۼ`1X2/\?+yïVXiAGoBcYC$2tvw(& F.DU?>zn ۸˘ zʢH0f#X͸Fk.&2aGhJԶf,?j U)[|"ᰴ//8O緕[&*m y,r)il1j#_ZZ869XX*=N4+h)_ GekyPNPlAe'Q2Ix-5| ^]%yJ_W|,'"!߮B`R&V1YsK0&֫>ɦPEEk!AРiWr[&`wXq!9zk{OpdJ>DW^*rS\ĹuDCO:ߝ#1} E0|&U21 C\u>>goGo4>6 xO)U1h;rk<%|.9iF#(v#ާQ/윫ʗ^8oNV#j<[4\NOԣ4K][ )rFTii6!6!/ 9rlS~Zg1FyIZ tmV=T-Xap͵P:l=huОY~FW1Jɂ^o>wF̙Ưŷ=c":wXiJR\!Ꝼ00{(y;+isēH<-D4] ^>"%3bebY=ء|j-.5!8Xd;$vcnD `&oey}M*fZخ7LnGR))Yw!tA:̸ Q@-T^IˮAGXJQ@a1>P:}nETZs߯>~(Υ[|$-D q8 n4u4vs[\ 6h7-p!v[YTkl\.+z*qH ID~ kߕW.Mri"vn&zPϮ~U1i~Tق7[Y2o>+D(bň$3zWlQ5-D:n4@RI%FH}Еf?lbjouwOa(807*2ꅛx8Q)W a_Q V :WL@#qKsuOwA$*龍 #A,b,q)TK@dΓ9GM-).G#򽤻9HV~&Ձ'og(E{ki~S[Ĭ@!OBzTG'W|PΣCiH0GPWrǜbW"P^w:>ZG/Z|簻Xŗ tâcoy1SĄ0FcMYj~JP2o Hm1Z˲k.93LGw\9(0LZ5N QO Ұ~WkfE|Zk(V^.V03#8y+u]l*C;^x훼 K\S􌔊u6V?\T6( 6codZ˂:gVd,ʨ*:7R2v[RiyuU@gc4RAԦ|OzUS2[}SyZi C]rBbSSsY}%ZΙ|9IGc4"gHwwl =_nupթSe^%Eد4ub(|XkIB> JE:nkEgQ'F2:l'~G SK0Zk7ۿa?xQgՑ=Hu ~M;L:Q__/ =1wq/y~3qYv4u6BPP(^hu٦7A|qfadנHS3q=bY/Dm(I}3'n7V}qlDxyٙǟUBOb&G1˘\8,y%%~t7m[RgWkuN =Aqˢ7tyIɖR튨ɞPw [oXxn7)C>-/wZOd"gkջ߈@֣p1lR#>G }•~>e|mOʁ==ER8f03@cЋLLwt d8{\7{e_.+ 4@{`x_!v[1ǚi>cPluq#N+|!BOP3vfpq;N~U=63Q#-0>Ks+"~b=O?7nuܺCw%i=4u azӏ (E Wz0iۯ"bN ӝ.S4׭kTKA.XXi@2 SH{67 WALۈ6 DuN~ VrKa J^N\1Tq&3s+*O؟cWQ86M4[)l7W-544D]w 6H+ޕx?oxq߽2ӣ򇡵_5OfyKKXekע0EաUO )oyߏiFٕuиo_b+֮Xx(*^` {;g(7kdAr{cY]d96,P֊ ~,OmH+;8P,"ǒ(Z(%~Ц޾܏dG+"75 :1!'^dv|BBL -V.)a#i~A">J+En+9d#}i%m}CsM|u|L5adBh'ҋ4롰N:/*ݎL\E>nsQ rnw!NUFn"_ZVq9M8Z5cwv@E)M\ dm_64+Fަئˠ0qA۱^^ᘎxPxIQIkݜ>D~ԢZfN೺WHFq.Wkj׵)wIVݖ]3YkN1iO\n'R)Zt0>Xe2~-?y_Jέ4BaH|64wGVB j-h1Dn17l"QH3 ^WM\9P"QqH52'fm'PXE t/tۙl|kycоZ}]ڶ1A7%C-.;en0C\KP@S^w8f́qzC߶Y 'O$۽B.ޕf/fiO7rRGI["Vo]to,1W6SDbWrETHt; ZceX-n yզDirichletMultinomial/data/xval.rda0000644000175200017520000001216214710220024020263 0ustar00biocbuildbiocbuild]bBf#d.2! "d11F"&)b# ?YX!+5 AV#k[d-C#{d#ٌ8 d+8#d;ىBv#{>d?⊸!x!o B|G"ǐ$9!')4 gP$ G"H$C#H4r *r CH@d&Bn#.# yd",$y^r\Hm^%)m&@D/TH\^Nyo g'UE\r\.9jE)fd^du#r̓7 ;+k7g<7\l)3yv`!U7?ږUlps^yi:5<;:v;@O![B˰OH4nrJ" 9.Q [/M2Q"E~5{@3HmETt6Uۀmr]M-Pm}+i W3EͶ[*]%8ܮvoq=@r%N2Qv)wCLO3;F@/]nq[R y܃GEV((|iDM*f"jVۯ +CmұQ?#hGbq9@'$3.28P}+^vs?KC7F*[G8mT74mom=5kw--]mO) V? tF@-=#],Rnw3h_4Vh%Zk/)Ҫ[ mlNӃ)*t T߉SGEOHt_,*k^.Y5GvaT|?T~S) òrAvQptn nS Fγh  S ~NW8~&Jk{ԻrsbX7ce'snjM|5*}+ϮٻGO ϔ6p[h@`Zo7wH OM|j SsϏBq\;23ryEꔛaJg/jco5!H mW *|&S^G*e:.*Ab}G++һCj'Tpg'Oά;4<Cu/cf/;:8W\5(TW ٓB}+fGE;!A/xΒcwaG;UC.R"5hGyr};!@WStTRR*db\=_k>Ws&Vw_v6uNc(h~d>S3fsdCs_s!1%GKIu/ieƞ|c/6D+ܰdc}gk|}/HP\r0Ç!@k#o{֯8TʺgԚbbZd5-~H=2{Uzafqr+dt[И^BU3P@q\}9eмfRj(O8?64;6 Ǘ>#gЪ^Ӈr6;2?9NQ/\OSb3Úya/))#FCW gc\=c #;'96b ]w:ٖ8qu(h<ዊ Ըr"5 H2($˨pmYugwIΉ I3D%ߏ:6v,߶^P8|y+(q+ZWW$B|bUʻ!kN>l[7@MwQo֡7{Լ'{9%ulqP{o1>iz)Ci׹Oڭ肆{B{(wz@+/ʋG`ݽu|+6H,lA񉐎rk:|fݥ/-Y_χU^@=3Zi yT_M5K F^US*ohz9'XW[~c}:ғ}0T0VހtzU@j'zì-_?ڎZYfox+}ڐLG+Ѿ<6+[V na{MC;O 9٪@`kas+"-+n%[X=x tQIqMA.̒ͯS7ZEw@.-y:y -v\y_%08&(2ַ%,i[K0;%uE4kDj$B N^fRZxrn#i÷f gx |&>)̡RhpZ %NrЩS%[C5סnkuxhwqli%IINf}RR~Fcj6qǸW'WnZ9WsLQD^BzD߮B5{oC8srtQp{E RN =yh<;ėb &}(_5n>s|?|&r>˥̸]HNW=¼Fڛ衏OWE@|pK㪬wꜧKվwh{ s"Fㄡh^Ol}]bEw/$yZ᫃!2I,2~ 7᳹i]{:ދ3h|ջ]yP/rǓTA^Ȼm/6Jh>In WOȀs1GЯXߓcy]{Yl衉9p4~S5_~\_>k曺I]lKװ|O->S˖ ]5OʹYG^N)'m}ܟ6mZq9$ w;f] ^ޑ>Y4z{ؾH7Px|xijT)t<<y0JOwn m}70{ W!/{ c78IѠiR<|Iԩn~Ozf3xr3mڇ~P8s&1N%jX\W'.wYmu.; UG,,YGf2?56=&͗IǰA=(eO T\X=ַ_&T- vFK~|ʻ:6Be$?_들y}A :70uRF0$y/+O^UG-=Gm3Ƴsm%1>}pM0s"u(x1qH\/xT 7AMptec>?;C%Tݹ2@/.lCmLol o,)ZǺ[?}OsG@5K!VCV@~x\i{u<Ѯ=:f=3k<zeo=l6`4@󇿎J;'G- 8mXzD(99!ŴiP05a:?E9S_&¿=Gd'o^&\V,IET`1+6vGbp>Q䊘Sɩ9"b:&\b@HD/.#\;s=J 6t61%dH<r\Ĥl!X'2䖄~xx\=E3u 2&U%B!9GF(D8Ip>c4GL4泈e0f,Q  m? @ 7\CGF1 1h+bi\2w bz>}b'=OgXX\Ft1M1i-1JP)DXX\lFc wFab?#Q JI@(&ljz2K6dLsbnȅlpIE&s!،"9L 3hd3O"8ӄd4#0a'M 4F>c.S_S/!ua=y_cN"f HcpqHK&2r]бFx Hqbx\F0;#`/bfVEL b!+mB*Z20Mu8e1Bq0OS 61{1rƝUHG"<.C"J^h5nx#I\ (?{0/bq_NĪb. uÑ]lG0:.ygq#a0݉4~gg~doeo[m6:Kë7 "DirichletMultinomial/inst/0000755000175200017520000000000014710276433016702 5ustar00biocbuildbiocbuildDirichletMultinomial/inst/doc/0000755000175200017520000000000014710276433017447 5ustar00biocbuildbiocbuildDirichletMultinomial/inst/doc/DirichletMultinomial.R0000644000175200017520000001027514710276432023720 0ustar00biocbuildbiocbuild## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----library, message = FALSE------------------------------------------------- library(DirichletMultinomial) library(lattice) library(parallel) ## ----colors--------------------------------------------------------- options(width=70, digits=2) full <- FALSE .qualitative <- DirichletMultinomial:::.qualitative ## ----data-input----------------------------------------------------- fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) count[1:5, 1:3] ## ----taxon-counts--------------------------------------------------- cnts <- log10(colSums(count)) densityplot( cnts, xlim=range(cnts), xlab="Taxon representation (log 10 count)" ) ## ----fit------------------------------------------------------------ if (full) { fit <- mclapply(1:7, dmn, count=count, verbose=TRUE) save(fit, file=file.path(tempdir(), "fit.rda")) } else data(fit) fit[[4]] ## ----min-laplace, figure=TRUE--------------------------------------- lplc <- sapply(fit, laplace) plot(lplc, type="b", xlab="Number of Dirichlet Components", ylab="Model Fit") (best <- fit[[which.min(lplc)]]) ## ----mix-weight----------------------------------------------------- mixturewt(best) head(mixture(best), 3) ## ----fitted--------------------------------------------------------- splom(log(fitted(best))) ## ----posterior-mean-diff-------------------------------------------- p0 <- fitted(fit[[1]], scale=TRUE) # scale by theta p4 <- fitted(best, scale=TRUE) colnames(p4) <- paste("m", 1:4, sep="") (meandiff <- colSums(abs(p4 - as.vector(p0)))) sum(meandiff) ## ----table-1-------------------------------------------------------- diff <- rowSums(abs(p4 - as.vector(p0))) o <- order(diff, decreasing=TRUE) cdiff <- cumsum(diff[o]) / sum(diff) df <- cbind(Mean=p0[o], p4[o,], diff=diff[o], cdiff) DT::datatable(df) |> DT::formatRound(colnames(df), digits = 4) ## ----heatmap-similarity--------------------------------------------- heatmapdmn(count, fit[[1]], best, 30) ## ----twin-pheno----------------------------------------------------- fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) table(pheno) ## ----subsets-------------------------------------------------------- counts <- lapply(levels(pheno), csubset, count, pheno) sapply(counts, dim) keep <- c("Lean", "Obese") count <- count[pheno %in% keep,] pheno <- factor(pheno[pheno %in% keep], levels=keep) ## ----fit-several---------------------------------------------------- if (full) { bestgrp <- dmngroup( count, pheno, k=1:5, verbose=TRUE, mc.preschedule=FALSE ) save(bestgrp, file=file.path(tempdir(), "bestgrp.rda")) } else data(bestgrp) ## ----best-several--------------------------------------------------- bestgrp lapply(bestgrp, mixturewt) c( sapply(bestgrp, laplace), 'Lean+Obese' = sum(sapply(bestgrp, laplace)), Single = laplace(best) ) ## ----confusion------------------------------------------------------ xtabs(~pheno + predict(bestgrp, count, assign=TRUE)) ## ----cross-validate------------------------------------------------- if (full) { ## full leave-one-out; expensive! xval <- cvdmngroup( nrow(count), count, c(Lean=1, Obese=3), pheno, verbose=TRUE, mc.preschedule=FALSE ) save(xval, file=file.path(tempdir(), "xval.rda")) } else data(xval) ## ----ROC-dmngroup--------------------------------------------------- bst <- roc(pheno[rownames(count)] == "Obese", predict(bestgrp, count)[,"Obese"]) bst$Label <- "Single" two <- roc(pheno[rownames(xval)] == "Obese", xval[,"Obese"]) two$Label <- "Two group" both <- rbind(bst, two) pars <- list(superpose.line=list(col=.qualitative[1:2], lwd=2)) xyplot( TruePostive ~ FalsePositive, group=Label, both, type="l", par.settings=pars, auto.key=list(lines=TRUE, points=FALSE, x=.6, y=.1), xlab="False Positive", ylab="True Positive" ) ## ----sessionInfo---------------------------------------------------- sessionInfo() DirichletMultinomial/inst/doc/DirichletMultinomial.Rmd0000644000175200017520000001676514710220024024235 0ustar00biocbuildbiocbuild--- title: "DirichletMultinomial for Clustering and Classification of Microbiome Data" date: "`r BiocStyle::doc_date()`" author: - name: Martin Morgan affiliation: - Roswell Park Comprehensive Cancer Center, Buffalo, NY vignette: > %\VignetteIndexEntry{DirichletMultinomial for Clustering and Classification of Microbiome Data} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document: toc_float: true package: DirichletMultinomial --- Modified: 6 March 2012, 19 October 2024 (HTML version) ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` This document illustrates the main features of the *DirichletMultinomial* package, and in the process replicates key tables and figures from Holmes et al., . We start by loading the package, in addition to the packages *lattice* (for visualization) and *parallel* (for use of multiple cores during cross-validation). ```{r library, message = FALSE} library(DirichletMultinomial) library(lattice) library(parallel) ``` We set the width of [R]{.sans-serif} output to 70 characters, and the number of floating point digits displayed to two. The `full` flag is set to `FALSE`, so that cached values are used instead of re-computing during production of this vignette. The package defines a set of standard colors; we use `.qualitative` during visualization. ```{r colors} options(width=70, digits=2) full <- FALSE .qualitative <- DirichletMultinomial:::.qualitative ``` # Data The data used in Homes et al. is included in the package. We read the data in to a matrix `count` of samples by taxa. ```{r data-input} fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) count[1:5, 1:3] ``` The figure below shows the distribution of reads from each taxon, on a log scale. ```{r taxon-counts} cnts <- log10(colSums(count)) densityplot( cnts, xlim=range(cnts), xlab="Taxon representation (log 10 count)" ) ``` # Clustering The `dmn` function fits a Dirichlet-Multinomial model, taking as input the count data and a parameter $k$ representing the number of Dirichlet components to model. Here we fit the count data to values of $k$ from 1 to 7, displaying the result for $k = 4$. A sense of the model return value is provided by the documentation for the [R]{.sans-serif} object `fit`, `class ? DMN`. ```{r fit} if (full) { fit <- mclapply(1:7, dmn, count=count, verbose=TRUE) save(fit, file=file.path(tempdir(), "fit.rda")) } else data(fit) fit[[4]] ``` The return value can be queried for measures of fit (Laplace, AIC, BIC); these are plotted for different $k$ in The figure. The best fit is for $k=4$ distinct Dirichlet components. ```{r min-laplace, figure=TRUE} lplc <- sapply(fit, laplace) plot(lplc, type="b", xlab="Number of Dirichlet Components", ylab="Model Fit") (best <- fit[[which.min(lplc)]]) ``` In addition to `laplace` goodness of fit can be assessed with the `AIC` and `BIC` functions. The `mixturewt` function reports the weight $\pi$ and homogeneity $\theta$ (large values are more homogeneous) of the fitted model. `mixture` returns a matrix of sample x estimated Dirichlet components; the argument `assign` returns a vector of length equal to the number of samples indicating the component with maximum value. ```{r mix-weight} mixturewt(best) head(mixture(best), 3) ``` The `fitted` function describes the contribution of each taxonomic group (each point in the panels of the figure to the Dirichlet components; the diagonal nature of the points in a panel suggest that the Dirichlet components are correlated, perhaps reflecting overall numerical abundance. ```{r fitted} splom(log(fitted(best))) ``` The posterior mean difference between the best and single-component Dirichlet multinomial model measures how each component differs from the population average; the sum is a measure of total difference from the mean. ```{r posterior-mean-diff} p0 <- fitted(fit[[1]], scale=TRUE) # scale by theta p4 <- fitted(best, scale=TRUE) colnames(p4) <- paste("m", 1:4, sep="") (meandiff <- colSums(abs(p4 - as.vector(p0)))) sum(meandiff) ``` The table below summarizes taxonomic contributions to each Dirichlet component. ```{r table-1} diff <- rowSums(abs(p4 - as.vector(p0))) o <- order(diff, decreasing=TRUE) cdiff <- cumsum(diff[o]) / sum(diff) df <- cbind(Mean=p0[o], p4[o,], diff=diff[o], cdiff) DT::datatable(df) |> DT::formatRound(colnames(df), digits = 4) ``` The figure shows samples arranged by Dirichlet component, with samples placed into the component for which they had the largest fitted value. ```{r heatmap-similarity} heatmapdmn(count, fit[[1]], best, 30) ``` # Generative classifier The following reads in phenotypic information ('Lean', 'Obese', 'Overweight') for each sample. ```{r twin-pheno} fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) table(pheno) ``` Here we subset the count data into sub-counts, one for each phenotype. We retain only the Lean and Obese groups for subsequent analysis. ```{r subsets} counts <- lapply(levels(pheno), csubset, count, pheno) sapply(counts, dim) keep <- c("Lean", "Obese") count <- count[pheno %in% keep,] pheno <- factor(pheno[pheno %in% keep], levels=keep) ``` The `dmngroup` function identifies the best (minimum Laplace score) Dirichlet-multinomial model for each group. ```{r fit-several-} if (full) { bestgrp <- dmngroup( count, pheno, k=1:5, verbose=TRUE, mc.preschedule=FALSE ) save(bestgrp, file=file.path(tempdir(), "bestgrp.rda")) } else data(bestgrp) ``` The Lean group is described by a model with one component, the Obese group by a model with three components. Three of the four Dirichlet components of the original single group (`best`) model are represented in the Obese group, the other in the Lean group. The total Laplace score of the two group model is less than of the single-group model, indicating information gain from considering groups separately. ```{r best-several} bestgrp lapply(bestgrp, mixturewt) c( sapply(bestgrp, laplace), 'Lean+Obese' = sum(sapply(bestgrp, laplace)), Single = laplace(best) ) ``` The `predict` function assigns samples to classes; the confusion matrix shows that the classifier is moderately effective. ```{r confusion} xtabs(~pheno + predict(bestgrp, count, assign=TRUE)) ``` The `cvdmngroup` function performs cross-validation. This is a computationally expensive step. ```{r cross-validate} if (full) { ## full leave-one-out; expensive! xval <- cvdmngroup( nrow(count), count, c(Lean=1, Obese=3), pheno, verbose=TRUE, mc.preschedule=FALSE ) save(xval, file=file.path(tempdir(), "xval.rda")) } else data(xval) ``` The figure shows an ROC curve for the single and two-group classifier. The single group classifier is performing better than the two-group classifier. ```{r ROC-dmngroup} bst <- roc(pheno[rownames(count)] == "Obese", predict(bestgrp, count)[,"Obese"]) bst$Label <- "Single" two <- roc(pheno[rownames(xval)] == "Obese", xval[,"Obese"]) two$Label <- "Two group" both <- rbind(bst, two) pars <- list(superpose.line=list(col=.qualitative[1:2], lwd=2)) xyplot( TruePostive ~ FalsePositive, group=Label, both, type="l", par.settings=pars, auto.key=list(lines=TRUE, points=FALSE, x=.6, y=.1), xlab="False Positive", ylab="True Positive" ) ``` ```{r sessionInfo} sessionInfo() ``` DirichletMultinomial/inst/doc/DirichletMultinomial.html0000644000175200017520000721231014710276433024465 0ustar00biocbuildbiocbuild DirichletMultinomial for Clustering and Classification of Microbiome Data DirichletMultinomial/inst/extdata/0000755000175200017520000000000014710220024020315 5ustar00biocbuildbiocbuildDirichletMultinomial/inst/extdata/TwinStudy.t0000644000175200017520000000105414710220024022454 0ustar00biocbuildbiocbuild0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 2 2 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 0 2 1 1 1 1 1 2 0 0 0 1 1 2 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 2 1 1 0 0 0 2 1 1 1 2 0 0 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 2 0 2 0 0 0 0 2 2 1 1 1 1 2 2 1 1 2 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 0 0 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 DirichletMultinomial/inst/extdata/Twins.csv0000644000175200017520000023527514710220024022154 0ustar00biocbuildbiocbuildTaxa,TS1.2,TS10.2,TS100.2,TS100,TS101.2,TS103.2,TS103,TS104,TS105.2,TS105,TS106.2,TS106,TS107.2,TS107,TS109.2,TS109,TS10,TS11.2,TS110.2,TS110,TS111.2,TS111,TS115.2,TS115,TS116.2,TS116,TS117.2,TS117,TS118.2,TS118,TS119.2,TS119,TS11,TS12.2,TS120.2,TS120,TS124.2,TS124,TS125.2,TS125,TS126.2,TS126,TS127.2,TS127,TS128.2,TS128,TS129.2,TS129,TS12,TS13.2,TS130.2,TS130,TS131.2,TS131,TS132.2,TS132,TS133.2,TS133,TS134.2,TS134,TS135.2,TS135,TS136.2,TS136,TS137.2,TS137,TS138.2,TS138,TS139.2,TS139,TS13,TS140.2,TS140,TS141.2,TS141,TS142.2,TS142,TS143.2,TS143,TS144.2,TS144,TS145.2,TS145,TS146.2,TS146,TS147.2,TS147,TS148,TS149,TS14,TS15.2,TS150,TS151.2,TS151,TS152.2,TS152,TS153,TS154.2,TS155.2,TS155,TS156.2,TS156,TS15,TS160.2,TS160,TS161,TS162.2,TS162,TS163.2,TS163,TS164.2,TS164,TS165.2,TS165,TS166.2,TS166,TS167.2,TS167,TS168.2,TS168,TS169.2,TS169,TS16,TS170.2,TS178.2,TS178,TS179.2,TS179,TS17,TS180,TS181.2,TS181,TS182.2,TS182,TS183.2,TS183,TS184,TS185.2,TS185,TS186,TS19.2,TS190,TS191,TS192,TS193.2,TS193,TS194.2,TS194,TS195.2,TS195,TS19,TS1,TS2.2,TS20.2,TS20,TS21.2,TS21,TS22,TS23,TS25.2,TS25,TS26.2,TS26,TS27.2,TS27,TS28,TS29,TS2,TS3.2,TS30.2,TS30,TS31.2,TS31,TS32.2,TS32,TS33.2,TS33,TS34,TS35,TS37.2,TS37,TS38.2,TS38,TS39.2,TS39,TS3,TS4.2,TS43,TS44,TS49.2,TS49,TS4,TS5.2,TS50.2,TS50,TS51.2,TS51,TS55.2,TS55,TS56.2,TS56,TS57.2,TS57,TS5,TS6.2,TS61.2,TS61,TS62.2,TS62,TS63.2,TS63,TS64.2,TS64,TS65.2,TS65,TS66.2,TS66,TS67.2,TS67,TS68.2,TS68,TS69.2,TS69,TS6,TS7.2,TS70.2,TS70,TS71.2,TS71,TS72,TS73,TS74.2,TS74,TS75.2,TS75,TS76.2,TS76,TS77,TS78.2,TS78,TS7,TS8.2,TS82.2,TS82,TS83.2,TS83,TS84.2,TS84,TS85.2,TS85,TS86.2,TS86,TS87.2,TS87,TS88.2,TS88,TS89.2,TS89,TS8,TS9.2,TS90.2,TS90,TS91.2,TS91,TS92.2,TS92,TS94.2,TS94,TS95.2,TS95,TS96.2,TS96,TS97.2,TS97,TS98.2,TS98,TS99.2,TS9 Acetanaerobacterium,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,4,0,0,2,0,3,1,4,0,0,0,0,0,2,0,0,3,0,1,6,0,1,2,4,1,2,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,1,3,0,0,0,0,6,1,0,0,0,1,1,0,0,1,1,6,1,5,4,1,0,2,0,2,0,2,2,0,4,4,1,0,2,0,2,1,8,0,0,2,0,0,0,0,3,0,0,6,0,1,0,0,0,0,0,1,3,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,2,1,0,4,0,0,3,1,3,0,0,0,1,0,0,6,2,5,2,0,7,1,1,4,0,1,1,12,8,0,1,1,8,0,3,0,0,1,0,0,2,0,2,2,0,1,0,0,0,1,0,0,11,0,0,0,0,0,0,4,1,1,0,0,0,0,0,1,3,0,1,1,6,0,0,3,0,0,0,1,1,1,2,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,7,1,0,1,0,0,0,0,1,1,0,2,0,0,0,0,0,0,1,0 Acetivibrio,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,0,4,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,2,0,4,1,0,7,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,5,0,0,0,0,0,2,0,0,1,0,0,4,37,2,2,4,0,0,0,1,4,0,0,0,0,0,0,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,1,0,0,1,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,9,0,0,0,0,0,2,0,0,0,0,0,1,0,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0 Acetobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Acidaminococcus,0,0,1,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,2,8,53,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,14,0,0,0,0,4,16,1,0,0,0,0,8,2,0,0,21,30,24,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,2,1,0,0,0,0,0,13,0,0,0,0,0,0,16,5,0,0,0,0,0,0,0,0,0,57,0,0,0,0,11,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,48,0,0,0,0,19,9,0,0,0,0,0,0,23,0,0,0,0,0,0,0,56,20,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,23,0,0,0,1,1,2,7,16,0,0,0,0,0,1,0,0,0,0,0,0,0,0,31,15,10,6,0,11,14,0 Actinobaculum,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Actinomyces,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,0,0,3,0,0,1,0,0,0,0,1,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Akkermansia,1,0,1,1,1,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,0,0,0,20,0,0,7,4,1,0,0,0,0,0,0,0,0,0,0,0,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,15,8,0,0,0,4,0,1,0,28,8,0,13,1,3,1,0,0,0,0,17,0,0,0,0,0,0,0,0,0,1,9,0,0,1,3,1,4,4,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,2,0,5,4,4,18,7,12,0,0,8,0,4,6,22,1,0,0,80,0,0,0,4,20,1,0,1,39,0,0,9,1,18,0,6,8,0,0,6,0,10,0,0,1,0,0,0,108,0,0,0,0,0,0,3,0,0,0,0,0,1,5,3,0,9,0,1,48,0,0,0,0,0,14,6,0,0,0,0,0,0,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,6,0,0,6,0,0,0,0,2,3,4,10,0,1,0,0,0,0,0,6 Alistipes,41,0,3,23,0,30,1,51,9,2,2,4,11,26,17,21,0,16,268,41,39,65,0,7,6,14,7,36,14,13,9,2,21,0,1,0,73,29,2,19,24,12,25,180,16,46,35,32,0,48,0,0,3,4,31,58,7,27,63,17,52,43,40,22,11,26,5,2,16,10,78,1,5,25,13,150,15,44,18,70,16,312,53,205,264,201,70,51,33,28,20,3,156,112,89,88,33,7,5,5,29,5,155,4,6,34,2,19,74,49,22,11,378,330,5,41,27,50,105,43,23,24,61,2,0,0,4,2,3,9,6,10,14,76,1,45,4,23,17,1,2,25,4,426,19,3,18,28,68,71,21,120,99,58,284,0,43,18,0,151,147,212,277,30,49,33,6,303,53,157,83,133,512,36,93,4,73,4,11,114,22,74,9,56,104,67,30,20,7,15,0,61,0,0,0,39,290,0,0,0,16,0,0,3,16,5,1,15,23,23,119,356,413,156,46,186,283,9,9,9,21,13,161,36,6,19,26,22,24,20,81,35,29,1,1,11,18,2,3,4,119,9,23,0,3,1,2,0,21,0,12,11,4,8,13,13,44,14,421,45,83,43,2,0,0,0,45,26,38,85,56,15,3,1,1,15,14,137 Allisonella,0,0,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,1,0,2,3,0,0,1,1,2,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,6,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerobiospirillum,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerofilum,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0 Anaerofustis,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerosporobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerostipes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,2,0,3,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,3,0,3,1,1,0,0,0,0,0,0,0,1,2,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,4,1,1,2,0,0,9,0,0,0,0,1,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Anaerotruncus,37,9,0,0,9,1,0,1,0,0,2,0,0,0,9,0,27,10,8,10,14,9,24,1,0,63,0,0,36,11,2,1,2,0,34,2,1,2,3,5,3,3,1,305,3,6,1,1,0,0,2,1,0,3,43,0,0,6,0,0,1,4,3,4,1,4,4,18,3,18,3,5,0,0,1,2,1,2,52,76,21,14,28,120,105,49,0,44,56,3,1,2,7,2,7,8,2,5,77,5,3,2,11,0,2,0,0,3,2,2,3,4,35,13,3,1,0,0,8,3,3,24,10,8,4,3,0,2,3,2,18,44,0,2,0,47,2,4,2,2,19,0,1,1,0,1,0,0,15,14,24,103,8,13,19,7,10,0,1,2,24,4,14,4,22,10,7,53,2,2,2,3,212,1,4,1,36,2,10,11,5,5,5,0,4,7,2,3,5,0,2,0,0,0,0,0,1013,0,0,7,0,1,0,0,1,3,0,3,0,3,1,9,4,10,3,4,1,1,0,9,0,0,12,0,0,0,4,2,0,1,14,14,3,2,0,10,30,0,0,0,4,0,0,0,0,0,6,1,1,2,1,5,5,40,1,2,7,0,16,0,4,24,10,2,0,0,3,1,0,111,9,0,0,0,0,8,4,1 Arthrobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Asaccharobacter,0,0,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,2,1,1,5,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,3,0,0,0,0,0,0,1,4,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,19,8,0,0,2,0,35,7,1,3,1,0,5,0,0,0,0,2,0,1,1,0,0,0,0,0,4,0,1,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,3,0,0,0,0,3,0,1,0,2,0,2,2,0,0,2,0,1,0,0,2,1,0,2,0,0,1,0,0,0,1,5,0,0,0,0,0,0,0,3,2,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,0,1,2,0,0,0,0 Asticcacaulis,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Atopobium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Bacteroides,194,227,56,555,34,552,124,415,792,60,453,275,112,292,375,709,434,613,367,99,338,342,7,32,21,224,493,359,185,754,509,517,707,254,130,3,759,507,20,726,192,33,204,356,308,1121,764,526,524,81,1110,900,606,632,913,540,895,336,314,128,655,609,154,45,86,476,280,137,338,20,1065,54,97,347,327,936,137,525,459,461,168,651,540,490,342,573,549,719,1775,97,24,29,450,387,264,479,566,219,277,279,171,352,340,29,42,256,1133,1427,513,307,584,628,403,174,22,723,59,87,435,198,193,244,1206,616,16,28,31,8,237,826,656,703,136,1482,692,1087,573,515,355,464,0,327,745,640,137,203,230,494,456,505,1075,886,268,217,620,301,1681,75,95,455,1708,547,4973,42,1103,427,44,1316,123,288,609,1562,2649,241,759,0,369,16,21,581,993,39,29,259,1529,844,772,424,42,281,256,2379,47,441,25,382,242,1194,464,0,1000,1,923,539,121,886,81,173,842,80,329,562,555,301,188,1227,372,366,122,259,698,461,808,835,47,218,253,448,532,285,945,42,170,278,234,332,857,0,539,95,864,30,59,28,565,232,12,15,563,306,304,484,27,89,641,919,610,361,1858,470,478,576,121,8,110,154,582,481,672,694,358,219,436,550,861,835,1404,2546 Barnesiella,21,0,0,5,0,5,1,0,0,0,0,0,0,0,9,6,0,0,13,15,5,26,0,0,0,0,0,0,1,0,0,0,0,0,2,1,1,1,0,1,61,5,30,60,4,8,0,3,0,23,0,0,0,0,0,0,0,0,0,0,0,0,9,10,1,6,0,0,4,3,58,5,0,3,0,0,0,2,6,0,0,1,0,44,47,0,0,9,9,1,0,0,0,0,0,0,32,7,9,3,0,0,9,0,2,0,0,0,14,9,0,0,15,23,0,0,0,0,0,0,19,3,0,0,0,0,0,0,0,0,0,0,3,17,0,27,0,12,17,0,0,7,0,0,2,0,0,0,15,10,17,71,0,18,53,0,0,0,0,0,0,0,0,12,26,0,0,1,2,21,17,0,0,22,46,4,36,0,0,5,1,19,1,42,52,1,17,13,2,0,0,37,0,0,0,20,79,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,59,13,39,23,3,2,5,3,4,0,2,0,8,13,1,0,0,0,4,4,0,0,4,1,0,0,0,2,10,0,0,0,0,1,1,0,0,3,10,0,4,4,6,12,8,72,0,23,43,0,0,0,0,0,0,0,0,13,3,0,0,0,0,0,0 Bifidobacterium,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,7,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,2,0,0,0,2,0,0,1,0,4,0,3,0,0,1,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,1,0,0,0,0,0,0,0,0,0,2,1,1,0,0,0,0,1,0,0,0,2,1,0,2,0,0,3,0,0,1,3,2,12,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,2,2,0,0,0,0,0,0,0 Brachyspira,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Bradyrhizobium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Bulleidia,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Butyricicoccus,1,4,0,2,0,4,1,3,0,0,1,4,0,1,4,3,0,1,2,1,1,1,1,0,0,2,2,4,3,2,3,6,2,0,2,1,0,1,0,5,1,0,7,4,1,1,2,5,1,1,3,0,3,4,3,0,6,0,2,4,1,2,1,4,1,0,1,5,1,1,0,2,3,2,4,0,1,2,7,0,2,0,0,1,1,1,2,4,12,2,0,22,0,2,1,2,7,0,1,2,6,1,40,0,6,0,1,1,1,1,1,2,0,0,2,3,0,2,4,4,4,0,0,0,3,3,1,1,0,2,1,2,2,5,6,0,1,2,3,21,0,7,1,0,13,0,0,0,8,2,0,13,0,1,12,3,14,1,0,1,4,1,5,0,2,13,1,15,3,0,4,1,4,5,13,0,3,0,3,0,2,0,4,0,6,3,0,5,1,2,0,5,2,1,3,1,7,4,4,0,5,0,0,6,3,0,0,0,1,1,2,0,0,0,3,9,0,3,0,1,8,3,1,3,0,1,2,5,1,2,5,2,1,0,0,5,1,0,3,1,12,0,5,4,6,2,1,1,3,2,1,4,0,1,1,1,10,2,10,1,2,2,4,0,3,4,3,2,6,3,0,0,1,6,7,2,0,6 Butyricimonas,1,0,0,2,0,0,0,0,0,0,0,0,0,0,4,8,0,0,3,0,1,0,2,2,6,1,4,3,6,7,8,11,0,0,8,0,0,0,0,0,8,4,1,0,0,0,3,6,0,2,0,0,0,0,0,0,0,0,0,0,2,2,6,3,0,2,0,0,0,1,2,1,1,8,1,22,7,3,2,9,3,0,0,7,7,0,0,4,8,1,0,0,0,0,3,0,0,1,1,2,0,2,0,0,2,0,0,0,0,0,0,0,16,3,0,3,0,0,11,5,0,0,4,0,0,0,0,1,1,0,1,7,2,10,0,9,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,33,14,17,2,11,1,4,5,2,1,0,17,8,3,1,13,0,0,0,1,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,11,8,0,0,1,0,0,0,7,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,11,3,0,0,0,0,1,0,0,0,0,1,0,0,0,0,10,8,16,0,6,8,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0 Butyrivibrio,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,1 Campylobacter,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Catenibacterium,0,0,139,126,0,0,0,0,0,0,0,0,184,6,0,0,0,0,0,0,0,0,52,59,71,119,0,0,0,0,0,0,0,1,0,0,0,0,0,2,22,27,0,0,3,0,0,0,0,0,0,3,0,0,0,0,100,61,0,2,0,0,0,1,0,0,0,0,126,104,0,5,5,17,5,22,31,6,0,21,14,0,0,29,41,2,0,0,0,0,0,0,30,122,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,72,0,0,0,0,0,0,135,172,0,0,60,232,28,46,0,0,99,87,139,96,316,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,492,457,55,615,91,15,0,0,0,1,0,3,0,0,0,0,660,768,0,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,8,0,0,0,0,0,0,164,28,0,0,0,0,110,264,12,30,0,0,0,0,0,0,181,9,0,0,10,2,25,87,0,0,0,0,0,0,0,0 Caulobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Citrobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,5,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0,0,1,27,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,2,0,0,0,1,0,0,0,0,0,0,0,0,0,4,0,0 Cloacibacillus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,1,1,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Clostridium,1,0,1,3,1,0,1,0,0,0,0,3,1,5,0,1,1,0,0,3,0,0,2,2,0,1,14,11,1,1,0,0,1,0,1,0,0,0,1,2,0,1,4,1,7,3,1,1,2,0,2,2,1,9,1,0,0,6,0,0,0,0,8,4,4,2,1,3,6,0,3,1,0,1,0,1,1,0,2,1,0,2,0,1,6,1,0,1,0,2,1,1,0,4,5,0,0,0,15,16,2,1,59,1,1,0,0,0,5,0,9,3,7,126,1,0,82,26,0,4,1,1,0,12,5,9,1,3,1,0,0,17,28,3,0,0,0,0,0,5,1,1,2,0,0,0,0,0,0,0,22,0,6,0,1,6,15,0,171,24,19,7,54,0,3,0,2,0,0,4,3,4,1,6,0,0,0,0,7,1,6,2,2,5,6,0,8,0,0,2,3,2,21,0,10,0,0,0,0,5,7,1,4,67,0,0,0,0,1,1,3,0,5,34,6,1,1,0,1,1,10,1,14,4,8,1,3,1,2,0,0,3,1,0,0,11,2,6,0,0,127,0,0,1,4,0,0,2,1,3,1,1,0,1,1,0,1,0,20,0,0,0,1,0,0,0,3,10,1,0,8,0,3,4,11,2,1,16 Collinsella,0,7,10,2,0,3,1,0,0,0,23,5,105,37,0,1,25,6,0,2,0,5,33,34,8,51,19,35,53,4,32,32,9,6,22,4,12,5,82,34,17,11,4,8,25,63,0,10,19,9,15,0,0,0,51,8,25,20,8,8,0,0,14,4,6,6,5,15,3,34,2,1,0,2,0,10,55,6,41,13,5,0,0,0,0,9,8,1,20,106,8,71,0,0,0,0,11,35,8,12,10,1,4,1,2,1,0,0,0,0,0,0,4,13,25,4,139,14,13,8,33,10,0,9,21,106,12,44,0,1,3,8,18,9,18,3,35,0,0,1,104,8,2,2,0,2,1,0,0,0,27,0,9,12,39,91,30,258,0,23,3,89,9,41,68,0,4,188,1,24,0,2,47,73,20,169,16,19,49,151,16,58,43,50,5,4,0,61,155,135,54,0,54,246,169,11,335,0,0,0,0,0,0,215,55,13,5,0,2,0,0,1,7,16,3,11,0,0,4,15,16,4,40,14,185,1,2,2,5,1,7,20,10,0,0,20,5,141,8,17,29,0,8,1,28,17,2,2,0,0,0,37,5,14,9,6,3,9,0,15,4,3,31,5,59,8,24,15,0,0,23,4,15,12,0,0,2,4 Coprobacillus,7,32,2,3,0,0,11,0,0,0,1,21,5,0,9,25,113,2,112,70,5,31,0,0,0,0,52,75,8,6,38,25,0,0,15,1,7,3,5,1,1,0,0,1,0,5,9,59,0,104,4,0,0,1,31,14,4,3,9,1,19,29,1,0,18,11,1,13,0,1,70,0,5,0,4,0,0,0,0,1,1,23,53,1,1,3,1,9,41,653,75,0,0,0,0,0,4,0,0,0,0,0,1,0,0,0,0,1,0,2,0,0,0,4,33,2,27,10,26,16,0,0,0,10,0,2,0,0,0,1,0,0,1,3,0,0,15,0,36,0,263,13,0,41,46,50,0,9,25,73,247,53,3,55,239,1102,862,2,24,23,124,113,62,0,10,3,0,0,86,1,0,25,271,14,0,0,2,26,6,82,20,157,50,60,29,265,7,87,0,0,11,3,551,471,243,3,82,2,0,4,57,0,0,723,0,6,1,3,1,1,46,7,12,14,20,65,13,2,24,7,27,16,161,92,7,0,2,7,23,8,2,9,2,0,1,2,8,0,1,3,36,7,7,11,12,3,0,0,15,60,0,4,0,0,3,1,0,5,53,10,0,1,5,2,26,15,0,1,0,0,0,1,41,15,8,0,0,33 Coprococcus,3,2,42,32,2,11,20,17,7,9,17,19,5,2,7,10,5,8,13,16,22,24,22,41,131,63,5,0,6,10,37,18,13,6,41,1,20,6,0,0,65,30,26,66,9,17,6,5,14,54,6,3,0,0,14,4,28,2,27,8,9,9,54,46,7,20,1,16,47,26,171,8,47,42,22,6,6,14,53,18,10,29,29,10,14,44,13,41,24,97,22,47,18,34,36,16,29,20,29,14,2,15,55,23,30,1,5,2,29,0,46,36,6,21,4,19,33,11,90,124,88,67,15,2,11,1,12,5,0,8,1,29,28,7,9,3,33,46,15,7,36,90,30,126,33,13,10,5,0,2,87,15,8,110,218,2,25,13,38,79,148,54,170,43,29,2,1,26,10,4,4,11,83,10,7,8,230,29,163,33,6,85,12,16,24,21,46,16,7,6,486,71,9,3,125,5,197,13,37,0,25,9,12,103,5,45,4,19,7,32,54,38,62,17,19,41,17,34,0,18,35,22,11,15,60,49,28,10,27,13,0,29,17,63,47,48,20,24,38,5,96,10,12,10,18,4,24,10,14,17,2,11,16,36,4,10,34,11,128,115,16,87,26,9,26,15,21,17,4,6,25,17,6,2,13,0,0,298 Coraliomargarita,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 Coriobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Corynebacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,2,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Desulfocurvus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Desulfovibrio,3,0,0,0,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,1,0,0,6,12,0,0,0,2,0,0,2,0,2,0,0,1,1,2,1,0,0,1,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,7,1,14,0,5,1,1,2,0,0,0,1,1,0,0,0,0,0,0,7,3,1,1,0,0,0,0,0,0,2,0,0,1,0,1,1,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,4,0,0,3,0,8,7,0,0,1,0,8,0,2,0,0,0,0,2,1,0,25,33,22,0,3,2,6,0,1,0,0,4,5,0,1,0,0,0,0,4,0,0,0,0,5,0,0,0,3,0,0,0,0,1,0,0,0,1,0,0,0,4,0,10,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2,5,0,0,6,1,1,7,0,0,0,0,0,0,0,3,1,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0 Dialister,9,8,0,0,0,0,0,0,10,7,1,0,63,31,0,0,6,20,0,0,0,0,19,27,29,22,0,0,0,0,11,19,3,19,0,0,0,0,0,0,0,14,8,12,2,0,0,0,2,0,9,0,27,30,20,0,16,5,14,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,4,6,16,23,0,0,0,0,0,1,0,0,32,0,77,26,1,16,17,0,0,13,0,0,0,10,13,261,0,0,20,35,9,8,5,0,0,2,10,0,0,3,12,0,0,0,0,0,6,0,0,32,13,0,0,13,17,0,0,0,0,5,0,7,0,0,0,10,12,0,0,0,0,0,0,0,20,2,89,273,14,60,0,0,0,0,1,0,0,0,4,0,16,0,0,0,0,0,0,0,0,277,0,0,0,0,16,24,0,0,0,17,0,23,0,1,58,0,27,177,37,59,0,0,5,47,0,13,0,0,0,0,0,0,0,0,10,15,3,5,62,0,0,0,9,9,0,1,0,0,0,0,11,19,0,0,0,0,0,0,4,19,12,0,0,0,1,0,0,0,0,0,0,16,49,0,1,0,0,0,0,17,0,103,7,19,10,0,0,19,7,23,12,20,23,0,0,4,2,16,0,0,19 Dickeya,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Dorea,3,17,87,86,81,42,39,23,0,0,18,41,118,58,19,8,46,15,9,15,24,31,13,20,12,20,105,55,41,26,17,26,0,31,37,1,15,68,69,5,6,5,5,46,15,16,3,7,73,24,17,2,92,134,53,24,45,32,1,10,8,15,15,25,43,42,10,94,10,108,43,2,31,16,1,26,90,12,67,30,16,7,0,23,43,144,44,26,63,598,22,229,18,12,2,1,31,11,10,25,20,5,72,8,8,9,77,89,26,23,17,7,6,27,48,16,110,31,5,7,23,19,23,15,46,122,26,71,2,6,2,4,27,103,33,15,15,5,22,11,261,0,18,40,16,4,11,2,20,34,143,5,1,46,159,51,97,76,7,10,49,63,65,6,25,46,11,11,13,0,3,24,106,80,65,62,463,48,42,59,39,24,48,29,28,22,25,55,18,134,111,3,108,40,361,21,365,103,89,0,45,4,40,347,40,28,10,51,11,25,17,23,17,7,29,43,5,42,1,23,20,14,2,54,55,7,11,12,79,4,28,24,74,0,0,64,14,5,31,15,90,1,12,18,51,15,43,0,10,45,20,20,39,28,5,22,26,27,107,9,25,25,69,22,96,21,10,0,6,7,7,2,69,21,15,35,1,22 Dysgonomonas,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Eggerthella,0,2,1,1,3,0,0,1,0,1,1,0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,5,0,0,0,0,0,1,0,0,5,5,1,2,0,0,1,0,1,3,1,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,4,1,0,0,2,2,0,0,70,0,0,2,4,3,4,0,0,2,4,0,0,0,0,0,0,1,6,1,1,5,1,3,5,33,0,2,0,1,0,0,0,4,1,0,2,1,0,0,0,0,1,0,0,0,0,0,0,2,2,0,0,0,0,1,0,0,0,0,0,2,0,0,2,1,0,1,21,26,7,0,20,5,2,0,1,0,2,0,4,1,1,3,0,0,0,0,2,0,3,0,0,0,0,0,1,1,2,3,2,3,2,7,5,1,0,16,5,6,0,0,0,1,16,1,0,0,14,2,0,5,0,1,0,1,2,0,1,0,0,0,0,3,1,0,0,0,0,0,0,1,1,2,4,2,0,0,2,0,0,0,1,2,0,0,0,12,1,0,1,0,0,2,0,1,2,0,0,0,1,2,0,0,0,3,0,0,2,0,1,0,1,1,0,0,0,1,0 Enterobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Enterococcus,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 Enterorhabdus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Escherichia/Shigella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 Ethanoligenens,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,17,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Eubacterium,2,0,63,110,148,0,0,0,2,0,0,0,124,51,4,0,1,3,6,0,0,0,8,13,29,50,1,6,120,54,1,2,0,0,107,1,8,28,1,0,18,7,0,0,1,3,0,0,2,0,2,8,0,4,0,1,0,0,4,0,2,1,21,23,88,23,0,0,104,85,0,6,50,42,35,51,105,1,1,9,13,0,0,15,23,0,0,1,1,0,0,0,1,0,9,7,0,2,23,6,19,31,0,2,3,0,0,9,2,14,149,114,0,4,113,27,0,0,0,0,87,107,0,124,69,110,35,124,1,0,4,0,1,1,0,2,0,0,1,36,0,0,44,0,0,1,0,0,4,1,10,2,0,0,12,1,9,10,7,0,0,0,0,45,115,6,1,2,0,0,0,28,123,58,18,255,492,1,114,40,49,40,34,3,0,0,9,0,27,234,543,4,1,0,2,4,3,7,3,12,1,0,1,8,0,5,2,6,0,1,2,19,41,0,1,0,1,0,0,28,31,0,0,1,327,0,0,2,0,0,30,34,30,3,5,347,0,9,75,17,596,8,0,0,0,0,34,11,5,4,10,23,17,30,0,4,37,23,119,0,0,0,61,8,1,0,27,12,20,77,2,0,1,0,0,3,4,0 Faecalibacterium,83,93,89,126,34,261,33,131,138,18,149,115,327,76,145,143,361,248,484,40,188,123,115,238,137,136,247,332,123,295,153,13,281,295,178,4,124,29,21,32,88,77,157,37,338,500,258,119,132,90,203,200,12,39,83,84,315,229,301,120,64,167,215,138,37,391,72,119,146,251,648,325,686,322,488,165,191,348,229,124,185,67,116,92,204,248,145,392,989,843,349,0,158,235,105,97,328,23,20,43,284,152,901,176,218,405,325,110,534,187,335,190,59,7,17,159,22,128,115,94,169,292,443,42,128,72,228,131,44,196,230,85,527,504,8,103,30,389,488,324,2,272,129,58,202,97,264,149,83,171,133,460,120,404,1546,54,522,109,27,139,133,179,312,35,35,930,113,394,168,231,575,239,1626,322,840,46,768,119,361,387,94,247,33,147,454,511,90,48,46,3,51,176,62,59,61,71,39,165,113,0,429,0,30,403,252,116,7,96,78,87,60,220,263,180,119,467,68,208,66,372,364,228,140,828,369,343,137,318,93,71,188,81,280,0,0,369,439,387,260,172,821,69,484,255,410,297,55,271,190,65,333,586,91,70,179,18,657,155,1995,207,93,139,100,51,390,455,70,143,274,181,292,202,110,264,252,573,122,713 Fusobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 Gemella,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Geosporobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Gordonibacter,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,3,2,0,4,1,1,1,1,0,0,0,6,0,0,0,0,0,1,0,1,2,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 Granulicatella,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 Haemophilus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 Hallella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Hespellia,0,0,34,0,1,16,3,3,0,31,8,1,0,2,0,0,0,7,18,0,1,23,0,0,1,0,0,3,0,1,5,4,6,0,0,0,1,34,25,22,12,3,0,0,1,0,0,0,4,4,17,20,27,15,2,38,2,2,20,21,2,3,0,0,0,0,6,8,1,23,11,0,0,9,0,29,1,12,1,0,0,1,0,1,0,79,4,0,2,9,0,53,15,0,38,2,7,6,7,0,1,1,0,0,0,0,4,90,3,2,75,1,1,4,2,15,2,8,22,2,0,5,10,8,0,0,0,0,0,0,5,0,0,0,2,8,7,0,1,0,4,7,13,20,4,4,0,0,0,1,274,7,1,2,5,31,14,122,8,85,60,17,87,1,176,35,26,340,22,27,53,57,1,4,1,1,98,0,2,0,3,1,5,1,6,35,17,8,7,37,52,115,11,20,84,24,272,24,32,2,6,0,11,114,28,27,0,80,28,12,13,0,7,3,1,1,10,2,3,1,17,0,0,96,37,0,0,2,8,0,36,1,20,75,3,0,2,0,0,0,61,2,0,1,0,0,4,0,0,0,0,3,0,0,4,11,0,1,0,29,20,14,3,1,1,2,2,0,1,0,1,0,51,22,18,3,1,86 Holdemania,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1,2,2,0,0,0,0,1,0,0,4,1,0,0,0,0,0,1,2,3,1,1,0,1,1,3,2,2,0,0,0,0,1,0,0,1,1,2,0,1,1,0,0,0,1,0,0,0,0,1,0,3,0,0,0,0,0,0,0,1,0,0,2,1,1,2,1,1,1,3,1,0,0,0,0,0,2,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,1,0,5,0,7,0,0,1,3,0,0,1,1,0,1,2,2,3,1,3,5,0,3,0,0,0,0,1,1,0,2,0,2,3,1,0,0,0,6,2,0,0,0,0,8,1,1,0,0,0,0,1,0,2,1,1,1,2,2,0,1,0,0,3,0,1,0,1,0,0,1,3,0,0,0,1,0,1,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1 Hydrogenoanaerobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 Klebsiella,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0 Lachnobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,7,0,0,0,0,0,2,10,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,18,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,73,2,11,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,15,123,0,0,0,0,0,0,0,0,10,0,6,0,0,1,2,0,19,2,0,46,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,86,32,0,4,0,0,0,0,0,0,0,2,12,0,1,0,0,0,0,0,0,0,0,12,0,0,2,6,0,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,0,0,0,5,8,7,11,4,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,8,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0 Lactobacillus,0,0,0,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2,2,0,0,0,0,0,0,1,0,0,14,0,1,0,0,1,175,100,0,0,1,0,0,0,0,0,0,0,17,40,1,0,0,0,0,0,0,0,3,1,24,10,0,0,0,0,0,5,3,1,0,7,6,3,2,27,17,0,0,0,0,0,0,9,32,0,0,0,0,0,1,0,14,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,3,2,2,0,0,1,0,0,0,0,0,1,13,302,17,2,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,4,0,0,0,0,1,0,15,52,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,3,8,5,0,0,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,14,0,0,0,0,0,0,93,6,0,0,0,0,2,0,0,0,0,0,0,9,7,0,1,3,0,0,0,0,0,0,3,4,0,1,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,2,12,3,7,32,15,0,0,0,0,0,0 Lactococcus,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,5,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,1,1,0,0,0,0,0,1,3,0,0,0,0,0,0,0,2,0,2,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,11,12,0,3,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,15,0,1,2,9,0,0,0,0,3,0,2,0,1,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Lactonifactor,0,0,13,18,0,13,2,1,0,0,1,0,0,8,0,0,0,0,0,0,0,11,2,2,0,5,0,0,0,0,6,1,0,0,22,0,0,2,0,0,2,0,0,1,0,13,1,0,1,3,0,13,0,7,0,0,2,3,0,0,3,15,0,0,0,4,1,8,4,0,18,3,0,1,8,0,0,0,0,3,3,0,0,3,0,16,0,20,9,0,0,14,5,6,0,0,11,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,8,3,0,0,6,1,1,1,0,0,4,0,0,0,0,9,14,0,0,3,3,0,1,5,3,0,6,3,0,0,0,0,0,0,1,11,30,17,2,9,0,0,0,0,0,1,1,3,2,1,12,0,0,0,0,10,35,0,3,5,12,9,2,0,0,21,1,8,9,6,0,2,7,26,2,4,4,1,6,41,31,1,16,1,0,36,11,0,2,2,10,0,21,0,0,0,2,31,4,3,1,4,5,0,0,42,12,2,0,4,17,0,15,1,3,0,0,2,3,0,0,0,8,1,2,6,6,3,0,1,0,0,0,22,2,0,2,0,5,4,5,0,1,1,13,0,8,0,0,0,0,0,3,0,1,5,1,0,0,1 Leuconostoc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 Luteococcus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Marvinbryantia,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,3,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,2,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,5,0,0,0,0,0,0,1,0,0,0,0,3,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 Megamonas,0,0,0,0,0,0,0,0,0,0,0,0,123,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,325,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,353,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0 Megasphaera,0,0,11,10,0,0,0,0,0,0,0,0,56,44,0,0,0,0,0,0,0,0,5,4,28,35,0,0,8,5,42,204,0,0,26,1,0,0,0,4,18,10,0,0,0,0,0,0,0,0,0,0,0,0,39,0,28,39,0,0,0,5,0,0,0,0,4,25,0,0,0,0,0,0,0,0,0,27,51,92,26,0,0,0,0,0,0,72,0,0,2,1,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,17,37,89,20,6,0,0,12,23,30,21,81,21,0,0,0,20,124,0,1,0,0,0,0,0,0,0,158,0,0,42,1,19,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,11,4,18,0,0,21,14,0,0,0,0,1,0,206,98,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,2,17,3,0,28,19,0,0,0,0,0,0,6,29,0,0,3,55,0,0,0,0,6,12,0,0,4,2,0,0,18,22,47,36,0,0,11,22,0,0,0,28,54,0 Methylobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Microbacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Mitsuokella,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,21,21,16,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,2,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,15,0,0,0,0,0,0 Mobiluncus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Moryella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Odoribacter,0,0,0,5,0,7,0,1,0,0,0,0,0,0,0,2,0,0,9,1,2,5,2,2,5,16,0,0,2,4,0,0,0,0,9,0,0,0,0,5,8,1,4,16,0,4,0,0,0,1,0,0,1,0,0,11,0,0,0,0,8,3,9,9,6,9,1,1,0,2,7,1,5,2,2,0,0,3,0,6,2,6,3,0,0,3,0,10,10,0,0,0,7,10,1,5,10,2,1,1,0,0,26,4,4,0,0,0,3,5,0,1,20,3,1,2,3,1,0,0,2,3,0,8,1,0,0,1,2,7,1,5,2,3,0,3,0,0,0,0,0,4,0,0,5,1,2,3,8,10,0,6,4,1,11,0,0,5,0,4,10,4,18,2,21,0,0,20,0,0,0,7,16,7,5,0,4,0,0,8,4,6,0,2,10,0,7,4,0,0,0,3,0,0,0,5,1,0,0,0,4,0,0,0,1,6,3,3,3,0,0,16,5,8,2,18,9,3,2,3,1,3,1,3,0,6,10,6,2,1,0,0,4,4,0,1,5,0,0,0,4,0,2,0,0,0,0,0,0,0,1,4,3,9,0,0,10,12,13,0,0,0,0,0,0,0,0,0,9,9,13,4,0,0,0,3,9,0 Olsenella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,6,13,98,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,63,157,13,99,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,1177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,2,1,0,0,0,0,1,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,7,2,0,0,0,0,0,0 Oribacterium,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,13,8,0,0,0,21,1,0,0,1,0,0,0,4,0,0,6,0,0,0,0,0,0,0,0,0,3,13,0,13,0,0,1,0,0,0,0,0,0,0,0,1,6,3,0,0,0,0,0,7,0,1,0,0,0,0,1,5,4,0,0,0,0,0,1,0,0,2,2,0,0,7,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,3,0,1,0,1,0,0,1,0,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,16,0,0,5,0,0,0,0,6,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,2,0,0,7,2,0,0,0,0,0,1,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,0,0,0,0,2,5,0,0,0,0,0,0,0,2,0,0,0,0,4,3,0,0,0,0,1,0,0,2,0,0,0,4,0,0,0,0,4,0,1,1,0,0,0,0,0,0,0,8,2,0,0,0,0,0,0 Oscillibacter,113,0,3,12,1,29,2,37,6,0,2,1,3,2,11,12,3,0,151,11,45,68,51,57,59,487,0,5,8,11,7,5,8,0,53,2,58,42,2,35,200,11,44,134,17,53,46,38,0,31,11,2,4,1,127,49,79,26,45,14,47,33,59,24,27,35,1,8,16,5,122,37,49,35,6,77,2,18,36,68,21,431,112,287,133,84,15,53,73,18,7,0,131,38,136,135,10,70,108,191,66,39,171,13,23,10,3,19,4,5,154,68,126,71,2,32,9,17,116,54,70,85,241,8,5,0,51,30,21,17,18,17,24,78,2,13,2,25,10,3,0,19,3,40,5,5,13,23,35,28,3,242,67,21,15,10,15,2,1,298,357,58,255,113,434,70,2,819,10,29,22,133,465,30,21,6,154,3,24,8,6,48,1,13,34,33,33,37,10,6,6,29,2,7,1,16,267,10,0,0,7,1,8,18,3,71,3,14,8,18,22,69,61,96,26,124,274,9,13,23,19,32,23,36,5,33,39,30,18,13,13,46,10,3,2,32,33,0,5,4,133,19,29,4,7,4,14,5,9,1,24,68,66,143,41,5,65,37,426,30,39,109,8,0,3,0,101,33,49,93,122,39,0,0,2,5,16,127 Oxalobacter,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Papillibacter,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Parabacteroides,5,1,1,0,0,2,2,0,0,0,1,2,1,5,1,16,1,2,91,1,51,39,0,0,1,2,0,0,0,0,4,5,0,0,1,0,1,0,0,1,1,0,0,4,0,9,0,2,0,1,0,0,4,1,2,7,0,1,0,0,2,4,2,3,0,0,0,0,1,0,2,0,0,1,0,1,0,3,2,1,0,14,3,0,0,9,4,46,3,0,0,1,3,0,3,4,1,5,3,2,0,1,8,2,1,8,3,4,0,0,1,0,1,1,0,1,0,0,0,0,1,0,44,1,0,1,0,0,1,0,0,0,2,4,1,1,0,8,0,0,0,1,1,0,0,4,1,4,1,14,8,7,7,9,18,1,10,10,2,9,44,2,7,1,35,9,0,32,1,11,10,6,10,2,8,1,8,1,2,9,4,4,0,8,10,5,7,5,19,3,0,44,0,0,0,3,13,7,1,1,0,0,8,2,2,3,0,2,9,0,0,13,8,6,7,68,3,0,2,1,12,2,119,6,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,13,9,2,1,2,1,0,1,1,0,0,1,2,4,2,1,1,0,57,1,1,2,0,0,1,1,5,2,0,0,1,1,0,1,0,0,0,3 Paraeggerthella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Paraprevotella,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,23,2,0,0,0,2,13,4,0,0,0,0,0,0,0,8,2,1,0,0,0,0,2,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,6,4,2,20,0,0,4,1,0,5,5,9,7,0,0,2,0,3,2,0,0,0,0,0,0,14,242,0,0,3,0,0,0,0,0,0,3,5,0,0,0,2,5,0,0,0,0,0,0,0,6,5,2,6,0,0,0,0,0,0,0,0,1,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,23,0,0,15,42,0,0,0,3,0,0,2,3,0,0,0,0,0,4,0,0,0,0,0,0,5,0,165,7,0,0,0,0,0,8,0,0,1,0,0,0,13,8,0,0,11,0,0,0,0,0,1,0,33,0,0,0,0,0,0,0,0,4,0,0,23,0,0,47,2,4,0,0,0,0,0,18,46,0,0,2,30,3,2,0,0,6,0,0,0,0,0,6,4,0,0,16,0,0,0,0,0,6,7,0,0,0,0 Parasutterella,1,0,0,0,0,0,3,0,0,0,0,0,0,0,12,2,0,0,0,0,8,3,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,8,0,1,3,5,2,15,1,0,0,0,0,0,0,0,10,5,17,13,0,0,11,20,0,0,0,1,0,0,0,0,0,0,0,0,0,11,0,0,2,1,0,0,0,2,4,19,16,0,0,0,0,2,2,12,1,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,1,2,7,3,0,0,11,5,0,0,0,0,0,0,9,7,0,0,1,0,11,7,6,1,0,0,2,0,0,0,2,7,0,0,0,1,1,0,0,0,0,7,0,0,0,0,0,0,0,4,3,2,0,0,0,11,27,0,0,0,0,0,6,26,8,0,0,3,3,1,0,16,0,0,0,0,0,15,1,3,0,0,0,224,40,0,0,0,0,11,1,0,1,0,0,0,0,3,7,2,0,7,4,0,1,12,0,0,0,0,0,3,1,0,0,0,2,13,13,0,0,0,0,0,0,0,1,1,0,0,0,0,8,0,2,10,0,0,8,4,0,0,0,5,0,1,0,0,0,0,0,0,17,6,6,2,0,0,4,3,9,8 Pediococcus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Pelomonas,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Peptococcus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Peptostreptococcus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Phascolarctobacterium,0,0,0,0,2,9,6,10,0,0,0,0,0,0,22,31,0,0,0,0,21,45,0,1,0,0,0,0,0,0,0,0,0,0,0,0,36,35,1,18,3,8,2,0,9,36,17,19,0,5,0,0,0,0,1,23,0,0,0,0,38,43,0,0,0,0,6,21,0,0,35,0,0,0,0,0,0,0,0,0,0,39,40,10,21,46,14,1,0,1,0,10,0,0,18,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,5,6,5,0,36,0,0,0,0,0,0,0,0,0,0,0,0,2,28,0,0,0,0,12,36,11,18,2,0,4,0,0,0,10,1,9,19,76,15,63,0,0,0,0,0,0,18,7,14,96,17,100,0,0,17,1,1,3,11,36,0,0,0,0,0,0,0,0,50,20,6,0,0,0,38,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,39,0,10,12,3,5,0,8,3,4,1,0,15,8,0,0,16,0,0,1,4,16,1,9,15,47,0,0,10,5,0,0,0,0,0,132,0,0,0,25,4,0,0,0,0,0,0,0,0,9,12,12,15,0,0,12,4,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0 Porphyromonas,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Prevotella,0,0,0,0,1,0,0,0,0,0,0,0,11,72,5,15,0,0,0,0,6,24,60,107,46,17,0,0,4,0,0,0,0,0,114,4,0,1,0,0,0,1,0,0,1,0,0,1,0,3,0,2,0,0,0,0,0,0,0,0,0,0,202,32,2,147,0,0,0,0,0,243,49,0,0,2,0,41,1,146,168,0,0,0,0,0,0,1,0,5,708,0,0,1,0,0,0,13,31,38,11,2,1612,229,189,0,0,1,0,0,1,1,0,0,0,1,0,1,0,5,19,46,12,2,139,1,203,2,0,0,1,0,634,0,0,0,0,0,0,0,0,0,0,0,13,40,0,0,0,0,0,0,0,842,1632,0,2,0,0,0,1,1,2,0,1,0,0,0,1,0,1,0,2,443,994,1,71,10,417,0,0,10,68,7,0,0,0,0,40,164,17,0,0,0,0,356,206,1,1,4,0,0,0,2,653,0,0,5,0,0,0,0,0,1,0,1,0,0,0,37,131,1,0,756,18,0,0,0,0,0,0,19,17,0,0,0,0,8,0,55,668,0,33,109,37,11,59,106,76,15,51,119,24,30,0,0,0,0,1,0,0,0,232,6,1,0,0,0,0,0,7,22,0,0,0,0,0,0 Propionibacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Proteus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Pseudobutyrivibrio,6,5,0,0,7,0,1,0,0,0,1,0,0,0,0,0,0,39,0,0,0,0,0,2,0,0,1,25,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,121,0,0,0,0,4,1,0,0,2,2,7,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,3,0,0,0,0,1,2,0,0,0,1,0,4,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0,0,0,34,18,0,0,1,0,0,13,1,0,349,0,0,0,0,0,2,4,0,0,0,0,0,0,1,0,1,0,1,6,1,0,0,2,24,0,1,0,0,77,0,0,0,1,0,0,14,1,286,0,0,0,0,0,61,0,0,8,0,0,0,3,0,0,0,0,72,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,20,2,0,0,0,0,1,0,0,0,6,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,138,0,0,0,69 Pyramidobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Ralstonia,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Rhizobium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Robinsoniella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 Roseburia,8,42,19,58,19,17,87,19,50,29,22,78,50,34,51,35,82,100,50,10,87,118,16,13,27,14,83,76,25,26,68,39,105,30,21,0,20,48,9,33,9,9,73,34,158,95,49,21,62,15,56,62,16,96,63,30,33,42,90,28,40,159,119,66,43,27,13,40,141,41,55,13,6,123,58,6,13,35,108,25,38,8,30,7,9,38,187,57,374,132,105,133,4,12,2,1,5,20,23,13,35,32,141,5,8,59,55,38,52,75,54,51,5,2,50,114,26,20,24,72,20,10,51,42,52,8,19,2,17,31,13,38,101,133,29,33,223,121,66,28,84,21,33,33,45,53,5,1,75,11,602,28,15,120,482,154,245,146,49,19,11,17,12,11,79,29,30,116,25,33,48,24,83,55,37,15,117,36,82,212,107,34,38,45,187,63,45,97,18,60,257,29,118,14,13,35,164,152,51,111,134,124,202,232,32,19,9,148,42,43,71,60,70,23,71,133,25,65,12,88,154,72,71,133,42,29,12,34,16,16,71,53,50,419,234,101,129,223,53,20,300,10,36,22,81,60,40,22,98,54,19,79,21,82,65,83,86,33,132,150,50,28,69,13,43,12,26,24,68,45,34,40,28,151,51,25,88,270 Rothia,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 Ruminococcus,12,0,24,25,3,0,0,10,3,9,0,12,0,0,55,25,0,0,31,54,85,26,8,23,7,26,29,27,0,1,58,67,0,0,3,2,36,45,0,1,19,9,18,57,97,86,15,11,0,28,0,12,0,0,10,9,13,17,64,0,23,21,191,93,26,95,0,56,33,119,88,5,29,14,9,0,0,15,1,5,30,23,0,86,76,116,55,113,0,639,24,1,77,38,102,59,58,51,62,40,59,26,354,7,10,7,0,0,0,0,0,0,59,58,60,0,10,83,46,12,60,121,134,4,24,1,6,3,45,8,24,67,55,75,3,10,8,0,1,5,0,47,0,20,38,17,30,45,29,42,1,148,38,42,680,42,125,0,0,85,265,39,188,23,1207,307,3,868,5,12,49,59,495,43,1,7,207,16,21,88,96,15,33,7,48,89,0,17,0,1,0,2,0,0,74,0,3,0,0,0,36,5,4,8,3,144,24,2,2,39,15,84,7,19,26,152,30,47,20,68,37,42,0,122,42,86,47,57,39,91,40,53,59,2,1,27,15,0,0,4,144,4,33,3,11,29,5,5,16,54,68,154,12,35,56,0,53,24,534,7,111,50,24,13,2,0,87,33,61,69,48,13,0,15,1,50,21,249 Sarcina,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Selenomonas,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,0,0,0,0,0,0 Slackia,0,0,0,0,0,0,0,0,0,0,0,0,2,4,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,9,10,0,0,0,1,0,0,0,0,5,1,1,3,0,2,0,0,33,3,0,0,1,0,0,3,3,49,0,0,0,0,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Sneathia,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Solirubrobacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Solobacterium,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0 Sphingomonas,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Sporacetigenium,0,0,54,25,0,0,0,0,0,0,3,33,24,2,0,0,4,3,0,0,0,0,0,0,2,1,4,0,0,0,9,0,0,1,0,0,0,0,0,0,14,0,1,19,21,28,3,2,0,1,0,0,4,8,40,0,1,0,0,5,0,0,6,0,1,2,0,0,0,0,0,5,0,0,4,0,0,2,16,0,0,0,0,0,8,9,0,16,19,75,1,0,0,45,0,0,0,4,0,7,12,0,0,0,0,0,0,0,6,0,3,0,5,0,3,0,55,4,3,0,0,0,0,0,4,26,0,25,0,0,0,1,0,4,3,0,5,0,1,0,0,0,0,0,0,0,0,2,0,0,0,2,8,0,0,7,6,0,3,5,0,5,6,0,0,11,0,28,0,0,0,3,0,0,1,0,0,0,13,29,12,3,0,14,15,0,0,0,0,0,3,31,0,0,0,0,19,6,18,5,0,0,0,1,0,15,0,47,0,0,0,6,0,0,0,0,0,0,1,0,0,0,0,0,1,5,2,0,34,0,0,0,7,0,0,0,0,0,0,0,56,1,0,0,0,0,2,6,0,0,0,10,0,0,0,0,0,0,40,0,0,1,1,0,13,2,9,3,1,3,50,1,0,0,1,13,0,0 Sporobacter,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,5,0,1,0,3,5,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2,2,0,1,3,0,0,9,0,1,0,0,0,0,4,0,0,2,1,0,0,0,7,0,0,1,0,0,0,6,3,0,5,0,0,0,3,0,0,0,0,0,0,0,0,0,0,4,20,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,2,14,0,0,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,17,0,0,1,0,0,0,0,33,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,10,0,0,0,0,6,0,15,2,0,0,0,0,0,0,0,1,0,0,16,0,0,0,0,0,0,13 Streptococcus,0,1,9,4,7,3,2,1,0,1,20,25,11,11,1,1,7,5,1,8,14,39,1,0,1,2,0,3,2,0,1,2,8,11,13,0,3,1,0,1,393,332,0,1,13,17,1,8,23,5,1,0,2,2,18,2,3,12,5,0,3,1,1,1,1,0,1,1,2,9,7,1,0,16,16,3,2,12,2,20,69,0,2,0,0,4,9,1,29,72,19,9,5,1,2,0,1,0,0,0,4,19,17,0,0,0,0,0,3,4,0,3,0,1,31,1,3,0,0,2,2,2,34,9,10,9,3,5,0,0,9,5,5,3,38,6,2,4,4,1,13,5,1,0,1,0,0,3,1,1,5,0,1,4,2,6,12,97,47,8,61,8,19,21,55,4,0,1,177,2,0,1,30,8,1,3,79,2,9,13,0,26,40,3,3,1,0,1,40,10,14,0,3,8,31,7,19,2,3,2,1,9,5,3,18,4,2,12,1,7,0,1,2,2,4,0,1,0,2,1,1,1,433,9,5,3,0,6,12,9,2,0,7,0,1,14,33,9,19,0,2,0,3,4,1,0,6,0,0,0,0,1,3,15,1,1,0,1,2,20,58,47,9,5,6,0,0,2,7,5,6,25,3,6,2,1,0,12 Subdoligranulum,52,8,13,33,34,25,5,10,4,7,4,0,104,23,1,15,11,1,38,160,29,39,8,16,6,22,28,30,56,14,146,133,0,44,38,6,6,15,0,0,13,39,32,36,127,61,23,5,82,12,22,3,0,1,44,23,58,78,75,39,25,64,71,59,284,22,5,42,25,163,327,15,14,21,8,53,78,115,134,87,33,15,43,19,8,147,67,8,37,934,20,68,28,23,68,112,66,24,14,18,71,37,276,9,12,7,0,0,26,21,8,19,18,105,19,16,297,314,241,172,45,66,154,24,20,32,27,82,14,54,26,65,96,84,2,27,10,52,115,14,2,75,43,28,221,51,48,24,89,58,2,242,10,2,20,60,377,0,3,42,60,36,67,9,87,261,409,194,61,0,5,90,381,31,107,38,371,36,8,21,25,6,94,12,67,226,45,10,3,7,582,53,18,0,0,21,204,9,3,0,4,0,0,135,10,20,0,7,0,3,1,100,69,63,68,85,38,8,1,15,12,5,1,24,12,128,60,33,6,25,0,58,21,0,0,74,46,0,10,4,47,12,18,2,55,30,31,17,127,47,20,254,29,61,12,0,106,167,542,31,35,72,40,16,25,19,51,100,126,122,41,46,0,11,11,0,4,148 Succiniclasticum,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30 Sutterella,0,0,1,6,0,54,15,0,0,0,0,0,2,18,0,0,0,0,0,0,0,0,1,5,1,5,87,59,0,0,0,0,1,0,31,2,0,4,1,0,0,0,0,0,0,0,0,0,0,11,12,0,0,0,0,0,0,0,4,0,0,0,0,0,0,69,0,0,29,4,11,11,19,71,77,0,0,0,0,11,3,4,33,0,0,0,0,73,74,3,0,0,0,0,0,0,0,0,0,3,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,8,0,0,0,1,0,16,0,0,0,0,0,0,0,0,11,0,0,0,0,0,1,14,1,0,0,1,0,1,2,43,0,0,0,0,0,0,5,1,0,0,0,0,0,0,0,1,79,154,0,31,0,0,1,0,1,1,0,0,2,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,1,0,0,0,0,0,7,9,0,0,89,0,0,0,6,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,1,6,13,1,7,17,4,0,0,3,1,0,2,0,0,0,0,0,0,0,0,13,16,30,0,2,1,0,0,0,0,2,0,0,0,0,0,19,30,0,0,0,0 Syntrophococcus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 Tepidibacter,0,4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,2,0,0,1,3,0,0,0,1,0,1,0,0,0,7,0,1,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,5,9,0,0,0,0,18,3,0,0,1,0,0,0,2,0,0,0,9,0,0,0,0,4,19,0,0,0,0,14,0,14,9,0,0,0,0,0,0,6,0,0,1,0,0,0,1,0,0,0,7,0,0,0,0,0,0,0,3,0,0,2,0,0,0,2,0,0,0,18,7,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,9,0,0,3,0,12,0,0,0,0,0,0,0,0,0,0,0,1,0,0,3,0,0,0,0,7,0,0,1,0,0,0,0,0,4,0,0,0,1,0,7,0,1,0,0,3,1,2,0,22,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,1,35,0,0,1,0,0,0,1,0,0,2,0,5,0,0,0,0,0,0,0 Turicibacter,0,0,0,0,0,1,0,0,0,0,0,1,20,5,0,0,1,0,0,1,2,12,1,4,0,0,0,3,1,0,0,0,0,0,0,0,0,2,1,0,1,2,2,15,0,17,0,0,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,1,0,5,0,0,1,2,1,0,0,0,0,1,1,0,2,0,0,1,0,0,1,0,0,2,19,39,4,31,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,2,1,15,10,1,7,6,2,23,1,0,0,0,2,0,1,0,1,0,0,1,0,1,0,9,2,0,0,1,0,0,0,7,0,0,0,0,0,0,0,0,0,2,1,2,0,14,0,0,36,8,149,157,84,35,86,475,1,0,16,0,0,0,0,1,0,0,0,0,0,12,5,0,0,0,9,2,0,0,2,0,0,0,0,1,0,4,0,30,2,1,2,0,0,0,0,0,4,0,2,0,0,0,0,37,8,2,0,0,0,0,0,0,0,0,1,13,3,0,0,24,0,0,0,1,0,0,0,0,1,0,7,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,1,0,0,0,2,0,2,5,0,0,0,0 Uknown,206,196,429,365,564,408,248,287,157,599,372,475,507,333,340,316,447,580,1000,535,645,927,242,254,387,1114,290,311,477,238,657,562,460,476,303,16,310,679,897,668,238,299,568,681,672,476,272,407,413,291,273,300,895,614,539,409,353,120,276,237,230,291,696,612,461,234,215,952,387,690,1308,160,337,278,177,198,412,364,485,269,153,304,240,344,320,562,485,1490,1067,3582,425,3099,588,734,373,559,742,342,672,599,370,265,2435,136,183,209,479,235,309,314,430,425,772,760,1007,347,1046,430,815,444,545,511,527,302,372,342,338,718,151,265,190,395,723,595,298,174,340,466,573,253,1258,489,282,840,350,310,371,382,772,456,1446,783,434,373,2008,944,2447,1748,548,884,1770,1137,2505,553,2093,722,413,2757,312,717,2306,1058,3333,735,961,361,3496,313,649,728,369,422,954,340,607,1143,465,575,254,783,2049,1223,927,1180,3887,383,1447,1090,914,1938,706,1014,3536,4600,621,762,177,1074,180,691,382,556,524,1005,609,2713,799,513,174,322,333,605,680,879,523,414,364,431,615,335,607,398,516,343,368,533,287,363,370,121,1399,80,144,224,642,303,317,186,298,773,156,638,494,577,232,211,532,381,2143,312,654,356,489,190,748,589,520,372,332,364,784,287,634,270,199,424,191,1157 Varibaculum,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Veillonella,0,1,0,0,1,0,2,0,0,0,3,7,0,0,0,0,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,3,0,0,0,0,0,0,0,0,0,0,6,0,0,0,3,0,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,5,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,1,1,0,0,1,1,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,61,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,2,1,4,0,88,68,11,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,1,3,0,11,1,0,0,0,0,2,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0 Victivallis,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Weissella,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,226,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Xylanibacter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Zymophilus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DirichletMultinomial/man/0000755000175200017520000000000014710220024016461 5ustar00biocbuildbiocbuildDirichletMultinomial/man/DMN-class.Rd0000644000175200017520000000256714710220024020503 0ustar00biocbuildbiocbuild\name{DMN-class} \Rdversion{1.1} \docType{class} \alias{DMN-class} \title{Class \code{"DMN"}} \description{Result from fitting a Dirichlet-Multinomial model.} \section{Objects from the Class}{ Objects can be created by calls to \code{\link{dmn}}.. } \section{Slots}{ The contents of a slot is usually retrieved via the methods described on the \code{\link{mixture}} help page. \describe{ \item{goodnessOfFit}{NLE, LogDet, Laplace, AIC, and BIC criteria assessing goodness-of-fit.} \item{group}{\code{matrix} of dimension samples x \code{k}, providing the Dirichlet parameter vectors.} \item{mixture}{\describe{ \item{Weight}{\code{numeric()} of length \code{k}, with relative weight of each component.} }} \item{fit}{\describe{ \item{Lower}{\code{matrix()} of dimension taxa x \code{k} with 95\% lower bounds on Dirichlet component vector estimates.} \item{Estimate}{\code{matrix()} of dimension taxa x \code{k} with Dirichlet component vector estimates.} \item{Upper}{\code{matrix()} of dimension taxa x \code{k} with 95\% upper bounds on Dirichlet component vector estimates.} }} } } \section{Methods}{ See the \code{\link{mixture}} help page. } \author{ Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com} } \seealso{ \code{\link{dmn}}, \code{\link{mixture}}. } \examples{ data(fit) fit[[4]] } \keyword{classes} DirichletMultinomial/man/DMNGroup-class.Rd0000644000175200017520000000235114710220024021507 0ustar00biocbuildbiocbuild\name{DMNGroup-class} \Rdversion{1.1} \docType{class} \alias{DMNGroup-class} \title{Class \code{"DMNGroup"}} \description{Result from fitting a Dirichlet-Multinomial generative classifier.} \section{Objects from the Class}{ Objects can be created by calls to \code{\link{dmngroup}}. } \section{Slots}{ All slots in this class are inheritted from \code{SimpleList}; see \sQuote{Methods}, below, for information on how to manipulate this object. } \section{Extends}{ Class \code{"\linkS4class{SimpleList}"}, directly. Class \code{"\linkS4class{List}"}, by class "SimpleList", distance 2. Class \code{"\linkS4class{Vector}"}, by class "SimpleList", distance 3. Class \code{"\linkS4class{Annotated}"}, by class "SimpleList", distance 4. } \section{Methods}{ See the \code{\link{mixture}} help page for functions that operate on \code{DMNGroup} and \code{DMN}. \code{DMNGroup} can be manipulated as a list; see \code{\linkS4class{SimpleList} } for a description of typical list-like functions. } \author{ Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com} } \seealso{ \code{\link{mixture}}, \code{\linkS4class{DMN}}, \code{\linkS4class{SimpleList}}. } \examples{ data(bestgrp) bestgrp bestgrp[[1]] } \keyword{classes} DirichletMultinomial/man/DirichletMultinomial-package.Rd0000644000175200017520000000166614710220024024474 0ustar00biocbuildbiocbuild\name{DirichletMultinomial-package} \alias{DirichletMultinomial-package} \docType{package} \title{ Dirichlet-Multinomial Mixture Model Machine Learning for Microbiome Data } \description{ Dirichlet-multinomial mixture models can be used to describe variability in microbial metagenomic data. This package is an interface to code originally made available by Holmes, Harris, and Qunice, 2012, PLoS ONE 7(2): 1-15. } \details{ The estimation routine is from the LGPL-licensed (as stated on the corresponding googlecode page) source \url{http://microbedmm.googlecode.com/files/MicrobeDMMv1.0.tar.gz}, retrieved 17 Feburary 2012. The algorithm is described in Holmes I, Harris K, Quince C, 2012 Dirichlet Multinomial Mixtures: Generative Models for Microbial Metagenomics. PLoS ONE 7(2): e30126. doi:10.1371/journal.pone.0030126. } \author{Maintainer: Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \keyword{package} DirichletMultinomial/man/cvdmngroup.Rd0000644000175200017520000000500514710220024021134 0ustar00biocbuildbiocbuild\name{cvdmngroup} \alias{cvdmngroup} \title{ Cross-validation on Dirichlet-Multinomial classifiers. } \description{ Run cross-validation on Dirichlet-Multinomial generative classifiers. } \usage{ cvdmngroup(ncv, count, k, z, ..., verbose = FALSE, .lapply = parallel::mclapply) } \arguments{ \item{ncv}{\code{integer(1)} number of cross-validation groups, between 2 and \code{nrow(count)}.} \item{count}{\code{matrix} of sample x taxon counts, subsets of which are used for training and cross-validation.} \item{k}{named \code{integer()} vector of groups and number of Dirichlet components; e.g., \code{c(Lean=1, Obese=3)} performs cross-validation for models with \code{k=1} Dirichlet components for the \sQuote{Lean} group, \code{k=3} Dirichlet components for \sQuote{Obese}.} \item{z}{True group assignment.} \item{\dots}{Additional arguments, passed to \code{\link{dmn}} during each cross-validation.} \item{verbose}{\code{logical(1)} indicating whether progress should be reported} \item{.lapply}{A function used to perform the outer cross-vaildation loop, e.g., \code{lapply} for calculation on a single processor, \code{parallel::mclapply} for parallel evaluation.} } \value{ A \code{data.frame} summarizing classifications of test samples in cross-validation groups. Columns are: \item{group}{The cross-validation group in which the indivdual was used for testing.} \item{additional columns}{Named after classification groups, giving the posterior probability of assignment.} } \author{Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \seealso{ \code{\link{dmn}}, \link{DirichletMultinomial-package}, \code{vignette("DirichletMultinomial")} } \examples{ data(xval) ## result of following commands head(xval) \dontrun{ ## count matrix fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) ## phenotype fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) ## subset keep <- c("Lean", "Obese") count <- count[pheno %in% keep,] pheno <- factor(pheno[pheno %in% keep], levels=keep) ## cross-validation, single Dirichlet component for Lean, 3 for Obese xval <- cvdmngroup(nrow(count), count, c(Lean=1, Obese=3), pheno, verbose=TRUE, mc.preschedule=FALSE) }} \keyword{stats} DirichletMultinomial/man/dataobjects.Rd0000644000175200017520000000170114710220024021232 0ustar00biocbuildbiocbuild\name{data} \alias{fit} \alias{bestgrp} \alias{xval} \docType{data} \title{Data objects used for examples and the vignette} \description{ These data objects correspond to steps in a typical work flow, as described in the vignette to this package. \code{fit} corresponds to \code{dmn} fits to different values of \code{k}. \code{bestgroup} is the result of the two-group generative classifier. \code{xval} summarizes leave-one-out cross validation of the classifier. } \usage{ data(fit) data(bestgrp) data(xval) } \format{ \code{fit} is a list of seven \code{\linkS4class{DMN}} objects. \code{bestgrp} is a \code{\linkS4class{DMNGroup}} object. \code{xval} is a \code{data.frame} with columns corresponding to the cross-validation group membership and the Lean and Obese posterior probabilities. } \examples{ data(fit); fit[1:2] plot(sapply(fit, laplace), type="b") data(bestgrp); bestgrp data(xval); head(xval, 3) } \keyword{datasets} DirichletMultinomial/man/dmn.Rd0000644000175200017520000000405414710220024017531 0ustar00biocbuildbiocbuild\name{dmn} \alias{dmn} \title{ Fit Dirichlet-Multinomial models to count data. } \description{ Fit Dirichlet-Multinomial models to a sample x taxon count matrix. } \usage{ dmn(count, k, verbose = FALSE, seed = runif(1, 0, .Machine$integer.max)) } \arguments{ \item{count}{\code{matrix()} of sample x taxon counts.} \item{k}{\code{integer(1)}, the number of Dirichlet components to fit.} \item{verbose}{\code{logical(1)} indicating whether progress in fit should be reported.} \item{seed}{\code{numeric(1)} random number seed.} } \details{ This implements Dirichlet-multinomial mixture models describe in the package help page, \link{DirichletMultinomial-package}. } \value{ An object of class \code{dmn}, with elements (elements are usually retrieved via functions defined in the package, not directly). \item{GoodnessOfFit}{NLE, LogDet, Laplace, AIC, and BIC criteria assessing goodness-of-fit.} \item{Group}{\code{matrix} of dimension samples x \code{k}, providing the Dirichlet parameter vectors.} \item{Mixture}{\describe{ \item{Weight}{\code{numeric()} of length \code{k}, with relative weight of each component.} }} \item{Fit}{\describe{ \item{Lower}{\code{matrix()} of dimension taxa x \code{k} with 95\% lower bounds on Dirichlet component vector estimates.} \item{Estimate}{\code{matrix()} of dimension taxa x \code{k} with Dirichlet component vector estimates.} \item{Upper}{\code{matrix()} of dimension taxa x \code{k} with 95\% upper bounds on Dirichlet component vector estimates.} }} } \references{ Holmes I, Harris K, Quince C, 2012 Dirichlet Multinomial Mixtures: Generative Models for Microbial Metagenomics. PLoS ONE 7(2): e30126. doi:10.1371/journal.pone.0030126. } \author{ Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com} } \seealso{ \link{DirichletMultinomial-package}, \code{vignette("DirichletMultinomial")} } \examples{ data(fit) ## k = 1:7; full example in vignette lplc <- sapply(fit, laplace) plot(lplc, type="b") fit[[which.min(lplc)]] } \keyword{ manip } DirichletMultinomial/man/dmngroup.Rd0000644000175200017520000000365714710220024020616 0ustar00biocbuildbiocbuild\name{dmngroup} \alias{dmngroup} \title{ Dirichlet-Multinomial generative classifiers. } \description{ Fit Dirichlet-Multinomial generative classifiers to groups (rows) within a sample x taxon count matrix. } \usage{ dmngroup(count, group, k, ..., simplify = TRUE, .lapply = parallel::mclapply) } \arguments{ \item{count}{\code{matrix()} of sample x taxon counts.} \item{group}{\code{factor()} or vector to be coerced to a factor, with as many elements as there are rows in \code{count}, indicating the group to which the corresponding sample belongs.} \item{k}{\code{integer()}, the number(s) of Dirichlet components to fit.} \item{\dots}{Additional arguments, passed to \code{\link{dmn}}.} \item{simplify}{Return only the best-fit model for each group?} \item{.lapply}{An \code{lapply}-like function for application of group x k fits.} } \details{ This function divided \code{count} into groups defined by \code{group}, creates all combinations of \code{group} x \code{k}, and evaluates each using \code{\link{dmn}}. When \code{simplify=TRUE}, the best (Laplace) fit is selected for each group. } \value{ An object of class \code{dmngroup}, a list of fitted models of class \code{\link{dmn}}. When \code{simplify=TRUE}, elements are named by the group to which they correspond. } \references{ Holmes I, Harris K, Quince C, 2012 Dirichlet Multinomial Mixtures: Generative Models for Microbial Metagenomics. PLoS ONE 7(2): e30126. doi:10.1371/journal.pone.0030126. } \author{ Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com} } \seealso{ \code{\link{dmn}}, \link{DirichletMultinomial-package}, \code{vignette("DirichletMultinomial")} } \examples{ ## best fit for groups 'Lean' and 'Obese'; full example in vignette. \dontrun{bestgrp <- dmngroup(count, pheno, k=1:5, verbose=TRUE, mc.preschedule=FALSE) } data(bestgrp) bestgrp bestgrp[["Obese"]] } \keyword{ manip } DirichletMultinomial/man/fitted.Rd0000644000175200017520000000567614710220024020245 0ustar00biocbuildbiocbuild\name{model components} \alias{mixture} \alias{mixturewt} \alias{goodnessOfFit} \alias{laplace} \alias{AIC,DMN-method} \alias{BIC,DMN-method} \alias{fitted,DMN-method} \alias{predict,DMN-method} \alias{show,DMN-method} \alias{fitted,DMNGroup-method} \alias{predict,DMNGroup-method} \alias{summary,DMNGroup-method} \alias{show,DMNGroup-method} \title{Access model components.} \description{ The accessors \code{mixture} and \code{mixturewt} return information about the estimated Dirichlet components of the fitted model. Return values are described in the Values section, below. } \usage{ mixture(object, ..., assign=FALSE) mixturewt(object, ...) goodnessOfFit(object, ...) laplace(object, ...) \S4method{AIC}{DMN}(object, ..., k = 2) \S4method{BIC}{DMN}(object, ...) \S4method{fitted}{DMN}(object, ..., scale=FALSE) \S4method{predict}{DMN}(object, newdata, ..., logevidence=FALSE) \S4method{fitted}{DMNGroup}(object, ...) \S4method{predict}{DMNGroup}(object, newdata, ..., assign=FALSE) \S4method{summary}{DMNGroup}(object, ...) } \arguments{ \item{object}{An instance of class \code{\link{dmn}}.} \item{newdata}{A \code{matrix} of new sample x taxon data to be fitted to the model of \code{object}.} \item{...}{Additional arguments, available to methods, when applicable.} \item{assign}{\code{logical(1)} indicating whether the maximum per-sample mixture component should be returned (\code{assign=FALSE}), or the full mixture matrix (\code{assign=TRUE}).} \item{scale}{\code{logical(1)} indicating whether fitted values should be returned unscaled (default, \code{scaled=FALSE}) or scaled by the variability of \code{\link{mixturewt}} parameter \code{theta}.} \item{logevidence}{\code{logical(1)} indicating whether posterior probability (default, \code{logevidence=FALSE}) or log evidence \code{logical=TRUE} should be returned.} \item{k}{ignored.} } \value{ \code{mixture} with \code{assign=FALSE} returns a matrix of sample x Dirichlet component estimates. With \code{assign=TRUE} \code{mixture} returns a named vector indexing the maximal Dirichlet component of each sample. \code{mixturewt} returns a matrix with rows corresponding to mixture components, and columns \code{pi} (component weight) and \code{theta} (component variability). Small values of \code{theta} correspond to highly variable components. \code{goodnessOfFit} returns a named numeric vector of measures of goodness of fit. \code{laplace}, \code{AIC}, and \code{BIC} return the corresponding measures of goodness of fit. } \author{Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \examples{ data(fit) best <- fit[[4]] mixturewt(best) head(mixture(best), 3) head(mixture(best, assign=TRUE), 3) goodnessOfFit(best) fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) data(bestgrp) bestgrp head(predict(bestgrp, count)) } \keyword{manip} DirichletMultinomial/man/heatmapdmn.Rd0000644000175200017520000000361014710220024021066 0ustar00biocbuildbiocbuild\name{heatmapdmn} \alias{heatmapdmn} \title{Heatmap representation of samples assigned to Dirichlet components.} \description{ Produce a heat map summarizing count data, grouped by Dirichlet component. } \usage{ heatmapdmn(count, fit1, fitN, ntaxa = 30, ..., transform = sqrt, lblwidth = 0.2 * nrow(count), col = .gradient) } \arguments{ \item{count}{A matrix of sample x taxon counts, as supplied to \code{\link{dmn}}.} \item{fit1}{An instance of class \code{dmn}, from a model fit to a single Dirichlet component, \code{k=1} in \code{\link{dmn}}.} \item{fitN}{An instance of class \code{dmn}, from a model fit to \code{N != 1} components, \code{k=N} in \code{\link{dmn}}.} \item{ntaxa}{The \code{ntaxa} most numerous taxa to display counts for.} \item{\dots}{Additional arguments, ignored.} \item{transform}{Transformation to apply to count data prior to visualization; this does \emph{not} influence mixture membership or taxnomic ordering.} \item{lblwidth}{The proportion of the plot to dedicate to taxanomic labels, as a fraction of the number of samples to be plotted.} \item{col}{The colors used to display (possibly transformed, by \code{transform}) count data, as used by \code{\link{image}}.} } \details{ Columns of the heat map correspond to samples. Samples are grouped by Dirichlet component, with average (Dirichlet) components summarized as a separate wide column. Rows correspond to taxonomic groups, ordered based on contribution to Dirichlet components. } \author{Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \examples{ ## counts fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) ## all and best-fit clustering data(fit) lplc <- sapply(fit, laplace) best <- fit[[which.min(lplc)]] heatmapdmn(count, fit[[1]], best, 30) } \keyword{manip} DirichletMultinomial/man/roc.Rd0000644000175200017520000000327214710220024017537 0ustar00biocbuildbiocbuild\name{roc} \alias{roc} \title{Summarize receiver-operator characteristics} \description{ Returns a \code{data.frame} summarizing the cummulative true- and false-positive probabilities from expected and observed classifications. } \usage{ roc(exp, obs, ...) } \arguments{ \item{exp}{\code{logical()} vector of expected classifications to a particular group.} \item{obs}{Predicted probability of assignment to the group identified by \code{TRUE} values in \code{exp}. The length of \code{exp} and \code{obs} must be identical.} \item{\dots}{Additional arguments, available to methods.} } \value{ A \code{data.frame} with columns \item{TruePositive}{Cummulative probability of correct assignment.} \item{FalsePositive}{Cummulative probability of incorrect assignment.} } \author{Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \examples{ library(lattice) ## count matrix fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) ## phenotype fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) ## count data used for cross-validation, and cross-validation count <- csubset(c("Lean", "Obese"), count, pheno) data(bestgrp) ## true, false positives from single-group classifier bst <- roc(pheno[rownames(count)] == "Obese", predict(bestgrp, count)[,"Obese"]) head(bst) ## lattice plot xyplot(TruePostive ~ FalsePositive, bst, type="l", xlab="False Positive", ylab="True Positive") } \keyword{stats} DirichletMultinomial/man/util.Rd0000644000175200017520000000331414710220024017726 0ustar00biocbuildbiocbuild\name{Utilities} \alias{csubset} \title{Helpful utility functions} \description{ \code{csubset} creates a subset of a count matrix, based on identity of column phenotypes to a specified value. } \usage{ csubset(val, x, pheno, cidx = TRUE) } \arguments{ \item{val}{\code{character(1)} specifying the subset of \code{phenotype} to select.} \item{x}{A matrix of counts, with rows corresponding to samples and columns to taxonomic groups.} \item{pheno}{A \code{character()} vector of length equal to the number of rows in \code{count}, indicating the phenotype of the corresponding sample.} \item{cidx}{A \code{logical(1)} indicating whether columns (taxa) with zero counts in the count matrix following removal of taxa not satisfying \code{pheno \%in\% val} should be removed. \code{cidx=FALSE} removes the 0-count columns.} } \value{ A \code{matrix} of counts, with rows satisfying \code{pheno \%in\% val} and with columns equal either to \code{ncol(x)} (when \code{cidx=TRUE}) or the number of columns with non-zero counts after row subsetting (\code{cidx=FALSE}). } \author{Martin Morgan \url{mailto:mtmorgan.xyz@gmail.com}} \examples{ ## count matrix fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) ## phenotype fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) ## subset dim(count) sum("Lean" == pheno) dim(csubset("Lean", count, pheno)) dim(csubset("Lean", count, pheno, cidx=FALSE)) } \keyword{manip} DirichletMultinomial/src/0000755000175200017520000000000014710276433016514 5ustar00biocbuildbiocbuildDirichletMultinomial/src/Makevars0000644000175200017520000000013314710220024020166 0ustar00biocbuildbiocbuildPKG_CFLAGS = `gsl-config --cflags` -DR_DIRICHLETMULTINOMIAL PKG_LIBS = `gsl-config --libs` DirichletMultinomial/src/Makevars.win0000644000175200017520000000020014710220024020755 0ustar00biocbuildbiocbuildPKG_LIBS += -L$(LIB_GSL)$(R_ARCH)/lib -lgsl -lgslcblas -lm PKG_CPPFLAGS += -I$(RHOME)/src/include -I$(LIB_GSL)$(R_ARCH)/include DirichletMultinomial/src/R_init_DirichletMultinomial.c0000644000175200017520000000051414710220024024267 0ustar00biocbuildbiocbuild#include #include "dirichlet_fit.h" static const R_CallMethodDef callMethods[] = { { ".dirichlet_fit", (DL_FUNC) &dirichlet_fit, 4}, {NULL, NULL, 0} }; void R_init_DirichletMultinomial(DllInfo * info) { R_registerRoutines(info, NULL, callMethods, NULL, NULL); R_useDynamicSymbols(info, TRUE); } DirichletMultinomial/src/dirichlet_fit.c0000644000175200017520000000564414710220024021463 0ustar00biocbuildbiocbuild#include "dirichlet_fit_main.h" #include "dirichlet_fit.h" SEXP dirichlet_fit(SEXP counts, SEXP n_components, SEXP verbose, SEXP seed) { /* counts: N communities x S taxa */ struct data_t *data = (struct data_t *) R_alloc(1, sizeof(struct data_t)); /* inputs */ SEXP dim = Rf_getAttrib(counts, R_DimSymbol), dimnames = Rf_getAttrib(counts, R_DimNamesSymbol); data->verbose = LOGICAL(verbose)[0]; data->N = INTEGER(dim)[0]; data->S = INTEGER(dim)[1]; data->K = INTEGER(n_components)[0]; data->aanX = INTEGER(counts); /* results */ SEXP result, elt, sxp, nms; PROTECT(result = Rf_allocVector(VECSXP, 4)); nms = Rf_allocVector(STRSXP, 4); Rf_namesgets(result, nms); SET_STRING_ELT(nms, 0, mkChar("GoodnessOfFit")); SET_STRING_ELT(nms, 1, mkChar("Group")); SET_STRING_ELT(nms, 2, mkChar("Mixture")); SET_STRING_ELT(nms, 3, mkChar("Fit")); sxp = Rf_allocVector(REALSXP, 5); /* GoodnessOfFit */ SET_VECTOR_ELT(result, 0, sxp); nms = Rf_allocVector(STRSXP, 5); Rf_namesgets(sxp, nms); SET_STRING_ELT(nms, 0, mkChar("NLE")); SET_STRING_ELT(nms, 1, mkChar("LogDet")); SET_STRING_ELT(nms, 2, mkChar("Laplace")); SET_STRING_ELT(nms, 3, mkChar("BIC")); SET_STRING_ELT(nms, 4, mkChar("AIC")); sxp = Rf_allocMatrix(REALSXP, data->N, data->K); /* Group */ SET_VECTOR_ELT(result, 1, sxp); nms = Rf_allocVector(VECSXP, 2); Rf_dimnamesgets(sxp, nms); SET_VECTOR_ELT(nms, 0, VECTOR_ELT(dimnames, 0)); SET_VECTOR_ELT(nms, 1, R_NilValue); data->group = REAL(sxp); elt = Rf_allocVector(VECSXP, 1); /* Mixture */ SET_VECTOR_ELT(result, 2, elt); nms = Rf_allocVector(STRSXP, 1); Rf_namesgets(elt, nms); SET_STRING_ELT(nms, 0, mkChar("Weight")); sxp = Rf_allocVector(REALSXP, data->K); SET_VECTOR_ELT(elt, 0, sxp); data->mixture_wt = REAL(sxp); elt = Rf_allocVector(VECSXP, 3); /* Fit */ SET_VECTOR_ELT(result, 3, elt); nms = Rf_allocVector(STRSXP, 3); Rf_namesgets(elt, nms); SET_STRING_ELT(nms, 0, mkChar("Lower")); SET_STRING_ELT(nms, 1, mkChar("Estimate")); SET_STRING_ELT(nms, 2, mkChar("Upper")); PROTECT(nms = Rf_allocVector(VECSXP, 2)); SET_VECTOR_ELT(nms, 0, VECTOR_ELT(dimnames, 1)); SET_VECTOR_ELT(nms, 1, R_NilValue); for (int i = 0; i < 3; ++i) { sxp = Rf_allocMatrix(REALSXP, data->S, data->K); SET_VECTOR_ELT(elt, i, sxp); Rf_dimnamesgets(sxp, nms); } UNPROTECT(1); data->fit_lower = REAL(VECTOR_ELT(elt, 0)); data->fit_mpe = REAL(VECTOR_ELT(elt, 1)); data->fit_upper = REAL(VECTOR_ELT(elt, 2)); dirichlet_fit_main(data, INTEGER(seed)[0]); elt = VECTOR_ELT(result , 0); REAL(elt)[0] = data->NLE; REAL(elt)[1] = data->LogDet; REAL(elt)[2] = data->fit_laplace; REAL(elt)[3] = data->fit_bic; REAL(elt)[4] = data->fit_aic; UNPROTECT(1); return result; } DirichletMultinomial/src/dirichlet_fit.h0000644000175200017520000000026414710220024021461 0ustar00biocbuildbiocbuild#ifndef _DIRICHLET_FIT_H_ #define _DIRICHLET_FIT_H_ #include SEXP dirichlet_fit(SEXP counts, SEXP n_components, SEXP verbose, SEXP seed); #endif DirichletMultinomial/src/dirichlet_fit_main.c0000644000175200017520000004446614710220024022474 0ustar00biocbuildbiocbuild#include #include #include #include #include #include #include #include "dirichlet_fit_main.h" /* re-map to R transient memory allocation */ #define calloc(_nelm, _elsize) R_alloc(_nelm, _elsize) #define free(_ptr) (void) _ptr const double BIG_DBL = 1.0e9; const double K_MEANS_THRESH = 1.0e-6; const double SOFT_BETA = 50.0; const double GAMMA_ITA = 0.1; const double GAMMA_NU = 0.1; const int MAX_ITER = 1000; const size_t MAX_GRAD_ITER = 1000; static void kmeans(struct data_t *data, gsl_rng *ptGSLRNG, double* adW, double **aadZ, double **aadMu) { const int S = data->S, N = data->N, K = data->K, *aanX = data->aanX; int i, j, k, iter = 0; double *aadY, *adMu; double dMaxChange = BIG_DBL; if (data->verbose) Rprintf(" Soft kmeans\n"); aadY = (double *) calloc(N * S, sizeof(double)); adMu = (double *) calloc(S, sizeof(double)); for (i = 0; i < N; i++) { double dTotal = 0.0; for (j = 0; j < S; j++) dTotal += aanX[j * N + i]; for (j = 0; j < S; j++) aadY[j * N + i] = (aanX[j * N + i]) / dTotal; } /* initialise */ for (i = 0; i < N; i++) { k = gsl_rng_uniform_int (ptGSLRNG, K); for (j = 0; j < K; j++) aadZ[j][i] = 0.0; aadZ[k][i] = 1.0; } while (dMaxChange > K_MEANS_THRESH && iter < MAX_ITER) { /* update mu */ dMaxChange = 0.0; for (i = 0; i < K; i++){ double dNormChange = 0.0; adW[i] = 0.0; for (j = 0; j < N; j++) adW[i] += aadZ[i][j]; for (j = 0; j < S; j++) { adMu[j] = 0.0; for (k = 0; k < N; k++) adMu[j] += aadZ[i][k] * aadY[j * N + k]; } for (j = 0; j < S; j++) { double dDiff = 0.0; adMu[j] /= adW[i]; dDiff = (adMu[j] - aadMu[i][j]); dNormChange += dDiff * dDiff; aadMu[i][j] = adMu[j]; } dNormChange = sqrt(dNormChange); if (dNormChange > dMaxChange) dMaxChange = dNormChange; } /* calc distances and update Z */ for (i = 0; i < N; i++) { double dNorm = 0.0, adDist[K]; for (k = 0; k < K; k++) { adDist[k] = 0.0; for (j = 0; j < S; j++) { const double dDiff = aadMu[k][j] - aadY[j * N + i]; adDist[k] += dDiff * dDiff; } adDist[k] = sqrt(adDist[k]); dNorm += exp(-SOFT_BETA * adDist[k]); } for (k = 0; k < K; k++) aadZ[k][i] = exp(-SOFT_BETA * adDist[k]) / dNorm; } iter++; if (data->verbose && (iter % 10 == 0)) Rprintf(" iteration %d change %f\n", iter, dMaxChange); } free(aadY); free(adMu); } static double neg_log_evidence_lambda_pi(const gsl_vector *lambda, void *params) { int i, j; const struct data_t *data = (const struct data_t *) params; const int S = data->S, N = data->N, *aanX = data->aanX; const double *adPi = data->adPi; double dLogE = 0.0, dLogEAlpha = 0.0, dSumAlpha = 0.0, dSumLambda = 0.0; double adSumAlphaN[N], dWeight = 0.0; for (i = 0; i < N; i++) { adSumAlphaN[i] = 0.0; dWeight += adPi[i]; } for (j = 0; j < S; j++) { const double dLambda = gsl_vector_get(lambda, j); const double dAlpha = exp(dLambda); dLogEAlpha += gsl_sf_lngamma(dAlpha); dSumLambda += dLambda; dSumAlpha += dAlpha; const double lngammaAlpha0 = gsl_sf_lngamma(dAlpha); for (i = 0; i < N; i++) { const double dN = aanX[j * N + i]; const double dAlphaN = dAlpha + dN; const double lngammaAlphaN = dN ? gsl_sf_lngamma(dAlphaN) : lngammaAlpha0; adSumAlphaN[i] += dAlphaN; /*weight by pi*/ dLogE -= adPi[i] * lngammaAlphaN; /*weight by pi*/ } } dLogEAlpha -= gsl_sf_lngamma(dSumAlpha); for(i = 0; i < N; i++) dLogE += adPi[i] * gsl_sf_lngamma(adSumAlphaN[i]); return dLogE + dWeight*dLogEAlpha + GAMMA_NU*dSumAlpha - GAMMA_ITA * dSumLambda; } static void neg_log_derive_evidence_lambda_pi(const gsl_vector *ptLambda, void *params, gsl_vector* g) { const struct data_t *data = (const struct data_t *) params; const int S = data->S, N = data->N, *aanX = data->aanX; const double *adPi = data->adPi; int i, j; double adDeriv[S], adStore[N], adAlpha[S]; double dSumStore = 0.0, dStore = 0.0; double dWeight = 0; for (i = 0; i < N; i++) { adStore[i] = 0.0; dWeight += adPi[i]; } for (j = 0; j < S; j++) { adAlpha[j] = exp(gsl_vector_get(ptLambda, j)); dStore += adAlpha[j]; adDeriv[j] = dWeight* gsl_sf_psi(adAlpha[j]); double alphaS0 = gsl_sf_psi(adAlpha[j]); for (i = 0; i < N; i++) { int dN = aanX[j * N + i]; double dAlphaN = adAlpha[j] + dN; double psiAlphaN = dN ? gsl_sf_psi(dAlphaN) : alphaS0; adDeriv[j] -= adPi[i] * psiAlphaN; adStore[i] += dAlphaN; } } for (i = 0; i < N; i++) dSumStore += adPi[i] * gsl_sf_psi(adStore[i]); dStore = dWeight * gsl_sf_psi(dStore); for (j = 0; j < S; j++) { double value = adAlpha[j] * (GAMMA_NU + adDeriv[j] - dStore + dSumStore) - GAMMA_ITA; gsl_vector_set(g, j, value); } } static void neg_log_FDF_lamba_pi(const gsl_vector *x, void *params, double *f, gsl_vector *g) { *f = neg_log_evidence_lambda_pi(x, params); neg_log_derive_evidence_lambda_pi(x, params, g); } static void optimise_lambda_k(double *adLambdaK, struct data_t *data, double *adZ) { const int S = data->S; int i, status; size_t iter = 0; const gsl_multimin_fdfminimizer_type *T; gsl_multimin_fdfminimizer *s; gsl_multimin_function_fdf fdf; gsl_vector *ptLambda; /*initialise vector*/ ptLambda = gsl_vector_alloc(S); for (i = 0; i < S; i++) gsl_vector_set(ptLambda, i, adLambdaK[i]); /*initialise function to be solved*/ data->adPi = adZ; fdf.n = S; fdf.f = neg_log_evidence_lambda_pi; fdf.df = neg_log_derive_evidence_lambda_pi; fdf.fdf = neg_log_FDF_lamba_pi; fdf.params = data; T = gsl_multimin_fdfminimizer_vector_bfgs2; s = gsl_multimin_fdfminimizer_alloc(T, S); gsl_multimin_fdfminimizer_set(s, &fdf, ptLambda, 1.0e-6, 0.1); do { iter++; status = gsl_multimin_fdfminimizer_iterate(s); if (status) break; status = gsl_multimin_test_gradient(s->gradient, 1e-3); } while (status == GSL_CONTINUE && iter < MAX_GRAD_ITER); for (i = 0; i < S; i++) adLambdaK[i] = gsl_vector_get(s->x, i); gsl_vector_free(ptLambda); gsl_multimin_fdfminimizer_free(s); } static double neg_log_evidence_i(const struct data_t *data, const int *anX, const double* adLambda, const double* aadLnGammaLambda0) { int j; const int S = data->S, N = data->N; double dLogE = 0.0, dLogEAlpha = 0.0, dSumAlpha = 0.0, dSumAlphaN = 0.0; for (j = 0; j < S; j++) { const double n = anX[j * N]; const double dAlpha = exp(adLambda[j]); const double dAlphaN = n + dAlpha; dLogEAlpha += aadLnGammaLambda0[j]; dSumAlpha += dAlpha; dSumAlphaN += dAlphaN; dLogE -= n ? gsl_sf_lngamma(dAlphaN) : aadLnGammaLambda0[j] ; } dLogEAlpha -= gsl_sf_lngamma(dSumAlpha); dLogE += gsl_sf_lngamma(dSumAlphaN); return dLogE + dLogEAlpha; } static void calc_z(double **aadZ, const struct data_t *data, const double *adW, double **aadLambda) { int i, k, j; const int N = data->N, K = data->K, S = data->S; double adStore[K]; double *aadLngammaLambda0 = (double*)calloc(S*K,sizeof(double)); for(k = 0; k < K; k++) { for(j = 0; j < S; j++) { const double dAlpha = exp(aadLambda[k][j]); aadLngammaLambda0[k*S +j] = gsl_sf_lngamma(dAlpha); } } for (i = 0; i < N; i ++) { double dSum = 0.0; double dOffset = BIG_DBL; for (k = 0; k < K; k++) { double dNegLogEviI = neg_log_evidence_i(data, data->aanX + i, aadLambda[k], aadLngammaLambda0 + k*S); if (dNegLogEviI < dOffset) dOffset = dNegLogEviI; adStore[k] = dNegLogEviI; } for (k = 0; k < K; k++) { aadZ[k][i] = adW[k] * exp(-(adStore[k] - dOffset)); dSum += aadZ[k][i]; } for (k = 0; k < K; k++) aadZ[k][i] /= dSum; } } static double neg_log_likelihood(double *adW, double** aadLambda, const struct data_t *data) { const int S = data->S, N = data->N, K = data->K, *aanX = data->aanX; int i, j, k; double adPi[K], adLogBAlpha[K]; double dRet = 0.0, dL5 = 0.0, dL6 = 0.0, dL7 = 0.0, dL8 = 0.0; double dK = K, dN = N, dS = S; double *aadLngammaLambda0 = (double*)calloc(S*K,sizeof(double)); for (k = 0; k < K; k++){ double dSumAlphaK = 0.0; adLogBAlpha[k] = 0.0; adPi[k] = adW[k]/dN; for (j = 0; j < S; j++){ double dAlpha = exp(aadLambda[k][j]); double lngammaAlpha = gsl_sf_lngamma(dAlpha); aadLngammaLambda0[k * S + j] = lngammaAlpha; dSumAlphaK += dAlpha; adLogBAlpha[k] += lngammaAlpha; } adLogBAlpha[k] -= gsl_sf_lngamma(dSumAlphaK); } for (i = 0; i < N; i++) { double dProb = 0.0, dFactor = 0.0, dSum = 0.0, adLogStore[K], dOffset = -BIG_DBL; for (j = 0; j < S; j++) { dSum += aanX[j * N + i]; dFactor += gsl_sf_lngamma(aanX[j * N + i] + 1.0); } dFactor -= gsl_sf_lngamma(dSum + 1.0); for (k = 0; k < K; k++) { double dSumAlphaKN = 0.0, dLogBAlphaN = 0.0; for (j = 0; j < S; j++) { int countN = aanX[j * N + i]; double dAlphaN = exp(aadLambda[k][j]) + countN; dSumAlphaKN += dAlphaN; dLogBAlphaN += countN ? gsl_sf_lngamma(dAlphaN) : aadLngammaLambda0[k * S + j]; } dLogBAlphaN -= gsl_sf_lngamma(dSumAlphaKN); adLogStore[k] = dLogBAlphaN - adLogBAlpha[k] - dFactor; if (adLogStore[k] > dOffset) dOffset = adLogStore[k]; } for (k = 0; k < K; k++) dProb += adPi[k]*exp(-dOffset + adLogStore[k]); dRet += log(dProb)+dOffset; } dL5 = -dS * dK * gsl_sf_lngamma(GAMMA_ITA); dL6 = GAMMA_ITA * dK * dS * log(GAMMA_NU); for (i = 0; i < K; i++) for (j = 0; j < S; j++) { dL7 += exp(aadLambda[i][j]); dL8 += aadLambda[i][j]; } dL7 *= -GAMMA_NU; dL8 *= GAMMA_ITA; return -dRet -dL5 - dL6 -dL7 -dL8; } static void hessian(gsl_matrix* ptHessian, const double* adLambda, const struct data_t *data) { const int S = data->S, N = data->N, *aanX = data->aanX; const double *adPi = data->adPi; int i = 0, j = 0; double adAlpha[S], adAJK[S], adCJK[S], adAJK0[S], adCJK0[S]; double dCK0 = 0.0, dAK0; double dCSum, dAlphaSum = 0.0, dW = 0.0, dCK = 0.0, dAK; for (j = 0; j < S; j++) { adAlpha[j] = exp(adLambda[j]); dAlphaSum += adAlpha[j]; adAJK0[j] = adAJK[j] = adCJK0[j] = adCJK[j] = 0.0; const double dPsiAlpha = gsl_sf_psi(adAlpha[j]); const double dPsi1Alpha = gsl_sf_psi_1(adAlpha[j]); for (i = 0; i < N; i++) { const int n = aanX[j * N + i]; adCJK0[j] += adPi[i] * n ? gsl_sf_psi(adAlpha[j] + n) : dPsiAlpha; adAJK0[j] += adPi[i] * dPsiAlpha; adCJK[j] += adPi[i] * n ? gsl_sf_psi_1(adAlpha[j] + n): dPsi1Alpha; adAJK[j] += adPi[i] * dPsi1Alpha; } } for (i = 0; i < N; i++) { dW += adPi[i]; dCSum = 0.0; for (j = 0; j < S; j++) dCSum += adAlpha[j] + aanX[j * N + i]; dCK += adPi[i]*gsl_sf_psi_1(dCSum); dCK0 += adPi[i]*gsl_sf_psi(dCSum); } dAK = dW * gsl_sf_psi_1(dAlphaSum); dAK0 = dW * gsl_sf_psi(dAlphaSum); for (i = 0; i < S; i++) for (j = 0; j < S; j++) { double dVal = 0.0; if (i == j) { double dG1 = -adAlpha[i] * (dAK0 - dCK0 + adCJK0[i] - adAJK0[i]); double dG2 = -adAlpha[i] * adAlpha[i]*(dAK - dCK + adCJK[i] - adAJK[i]); double dG3 = adAlpha[i]*GAMMA_NU; dVal = dG1 + dG2 + dG3; } else dVal = -adAlpha[i] * adAlpha[j] * (dAK - dCK); gsl_matrix_set(ptHessian, i, j, dVal); } } static void group_output(struct data_t *data, double** aadZ) { const int N = data->N, K = data->K; int i, k; for(k = 0; k < K; k++) for (i = 0; i < N; i++) data->group[k * N + i] = aadZ[k][i]; } static void mixture_output(struct data_t *data, double *adW, double** aadLambda, double **aadErr) { const int N = data->N, S = data->S; int i, k; for (k = 0; k < data->K; k++) data->mixture_wt[k] = adW[k] / N; for (i = 0; i < data->S; i++) { for (k = 0; k < data->K; k++) { double dErr = aadErr[k][i], dL = 0.0, dU = 0.0; int bIll = FALSE; if (dErr >= 0.0) { dErr = sqrt(dErr); if (dErr < 100.0) { dL = exp(aadLambda[k][i] - 2.0*dErr); dU = exp(aadLambda[k][i] + 2.0*dErr); } else bIll = TRUE; } else bIll = TRUE; if (bIll) dL = dU = R_NaN; data->fit_lower[k * S + i] = dL; data->fit_mpe[k * S + i] = exp(aadLambda[k][i]); data->fit_upper[k * S + i] = dU; } } } void dirichlet_fit_main(struct data_t *data, int rseed) { const int N = data->N, S = data->S, K = data->K; int i, j, k; gsl_rng *ptGSLRNG; gsl_rng_env_setup(); gsl_set_error_handler_off(); ptGSLRNG = gsl_rng_alloc(gsl_rng_default); gsl_set_error_handler_off(); gsl_rng_set(ptGSLRNG, rseed); /* allocate matrices */ double **aadZ, **aadLambda, **aadErr, *adW; adW = (double *) calloc(K, sizeof(double)); aadZ = (double **) calloc(K, sizeof(double *)); aadLambda = (double **) calloc(K, sizeof(double *)); aadErr = (double **) calloc(K, sizeof(double*)); aadZ[0] = (double *) calloc(K * N, sizeof(double)); aadLambda[0] = (double *) calloc(K * S, sizeof(double)); aadErr[0] = (double *) calloc(K * S, sizeof(double)); for (k = 1; k < K; k++) { aadZ[k] = aadZ[0] + k * N; aadLambda[k] = aadLambda[0] + k * S; aadErr[k] = aadErr[0] + k * S; } /* soft k means initialiser */ kmeans(data, ptGSLRNG, adW, aadZ, aadLambda); for (k = 0; k < K; k++) { adW[k] = 0.0; for (i = 0; i < N; i++) adW[k] += aadZ[k][i]; } if (data->verbose) Rprintf(" Expectation Maximization setup\n"); for (k = 0; k < K; k++) { for (j = 0; j < S; j++) { const double x = aadLambda[k][j]; aadLambda[k][j] = (x > 0.0) ? log(x) : -10; } optimise_lambda_k(aadLambda[k], data, aadZ[k]); } /* simple EM algorithm */ int iter = 0; double dNLL = 0.0, dNew, dChange = BIG_DBL; if (data->verbose) Rprintf(" Expectation Maximization\n"); while (dChange > 1.0e-6 && iter < 100) { calc_z(aadZ, data, adW, aadLambda); /* latent var expectation */ for (k = 0; k < K; k++) /* mixture components, given pi */ optimise_lambda_k(aadLambda[k], data, aadZ[k]); for (k = 0; k < K; k++) { /* current likelihood & weights */ adW[k] = 0.0; for(i = 0; i < N; i++) adW[k] += aadZ[k][i]; } dNew = neg_log_likelihood(adW, aadLambda, data); dChange = fabs(dNLL - dNew); dNLL = dNew; iter++; R_CheckUserInterrupt(); if (data->verbose && (iter % 10) == 0) Rprintf(" iteration %d change %f\n", iter, dChange); } /* hessian */ if (data->verbose) Rprintf(" Hessian\n"); gsl_matrix *ptHessian = gsl_matrix_alloc(S, S), *ptInverseHessian = gsl_matrix_alloc(S, S); gsl_permutation *p = gsl_permutation_alloc(S); double dLogDet = 0., dTemp; int signum, status; for (k = 0; k < K; k++) { data->adPi = aadZ[k]; if (k > 0) dLogDet += 2.0 * log(N) - log(adW[k]); hessian(ptHessian, aadLambda[k], data); status = gsl_linalg_LU_decomp(ptHessian, p, &signum); if (status != GSL_SUCCESS) { gsl_matrix_free(ptHessian); gsl_matrix_free(ptInverseHessian); gsl_permutation_free(p); free(aadErr[0]); free(aadErr); free(aadLambda[0]); free(aadLambda); free(aadZ[0]); free(aadZ); free(adW); Rf_error("LU decompistion of a singular matrix during Hessian"); } gsl_linalg_LU_invert(ptHessian, p, ptInverseHessian); for (j = 0; j < S; j++) { aadErr[k][j] = gsl_matrix_get(ptInverseHessian, j, j); dTemp = gsl_matrix_get(ptHessian, j, j); dLogDet += log(fabs(dTemp)); } } gsl_matrix_free(ptHessian); gsl_matrix_free(ptInverseHessian); gsl_permutation_free(p); /* results */ double dP = K * S + K - 1; data->NLE = dNLL; data->LogDet = dLogDet; data->fit_laplace = dNLL + 0.5 * dLogDet - 0.5 * dP * log(2. * M_PI); data->fit_bic = dNLL + 0.5 * log(N) * dP; data->fit_aic = dNLL + dP; group_output(data, aadZ); mixture_output(data, adW, aadLambda, aadErr); free(aadErr[0]); free(aadErr); free(aadLambda[0]); free(aadLambda); free(aadZ[0]); free(aadZ); free(adW); } DirichletMultinomial/src/dirichlet_fit_main.h0000644000175200017520000000064614710220024022471 0ustar00biocbuildbiocbuild#ifndef _DIRICHLET_FIT_MAIN_H_ #define _DIRICHLET_FIT_MAIN_H_ #include struct data_t { Rboolean verbose; int N, S, K; const int *aanX; double* adPi; /* result */ double NLE, LogDet; double *group; double *mixture_wt; double fit_laplace, fit_bic, fit_aic, *fit_lower, *fit_mpe, *fit_upper; }; void dirichlet_fit_main(struct data_t *data, int rseed); #endif DirichletMultinomial/vignettes/0000755000175200017520000000000014710276433017735 5ustar00biocbuildbiocbuildDirichletMultinomial/vignettes/DirichletMultinomial.Rmd0000644000175200017520000001676514710220024024523 0ustar00biocbuildbiocbuild--- title: "DirichletMultinomial for Clustering and Classification of Microbiome Data" date: "`r BiocStyle::doc_date()`" author: - name: Martin Morgan affiliation: - Roswell Park Comprehensive Cancer Center, Buffalo, NY vignette: > %\VignetteIndexEntry{DirichletMultinomial for Clustering and Classification of Microbiome Data} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document: toc_float: true package: DirichletMultinomial --- Modified: 6 March 2012, 19 October 2024 (HTML version) ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` This document illustrates the main features of the *DirichletMultinomial* package, and in the process replicates key tables and figures from Holmes et al., . We start by loading the package, in addition to the packages *lattice* (for visualization) and *parallel* (for use of multiple cores during cross-validation). ```{r library, message = FALSE} library(DirichletMultinomial) library(lattice) library(parallel) ``` We set the width of [R]{.sans-serif} output to 70 characters, and the number of floating point digits displayed to two. The `full` flag is set to `FALSE`, so that cached values are used instead of re-computing during production of this vignette. The package defines a set of standard colors; we use `.qualitative` during visualization. ```{r colors} options(width=70, digits=2) full <- FALSE .qualitative <- DirichletMultinomial:::.qualitative ``` # Data The data used in Homes et al. is included in the package. We read the data in to a matrix `count` of samples by taxa. ```{r data-input} fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv") count <- t(as.matrix(read.csv(fl, row.names=1))) count[1:5, 1:3] ``` The figure below shows the distribution of reads from each taxon, on a log scale. ```{r taxon-counts} cnts <- log10(colSums(count)) densityplot( cnts, xlim=range(cnts), xlab="Taxon representation (log 10 count)" ) ``` # Clustering The `dmn` function fits a Dirichlet-Multinomial model, taking as input the count data and a parameter $k$ representing the number of Dirichlet components to model. Here we fit the count data to values of $k$ from 1 to 7, displaying the result for $k = 4$. A sense of the model return value is provided by the documentation for the [R]{.sans-serif} object `fit`, `class ? DMN`. ```{r fit} if (full) { fit <- mclapply(1:7, dmn, count=count, verbose=TRUE) save(fit, file=file.path(tempdir(), "fit.rda")) } else data(fit) fit[[4]] ``` The return value can be queried for measures of fit (Laplace, AIC, BIC); these are plotted for different $k$ in The figure. The best fit is for $k=4$ distinct Dirichlet components. ```{r min-laplace, figure=TRUE} lplc <- sapply(fit, laplace) plot(lplc, type="b", xlab="Number of Dirichlet Components", ylab="Model Fit") (best <- fit[[which.min(lplc)]]) ``` In addition to `laplace` goodness of fit can be assessed with the `AIC` and `BIC` functions. The `mixturewt` function reports the weight $\pi$ and homogeneity $\theta$ (large values are more homogeneous) of the fitted model. `mixture` returns a matrix of sample x estimated Dirichlet components; the argument `assign` returns a vector of length equal to the number of samples indicating the component with maximum value. ```{r mix-weight} mixturewt(best) head(mixture(best), 3) ``` The `fitted` function describes the contribution of each taxonomic group (each point in the panels of the figure to the Dirichlet components; the diagonal nature of the points in a panel suggest that the Dirichlet components are correlated, perhaps reflecting overall numerical abundance. ```{r fitted} splom(log(fitted(best))) ``` The posterior mean difference between the best and single-component Dirichlet multinomial model measures how each component differs from the population average; the sum is a measure of total difference from the mean. ```{r posterior-mean-diff} p0 <- fitted(fit[[1]], scale=TRUE) # scale by theta p4 <- fitted(best, scale=TRUE) colnames(p4) <- paste("m", 1:4, sep="") (meandiff <- colSums(abs(p4 - as.vector(p0)))) sum(meandiff) ``` The table below summarizes taxonomic contributions to each Dirichlet component. ```{r table-1} diff <- rowSums(abs(p4 - as.vector(p0))) o <- order(diff, decreasing=TRUE) cdiff <- cumsum(diff[o]) / sum(diff) df <- cbind(Mean=p0[o], p4[o,], diff=diff[o], cdiff) DT::datatable(df) |> DT::formatRound(colnames(df), digits = 4) ``` The figure shows samples arranged by Dirichlet component, with samples placed into the component for which they had the largest fitted value. ```{r heatmap-similarity} heatmapdmn(count, fit[[1]], best, 30) ``` # Generative classifier The following reads in phenotypic information ('Lean', 'Obese', 'Overweight') for each sample. ```{r twin-pheno} fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t") pheno0 <- scan(fl) lvls <- c("Lean", "Obese", "Overwt") pheno <- factor(lvls[pheno0 + 1], levels=lvls) names(pheno) <- rownames(count) table(pheno) ``` Here we subset the count data into sub-counts, one for each phenotype. We retain only the Lean and Obese groups for subsequent analysis. ```{r subsets} counts <- lapply(levels(pheno), csubset, count, pheno) sapply(counts, dim) keep <- c("Lean", "Obese") count <- count[pheno %in% keep,] pheno <- factor(pheno[pheno %in% keep], levels=keep) ``` The `dmngroup` function identifies the best (minimum Laplace score) Dirichlet-multinomial model for each group. ```{r fit-several-} if (full) { bestgrp <- dmngroup( count, pheno, k=1:5, verbose=TRUE, mc.preschedule=FALSE ) save(bestgrp, file=file.path(tempdir(), "bestgrp.rda")) } else data(bestgrp) ``` The Lean group is described by a model with one component, the Obese group by a model with three components. Three of the four Dirichlet components of the original single group (`best`) model are represented in the Obese group, the other in the Lean group. The total Laplace score of the two group model is less than of the single-group model, indicating information gain from considering groups separately. ```{r best-several} bestgrp lapply(bestgrp, mixturewt) c( sapply(bestgrp, laplace), 'Lean+Obese' = sum(sapply(bestgrp, laplace)), Single = laplace(best) ) ``` The `predict` function assigns samples to classes; the confusion matrix shows that the classifier is moderately effective. ```{r confusion} xtabs(~pheno + predict(bestgrp, count, assign=TRUE)) ``` The `cvdmngroup` function performs cross-validation. This is a computationally expensive step. ```{r cross-validate} if (full) { ## full leave-one-out; expensive! xval <- cvdmngroup( nrow(count), count, c(Lean=1, Obese=3), pheno, verbose=TRUE, mc.preschedule=FALSE ) save(xval, file=file.path(tempdir(), "xval.rda")) } else data(xval) ``` The figure shows an ROC curve for the single and two-group classifier. The single group classifier is performing better than the two-group classifier. ```{r ROC-dmngroup} bst <- roc(pheno[rownames(count)] == "Obese", predict(bestgrp, count)[,"Obese"]) bst$Label <- "Single" two <- roc(pheno[rownames(xval)] == "Obese", xval[,"Obese"]) two$Label <- "Two group" both <- rbind(bst, two) pars <- list(superpose.line=list(col=.qualitative[1:2], lwd=2)) xyplot( TruePostive ~ FalsePositive, group=Label, both, type="l", par.settings=pars, auto.key=list(lines=TRUE, points=FALSE, x=.6, y=.1), xlab="False Positive", ylab="True Positive" ) ``` ```{r sessionInfo} sessionInfo() ```

Modified: 6 March 2012, 19 October 2024 (HTML version)

This document illustrates the main features of the DirichletMultinomial package, and in the process replicates key tables and figures from Holmes et al., https://doi.org/10.1371/journal.pone.0030126.

We start by loading the package, in addition to the packages lattice (for visualization) and parallel (for use of multiple cores during cross-validation).

library(DirichletMultinomial)
library(lattice)
library(parallel)

We set the width of R output to 70 characters, and the number of floating point digits displayed to two. The full flag is set to FALSE, so that cached values are used instead of re-computing during production of this vignette. The package defines a set of standard colors; we use .qualitative during visualization.

options(width=70, digits=2)
full <- FALSE
.qualitative <- DirichletMultinomial:::.qualitative

1 Data

The data used in Homes et al. is included in the package. We read the data in to a matrix count of samples by taxa.

fl <- system.file(package="DirichletMultinomial", "extdata", "Twins.csv")
count <- t(as.matrix(read.csv(fl, row.names=1)))
count[1:5, 1:3]
#>         Acetanaerobacterium Acetivibrio Acetobacterium
#> TS1.2                     0           0              0
#> TS10.2                    0           0              0
#> TS100.2                   0           0              0
#> TS100                     1           0              0
#> TS101.2                   0           0              0

The figure below shows the distribution of reads from each taxon, on a log scale.

cnts <- log10(colSums(count))
densityplot(
    cnts, xlim=range(cnts),
    xlab="Taxon representation (log 10 count)"
)

2 Clustering

The dmn function fits a Dirichlet-Multinomial model, taking as input the count data and a parameter \(k\) representing the number of Dirichlet components to model. Here we fit the count data to values of \(k\) from 1 to 7, displaying the result for \(k = 4\). A sense of the model return value is provided by the documentation for the R object fit, class ? DMN.

if (full) {
    fit <- mclapply(1:7, dmn, count=count, verbose=TRUE)
    save(fit, file=file.path(tempdir(), "fit.rda"))
} else data(fit)
fit[[4]]
#> class: DMN 
#> k: 4 
#> samples x taxa: 278 x 130 
#> Laplace: 38781 BIC: 40425 AIC: 39477

The return value can be queried for measures of fit (Laplace, AIC, BIC); these are plotted for different \(k\) in The figure. The best fit is for \(k=4\) distinct Dirichlet components.

lplc <- sapply(fit, laplace)
plot(lplc, type="b", xlab="Number of Dirichlet Components", ylab="Model Fit")

(best <- fit[[which.min(lplc)]])
#> class: DMN 
#> k: 4 
#> samples x taxa: 278 x 130 
#> Laplace: 38781 BIC: 40425 AIC: 39477

In addition to laplace goodness of fit can be assessed with the AIC and BIC functions.

The mixturewt function reports the weight \(\pi\) and homogeneity \(\theta\) (large values are more homogeneous) of the fitted model. mixture returns a matrix of sample x estimated Dirichlet components; the argument assign returns a vector of length equal to the number of samples indicating the component with maximum value.

mixturewt(best)
#>     pi theta
#> 1 0.31    52
#> 2 0.17    19
#> 3 0.30    53
#> 4 0.22    30
head(mixture(best), 3)
#>            [,1]    [,2]    [,3]    [,4]
#> TS1.2   1.0e+00 2.1e-11 8.6e-06 3.3e-08
#> TS10.2  3.8e-08 3.3e-04 1.0e+00 2.8e-10
#> TS100.2 7.2e-09 8.8e-01 8.0e-13 1.2e-01

The fitted function describes the contribution of each taxonomic group (each point in the panels of the figure to the Dirichlet components; the diagonal nature of the points in a panel suggest that the Dirichlet components are correlated, perhaps reflecting overall numerical abundance.

splom(log(fitted(best)))

The posterior mean difference between the best and single-component Dirichlet multinomial model measures how each component differs from the population average; the sum is a measure of total difference from the mean.

p0 <- fitted(fit[[1]], scale=TRUE) # scale by theta
p4 <- fitted(best, scale=TRUE)
colnames(p4) <- paste("m", 1:4, sep="")
(meandiff <- colSums(abs(p4 - as.vector(p0))))
#>   m1   m2   m3   m4 
#> 0.26 0.47 0.51 0.34
sum(meandiff)
#> [1] 1.6

The table below summarizes taxonomic contributions to each Dirichlet component.

diff <- rowSums(abs(p4 - as.vector(p0)))
o <- order(diff, decreasing=TRUE)
cdiff <- cumsum(diff[o]) / sum(diff)
df <- cbind(Mean=p0[o], p4[o,], diff=diff[o], cdiff)
DT::datatable(df) |>
    DT::formatRound(colnames(df), digits = 4)

The figure shows samples arranged by Dirichlet component, with samples placed into the component for which they had the largest fitted value.

heatmapdmn(count, fit[[1]], best, 30)

3 Generative classifier

The following reads in phenotypic information (‘Lean’, ‘Obese’, ‘Overweight’) for each sample.

fl <- system.file(package="DirichletMultinomial", "extdata", "TwinStudy.t")
pheno0 <- scan(fl)
lvls <- c("Lean", "Obese", "Overwt")
pheno <- factor(lvls[pheno0 + 1], levels=lvls)
names(pheno) <- rownames(count)
table(pheno)
#> pheno
#>   Lean  Obese Overwt 
#>     61    193     24

Here we subset the count data into sub-counts, one for each phenotype. We retain only the Lean and Obese groups for subsequent analysis.

counts <- lapply(levels(pheno), csubset, count, pheno)
sapply(counts, dim)
#>      [,1] [,2] [,3]
#> [1,]   61  193   24
#> [2,]  130  130  130
keep <- c("Lean", "Obese")
count <- count[pheno %in% keep,]
pheno <- factor(pheno[pheno %in% keep], levels=keep)

The dmngroup function identifies the best (minimum Laplace score) Dirichlet-multinomial model for each group.

if (full) {
    bestgrp <- dmngroup(
        count, pheno, k=1:5, verbose=TRUE, mc.preschedule=FALSE
    )
    save(bestgrp, file=file.path(tempdir(), "bestgrp.rda"))
} else data(bestgrp)

The Lean group is described by a model with one component, the Obese group by a model with three components. Three of the four Dirichlet components of the original single group (best) model are represented in the Obese group, the other in the Lean group. The total Laplace score of the two group model is less than of the single-group model, indicating information gain from considering groups separately.

bestgrp
#> class: DMNGroup 
#> summary:
#>       k samples taxa   NLE LogDet Laplace   BIC   AIC
#> Lean  1      61  130  9066    162    9027  9333  9196
#> Obese 3     193  130 26770    407   26613 27801 27162
lapply(bestgrp, mixturewt)
#> $Lean
#>   pi theta
#> 1  1    35
#> 
#> $Obese
#>     pi theta
#> 1 0.53    45
#> 2 0.26    33
#> 3 0.22    18
c(
    sapply(bestgrp, laplace),
    'Lean+Obese' = sum(sapply(bestgrp, laplace)),
    Single = laplace(best)
)
#>       Lean      Obese Lean+Obese     Single 
#>       9027      26613      35641      38781

The predict function assigns samples to classes; the confusion matrix shows that the classifier is moderately effective.

xtabs(~pheno + predict(bestgrp, count, assign=TRUE))
#>        predict(bestgrp, count, assign = TRUE)
#> pheno   Lean Obese
#>   Lean    38    23
#>   Obese   15   178

The cvdmngroup function performs cross-validation. This is a computationally expensive step.

if (full) {
    ## full leave-one-out; expensive!
    xval <- cvdmngroup(
        nrow(count), count, c(Lean=1, Obese=3), pheno,
        verbose=TRUE, mc.preschedule=FALSE
    )
    save(xval, file=file.path(tempdir(), "xval.rda"))
} else data(xval)

The figure shows an ROC curve for the single and two-group classifier. The single group classifier is performing better than the two-group classifier.

bst <- roc(pheno[rownames(count)] == "Obese",
predict(bestgrp, count)[,"Obese"])
bst$Label <- "Single"
two <- roc(pheno[rownames(xval)] == "Obese", xval[,"Obese"])
two$Label <- "Two group"
both <- rbind(bst, two)
pars <- list(superpose.line=list(col=.qualitative[1:2], lwd=2))
xyplot(
    TruePostive ~ FalsePositive, group=Label, both,
    type="l", par.settings=pars,
    auto.key=list(lines=TRUE, points=FALSE, x=.6, y=.1),
    xlab="False Positive", ylab="True Positive"
)

sessionInfo()
#> R version 4.4.1 (2024-06-14)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.1 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.20-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_GB              LC_COLLATE=C              
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: America/New_York
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] parallel  stats4    stats     graphics  grDevices utils    
#> [7] datasets  methods   base     
#> 
#> other attached packages:
#> [1] lattice_0.22-6              DirichletMultinomial_1.48.0
#> [3] IRanges_2.40.0              S4Vectors_0.44.0           
#> [5] BiocGenerics_0.52.0         BiocStyle_2.34.0           
#> 
#> loaded via a namespace (and not attached):
#>  [1] cli_3.6.3           knitr_1.48          magick_2.8.5       
#>  [4] rlang_1.1.4         xfun_0.48           highr_0.11         
#>  [7] jsonlite_1.8.9      DT_0.33             htmltools_0.5.8.1  
#> [10] tinytex_0.53        sass_0.4.9          rmarkdown_2.28     
#> [13] grid_4.4.1          crosstalk_1.2.1     evaluate_1.0.1     
#> [16] jquerylib_0.1.4     fastmap_1.2.0       yaml_2.3.10        
#> [19] lifecycle_1.0.4     bookdown_0.41       BiocManager_1.30.25
#> [22] compiler_4.4.1      htmlwidgets_1.6.4   Rcpp_1.0.13        
#> [25] digest_0.6.37       R6_2.5.1            magrittr_2.0.3     
#> [28] bslib_0.8.0         tools_4.4.1         cachem_1.1.0