使用带有“ratematrix”的先验分布

在这里,我们将为模型的每个参数设置非信息性和信息性的先验。请注意,模型估计基于Markov-chain Monte Carlo(MCMC),因此此处描述的分析可能需要一些时间才能运行。

根值的优先级

“速率矩阵”包估计根值和进化速率矩阵(R(右))对于一个多变量布朗运动模型(mvBM),其单个或多个速率模式适合于同一个系统发育树。mvBM模型(以及单特征BM模型)具有这样的行为,即当我们从树梢到树根遍历树的节点时,为节点估计的特征值接近树梢数据的平均值。这是因为BM模型具有固定的平均值,并且方差随时间成比例增加。因此,我们预先知道,估计的根不会超出观察到的叶尖值的范围,并且很可能接近叶尖数据的平均值。关于模型统计行为的此类信息,即使与生物学没有直接关系,也可以帮助我们设计Markov-chain Monte Carlo(MCMC)分析的先验分布。

需要注意的是,这种行为是预期的估计根值不考虑真正的根值。BM模型以及许多其他性状进化的系统发育比较模型需要系统发育节点的信息,以便更准确地估计根值。例如,这些信息可以来自化石数据。

加载所需的程序包:

图书馆(费率矩阵)图书馆(盖革)
##加载所需的包:ape

模拟一些数据。这里我们使用了100个提示和两个特征的系统发育史。然而,将此分析扩展到更多性状是很简单的。

phy<-sim.bdtree(b=1,d=0,stop=“分类群”,n=100)R<-rbind(c(0.5,0.2),c(0.2,0.5))dat<-simRatematrix(树=phy,vcv=R,anc=c(5,10))

我们将使用此数据运行两个独立的分析。一个具有统一的根值先验值,另一个具有正态分布的先验值(信息先验),其中心远离模型的真实参数值。本练习的目的是展示如何设置您自己的自定义先验分布,以及如果此先验被误导,模型将如何表现。

根部均匀

首先,我们需要设置优先级。虽然可以使用函数的内置选项轻松设置统一的先验值速率矩阵MCMC,这里我们“手动”使用函数将previor定义为一个工作示例makePrior().

##创建统一先验的边界矩阵。##这里将使用提示数据的最大值和最小值作为边界。par.mu<-rbind(上限(范围(dat[,1])),上限(范围[,2]))##在标准偏差之前使用对数正态分布,对数(平均值)=0,对数(sd)=1.5。第sd部分<-c(0,1.5)##协方差矩阵的前一个设置为默认值:##协方差基本一致。unif.prior<-makePrior(r=2,p=1,den.mu=“unif”,par.mu=par.mu,den.sd=“lnorm”,par.sd=par.sd)

定义了先验值后,我们可以从中提取样本,并通过绘制样本来评估分布。

样本<-samplePrior(n=1000,prior=unif.prior)##在-10和10之间绘制之前的样本。plotRatematrix(示例,set.xlim=c(-10,10))
##策划单一政权。

unnamed-chunk-4区块图

现在,我们已经准备好使用之前创建的方法运行MCMC分析。这里我稍微增加了链对根值进行采样的频率。注意,模型每个参数的采样频率(支柱)以及提案的宽度(宽_深w_mu(最小值))是用户可以(并且应该!!)调整的参数,以最大限度地提高采样器的效率。

这个速率矩阵MCMC函数将文件写入工作目录。输出是一个句柄对象,用于存储MCMC运行的信息。句柄对象(此处命名为把手.unif.root)其他功能需要。

handle.unif.root<-速率矩阵MCMC(数据=dat,phy=phy,优先级=unif.prior,start=“prior_sample”,gen=200000,outname=“uniform_root_prior”,dir=tempdir())

下一个代码块将从文件中读取MCMC输出,并进行快速收敛分析。

##post.unif.root<-readMCMC(handle=handle.unif.rot)##检查后部物体:##立柱.unif.root##checkConvergence(post.unif.root)

此收敛分析仅基于单链。带有TRUE/FALSE值的输出表是Heidel测试的结果(参见软件包尾波更多信息)。如果配备多条链条,检查收敛将计算Gelman和Rubin(1992)的潜在折减因子指数,这是一个更稳健的收敛测试。功能日志分析器将为运行绘制跟踪图。

现在,我们可以绘制用于此分析的先验值。请注意,根值上的先验值在指定范围内是平坦的。当然,直方图是基于先验分布的样本,因此结果并不完全平坦。

