前文: EM:Sloan的随机性模型方法 ISME+Microbiome:Sloan随机性方法的发展及代码 介绍了Sloan随机性方法的概念及计算。本文再提供一种计算途径MicEco。 Link: https://github.com/Russel88/MicEco/
安装
1library(devtools)
2install_github("Russel88/MicEco")
neutral.fit函数可以计算。输入只需一个OTU表,最后得到拟合的R2及期望的频率分布值。 neutral.rand是增强版,可以在校正16S rRNA基本拷贝数的基础上进行多次计算,
具体代码: https://rdrr.io/github/Russel88/MicEco/src/R/neutral.fit.R
1#' Fit Sloan et al. (2006) Neutral Model
2#'
3#' Fit neutral model developed by Sloan et al. (2006, Environ Microbiol 8(4):732-740) and implemented by Burns et al. (2015, ISME J 10(3):655-664).
4#' @param otu An OTU-table with taxa as columns and samples as rows.
5#' @keywords neutral
6#' @return A list of length two; first element contains fit statistics, the second element contains predictions.
7#' @import bbmle
8#' @export
9
10neutral.fit <- function(otu){
11
12 # Frequency
13 otu.pa <- (otu>0)*1
14 freq <- apply(otu.pa, 2, mean)
15
16 # Individuals per community
17 N <- mean(apply(otu, 1, sum))
18
19 # Relative abundance
20 p <- apply(otu, 2, function(x) mean(x))/N
21
22 # Detection limit
23 d = 1/N
24
25 # Define likelihood function
26 neutral.ll <- function(m, sigma){
27 R = freq - pbeta(d, N*m*p, N*m*(1-p), lower.tail=FALSE)
28 -sum(dnorm(R, 0, sigma,log=TRUE))
29 }
30
31 # Fit neutral model
32 m.mle <- mle2(neutral.ll, start=list(m=0.01, sigma=0.1),method="Nelder-Mead")
33
34 # R-squared
35 gRsqr <- 1 - exp(-as.numeric(logLik(m.mle))/length(p))
36
37 # Predictions
38 freq.pred <- pbeta(d, N*m.mle@coef['m']*p, N*m.mle@coef['m']*(1-p), lower.tail=FALSE)
39 pred.ci <- binconf(freq.pred*nrow(otu), nrow(otu), return.df=TRUE)
40
41 # Bind results
42 stats <- cbind(m.mle@coef['m'], m.mle@details$value,gRsqr , N, nrow(otu), length(p), d)
43 pred <- cbind(p, freq, freq.pred, pred.ci[,2:3])
44
45 results <- list(stats,pred)
46 return(results)
47}
这个代码和上文ISME的基本一致,但是一些细节的地方略有不同,如这个没有用非线性最小二乘拟合法对R2进行拟合。结果包含两个列表,第一个中分别为m,beta分布特征值,R2,N,样本量,相对丰度p的长度,丰度阈值d。第二个中分别为每个OTU的相对丰度p,发生率freq,预测的理论发生率freq.pred,及上下界lower和upper。
我测试这两种方法的结果,略有差别。上文最后得到的结果中,m为0.02013109,R2为0.06957435。本文的方法m和R2都略低。根据第二个列表的结果即可画图,下篇继续~。
另外,MicEco还有一些其他使用的功能。 1.Phyloseq的拓展: ps_prune:根据丰度或发生率剪切OTU ps_venn:venn图(基于eulerr::euler) ps_euler:Euler图 ps_pheatmap:热图 (基于pheatmap::pheatmap) rcurve:稀释曲线 (基于vegan::rarefy) 2.杂项: adonis_OmegaSq:adonis模型计算无偏效应量 WdS.test:基于距离的多变量方差分析,adonis的替代 UniFrac.multi:UniFrac 距离,树上随机取root proportionality:计算OTU比例
3.16S拷贝数相关: community_rrna:计算样本平均16S拷贝数 rarefy_rrna:拷贝数校正过的稀释曲线
4.beta多样性零模型 ses.UniFrac:UniFrac的标准效应量 ses.comdist:MPD标准效应量 ses.comdistnt:MNTD标准效应量