plotPrior(handle=handle.unif.root,root=TRUE)
##绘制先前的分布。##重要提示:在比较后验分布图和前验分布图时,请注意比率的比例!!。

unnamed-chunk-8区块图

同样,快速检查进化速率矩阵的先验分布也很简单(R(右))

plotPrior(句柄=handle.unif.root,set.xlim=c(-10,10))
##绘制先前的分布。##重要提示:在比较后验分布图和前验分布图时,请注意比率的比例!!。##策划单一政权。

unnamed-chunk-9区块图

这里我们绘制了根值向量的后验分布。垂直红线显示用于模拟数据的真实参数值。

plotRootValue(post.unif.root,vline.values=c(5,10),vline.color=c(“红色”,“红色”))

unnamed-chunk-10区块图

该图清楚地表明,后验分布包括其95%最高后验密度(HPD)区间内的真实参数值。这是预期的结果,因为我们在模型下模拟了数据。

根目录上的信息优先

如果根值上的前一个是信息性的怎么办?实现信息优先的两个最常见原因是:;a) 使用外部信息,例如节点的特征值(例如化石数据)或正在研究的特征的潜在遗传结构的知识,或b)在面临收敛困难时,将参数值绑定到参数空间的合理区域。第一种情况是最清楚地使用了先前的分布。这是为了根据有关问题的额外信息为我们的分析提供信息。第二种情况更具技术性。这里的要点是,当模型的某些参数很难估计时,或者当数据中没有足够的信息时(可能两者都有!),模型的似然曲面可能会在某些区域变平和/或显示一些脊线。当取样器卡在某些脊线中时,参数值可能变得不切实际(即,生物解释有限的超大或小数值)。在这种情况下,即使有利于合理参数值的弱先验分布也可以帮助链达到收敛。这个问题的一个有用的类比是使用有界最大似然搜索(参见函数中的选项“L-BFGS-B”最佳). 我们建议检查Uyeda和Harmon(从系统发生比较数据推断和解释适应性景观动态的新型贝叶斯方法,2014年,系统生物学)的工作,以了解信息先验的有趣使用。

这里我们有意设置一个以值为中心的先验值,使其远离真正的参数值。这是一个极端的例子,它将显示先验分布对后验分布的影响。然后我们将探讨这对分析结果的影响。

首先,我们使用与之前类似的步骤生成先验分布。然后我们运行分析并收集结果。

##使用根值的正态分布的参数生成矩阵。##Root_1:平均值0和sd 1,Root_2:平均值15和sd 2。par.mu<-rbind(c(0,1),c(15,2))##在标准偏差之前使用对数正态分布,对数(平均值)=0,对数(sd)=1.5。第sd部分<-c(0,1.5)##协方差矩阵的先验设置为默认值:##协方差基本一致。norm.prior<-makePrior(r=2,p=1,den.mu=“norm”,par.mu=par.mu,den.sd=“lnorm”,par.sd=par.sd)
handle.norm.root<-速率矩阵MCMC(数据=dat,phy=phy,优先级=normal.prior,start=“prior_sample”,gen=200000,outname=“normal_root_press”,属性=c(0.1,0.45,0.45),dir=tempdir())
##post.norm.root<-readMCMC(handle=handle.norm.root)检查收敛(post.normal.root)
##$海德尔##根矩阵##stest TRUE真##htest TRUE TRUE(正确)## ##美元##根1根2矩阵cel1矩阵cel2矩阵cel3矩阵cel4##     165.2597     103.7021     393.1583     430.8257     430.8257     455.0331

海德尔检验表明,单链达到了趋同。现在我们可以绘制先验分布和后验分布图。

plotPrior(handle=handle.norm.root,root=TRUE)
##绘制先前的分布。##重要提示:在比较后验分布图和前验分布图时,请注意比率的比例!!。

unnamed-chunk-15区块图

plotRootValue(post.norm.root,vline.values=c(5,10),vline.color=c(“红色”,“红色”))

unnamed-chunk-15区块图

请注意trait_1(红线)的根的真实参数值如何远离先前的分布,而trait_2的根值是。现在将先前分布的图与后面的图进行比较。进行此操作时,请注意两个图的x轴,因为范围不同。两种绘图功能都有参数来控制x轴的范围(请参见设置.xlim).

还要注意,trait_1的真值不在先验值的高密度范围内,而trait_2的真值为:

##检查之前分发的摘要和四分位数。##特征1之前:摘要(rnorm(1000,0,1))
##最小第1季度中位数平均第3季度最大。## -2.820437 -0.670857 -0.003897 -0.011348  0.637090  3.091180
##特征2之前:摘要(rnorm(1000,15,2))
##最小第1季度中位数平均第3季度最大。##   8.928  13.674  15.057  14.991  16.352  21.616

trait_1的真实值与先验分布相差甚远。对于trait_2,真值在前一个四分之一以内。在这个例子中,后验分布是在模型真实参数值的方向上更新的,但先验的影响很强,并使结果有偏差。

这是一个极端的例子,展示了信息先验远离模型“真实”参数值的效果。另一方面,如果使用先验信息输入有关数据的外部信息或帮助避免不合理的参数值,则这种效果可以改善结果的生物学解释。

进化速率矩阵的先验

虽然根值向量代表了多元布朗运动过程从根到梢沿着树的分支行走的起点,但进化速率矩阵(R(右))是该过程的方差-方差矩阵。在这里,我们将探索为每个特征的进化速度及其进化协方差设定先验,它们共同构成了R(右)矩阵。

关于群体内或群体间性状相关性的研究结果以及关于性状潜在遗传结构的知识是外部信息的示例,可用于设置有关性状间相关性结构的信息性先验分布。

由于在中实现了采样器方案费率矩阵,可以对性状间的进化相关结构和每个性状的进化速率向量设置独立的先验分布。在本教程的这一部分中,我们将设置一个无信息先验,并将结果与信息先验进行比较。为了简单起见,我们将使用与前一节相同的数据集和树。

进化相关性的统一先验

首先,我们将为性状之间的进化相关性设定一个无信息的先验。此分析与本教程中进行的第一次分析相同。所以我们将使用相同的结果。

进化协方差的无信息先验是一个略微一致的先验。换言之,当将数据中每两个性状之间的相关性与所有其他因素的不确定性相结合时,其分布是均匀的R(右)我们将绘制一些图来演示这个概念。

首先绘制整个R(右)矩阵,这是一个方差-方差矩阵。

plotPrior(handle.unif.root,n=10000,root=FALSE,set.xlim=c(-10,10),alphaEll=0.5)
##绘制先前的分布。##重要提示:在比较后验分布图和前验分布图时,请注意比率的比例!!。##策划单一政权。

unnamed-chunk-17区块图

现在我们可以将方差-方差矩阵的分布分解为相关矩阵的分布和每个性状的标准方差的另一个分布。为此,我们将使用函数前一个示例分别从相关结构和标准差的先验分布中抽取样本。还可以使用此函数对方差-方差矩阵进行采样,而不是对其不同的分量进行采样。

ss<-samplePrior(n=1000,priority=unif.prior,sample.sd=TRUE,rebuild.R=FALSE)corr<-sapply(ss$矩阵,函数(x)cov2cor(x)[1,2])hist(corr,main=“性状之间的相关性”)hist(ss$sd[,1],main=“标准偏差-特征1”)hist(ss$sd[,2],main=“标准偏差-特征2”)

unnamed-chunk-18区块图unnamed-chunk-18区块图unnamed-chunk-18区块图

从这些图中可以看出,相关性的先验值均匀分布在-1和1之间。另一方面,正如我们设定的那样,标准偏差显示出对数正态分布。从整体图中很难看出R(右)矩阵表示相关性是均匀分布的,但通过将协方差转换为相关性,这一点变得更清楚。

我们已经使用这些数据和之前的数据进行了分析。所以我们将只绘制R(右)矩阵。请注意,红线表示R(右)用于生成数据的矩阵。

plotRatematrix(chain=post.unif.root,set.leg=c(“trait_1”,“trait_2”),point.matrix=列表(R),point.color=“红色”,point.wd=1.5)
##策划单一政权。

unnamed-chunk-19区块图

注意,在这种情况下,后验分布与用于生成数据的真实参数值一致。

利用特征间进化相关性结构的信息先验分布

在这里,我们将重复在分析中使用信息丰富的先验知识的练习,但现在将重点放在性状之间进化相关性的结构上。

注意,我在标准偏差之前使用了对数正态分布。这种先验将更多的权重放在性状进化速率的较小值上。这遵循了这样一个概念,即此参数的值通常不是很大(并且从不为负)。另一方面,应用于相关矩阵的边缘均匀先验设置了相关的均匀先验,因此负相关、正相关和无相关具有相同的权重(即先验概率)。

也许我们认为这不是一个合理的先验分布,强相关性,无论是负相关性还是正相关性,应该比弱相关性具有更少的先验概率。为此,我们将先验设置为以0相关性为中心,并且大多数密度在-0.5和0.5间隔内。

注意,这里我们需要将选项“unif.corr”设置为FALSE,以便函数使用参数“Sigma”和“nu”的自定义输入值。

##创建一个具有统一先验边界的矩阵。##这里将使用提示数据的最大值和最小值作为边界。par.mu<-rbind(上限(范围(dat[,1])),上限(范围[,2]))##在标准偏差之前使用对数正态分布,对数(平均值)=0,对数(sd)=1.5。第sd部分<-c(0,1.5)##Sigma是一个尺度矩阵。这相当于逆Wishart的平均值。##单位矩阵将分布集中在0相关性上。西格玛<-rbind(c(1,0),c(0,1))##nu是这个分布的方差的等价物。但这里的大值意味着##大多数样本将接近Sigma矩阵,而较小的值##(最小值=性状数量+1)将导致更广泛的分布。nu<-50#这将限制Sigma矩阵周围的分布。corr.prior<-makePrior(r=2,p=1,den.mu=“unif”,par.mu=par.mu,den.sd=“lnorm”,par.sd=par.sd,unif.corr=FALSE,Sigma=Sigma,nu=nu)

我们可以对此先验样本进行采样,并为相关性和标准偏差的分布绘制独立的图。

ss.corr<-samplePrior(n=1000,previor=corr.prior,sample.sd=TRUE,rebuild.R=FALSE)corr.p<-sapply(ss.corr$矩阵,函数(x)cov2cor(x)[1,2])hist(corr.p,main=“性状之间的相关性”)hist(ss.corr$sd[,1],main=“标准偏差-特征1”)hist(ss.corr$sd[,2],main=“标准偏差-特征2”)

unnamed-chunk-21区块图未命名区块图-区块-21未命名区块图-区块-21

请注意,即使在修改相关性的先验值之后,标准偏差的分布也没有改变。这使得在使用速率矩阵包裹。请注意,我们成功地按照预期设置了相关性的优先级(好!)。

所选的先验信息非常丰富,并且不跨越模拟的真实参数值。模拟中使用的真实相关值为:

二氧化碳(R)[1,2]
## [1] 0.4

从先前分布中取样后,使用前一个示例我们可以应用这个函数绘制比率曲线绘制R(右)矩阵。功能绘图矩阵在绘图之前,将从相关矩阵和标准偏差的联合分布中重建方差-方差矩阵。这是可能的,因为前一个示例生成与读取MCMC功能。

plotRatematrix(ss.corr,set.xlim=c(-10,10),show.zero=真)
##策划单一政权。

unnamed-chunk-23区块图

我们可以将此先验分布与之前分析中使用的先验分布进行比较。可以看出协方差项在0附近的分布如何更紧密。

现在我们可以使用此先验值设置并运行分析,然后检查收敛性并绘制后验分布。

##handle.crr.zero<-ratematrixMCMC(数据=dat,phy=phy,先验=corr.prior##,start=“prior_sample”,gen=200000##,outname=“corr_zero_prior”,属性=c(0.1,0.45,0.45)##,dir=tempdir())##post.corr.zero<-readMCMC(handle=handle.corr.zero)检查收敛(post.corr.zero)
##$海德尔##根矩阵##stest真真##htest TRUE TRUE(正确)## ##美元##根1根2基质1基质2基质3基质4##     141.6506     112.1025     692.3728     734.7567     734.7567     689.4026
plotRatematrix(post.corr.zero,point.matrix=列表(R),point.color=“红色”,point.wd=1.5,show.zero=真)
##策划单一政权。

unnamed-chunk-25区块图

结果与我们在根值向量之前设置信息类似。性状间进化协方差的后验分布并不是以真实参数值为中心,而在先前的分析中是以略微一致的先验为中心的。偏差也是可以预测的;后验分布已向零值偏移。

最后考虑因素

值得注意的是,在实证研究中不存在“真实参数值”这样的东西。虽然使用模拟可以直接显示先验分布的影响,但使用经验数据则要困难得多。因此,我们建议用户积极探索不同的先前发行版。此外,最大似然估计(MLE)可以使用以下包执行mvMORPH公司植物醇MLE结果应与贝叶斯后验分布进行比较。如果MLE与MCMC分析不一致,则需要在继续之前回答一些问题;MLE是否达成了全球解决方案?优先分配是否远离MLE?MCMC真的融合了吗?

“一个瘦削、沉默的身影慢慢消失在黑暗中,终于意识到,在这个世界上,强大的力量也必然会到来——巨大的责任!”(斯坦·李和史蒂夫·迪特科,1962年。神奇幻想#15)