DAISIEprep::extract_island_species()的性能分析
在本文中,我们从时间角度测试和分析了性能中主要功能的消耗/复杂性DAISIEprep公司
R包装:提取岛屿物种()
。此函数接受a形式的系统发育树和物种特有性数据第4类
对象(R包中的S4类藻糖酶
).
这并不是对提取岛屿物种()
函数,但提供了不同数据集功能可用性的指示大小,以及检测可能减缓提取和格式化岛屿社区数据的过程。
性能分析的所有工作都由基准()
函数DAISIEprep公司
包裹。但在调用此函数之前,我们解释了建立了标杆管理。
的第一个参数基准()
是门
。如果这是无效的
那么函数将模拟系统发育和特有性数据,给出:树大小范围
,num_points(点数)
,岛上问题
、和prob特有
论据。它们指定要模拟的树大小的下限和上限范围(根据论点对数刻度
),序列中的中断次数在树的上下尺寸之间,一个物种将在岛上,如果一个物种在岛上地方病(1-prob特有
是物种的概率该岛是非地方性的)。如果门4d
对象已提供到叶脉
中的参数基准()
然后此树将用于执行基准测试。
在模拟数据的情况下,性能的参数空间分析是这些变量的组合(使用展开.grid()
功能)。系统发育模拟为使用rphylo()
函数猿
包裹。
由于我们正在随机模拟树上的物种可能没有外群物种为了正确提取殖民时间岛上物种或分支的茎年龄。因此,我们添加了一个我们确保岛上不存在外群体。
当我们想测试提取岛屿物种()
函数使用asr公司
首先运行祖先状态所需的算法重建。如果叶脉
树顶端的系统发育和特有状态数据准备就绪(有关asr公司
算法)。
要量化函数运行时所用的时间,请执行以下操作基本R和各种R包中的几种方法(例如微基准
或红色基准线
). 然而我们在这里使用system.time()
从底座R开始(参见https://radfordneal.wordpress.com/2014/02/02/inaccurate-results-from-microbenchmark/)用于推理)。
旁注:默认情况下DAISIEprep::基准()
条件每个模拟数据集都有一个非空岛,因此在没有物种需要的琐碎情况下,没有对功能进行测试提取。
由于计算时间不确定结果并非虚假,我们重复了三次计时计算平均“实时运行时间”,以及复制模拟(通过参数给出复制
)说明数据模拟中的随机性。
我们使用的树木大小范围包括常见的经验值系统发育(10到10000个提示)。然后我们生成一个随机样本每个物种的尖端状态,可能的状态为:特有到该岛,非地方性且不在该岛上。我们测试了一个树上每个物种都在岛上的概率很低(\(P(0.2)\))物种的概率很高在岛上(\(P(0.5)\)). 对于我们测试了这些场景中的每一个(\(P_E(0.2)\),\(P_{NE}(0.8)\))和高概率(\(P_E(0.8)\),\(P_{NE}(0.2)\))岛屿物种测试这是否影响性能的特有方法。对于每个场景,我们进行了十次重复。对于枝晶发生率高的孤立岛屿,岛屿物种可能不会均匀分布在我们在模拟中假设的系统发育,但事实上将是群集。检查每个物种的数量我们使用了马达加斯加哺乳动物数据集。为此,我们使用了(Upham等人2019年)完整且仅限DNA马达加斯加的系统发育和岛屿特有性数据(Michielsen等人,2023年).
本想定案例中的结果不是每次由于需要大量的计算时间,所以渲染渐晕。相反,分析在群集计算机上运行并保存在包裹。可以在中找到用于生成结果的分析脚本这个DAISIEprepExtra公司包裹在这里.性能分析使用基准()
中的函数这个DAISIEprep公司
包裹。
输出结果用于仅DNA的系统发育和完整的系统发育。参数估计的原始数据不同的参数设置被整理成包含数据的表格我们需要DNA和完整的系统发育。
#内部函数-不用于常规“DAISIEprep”操作,
#只是为了加载数据
性能数据<-DAISIEprep公司:::读取性能()
我们可以绘制每个模拟和经验的时间消耗(仅DNA和完整的系统发育)数据集,并根据物种在岛上的概率(岛上问题
). 现在可以使用绘制结果plot_性能
在中实现DAISIEprep公司
.此函数遵循tidyverse给定变量名的约定作为变量(与字符串相反)并使用整齐的求值进行分组根据给定的变量岛上问题
或prob特有
。首先是最小值
算法:
plot_性能(
性能数据=性能数据$性能数据最小值,
分组方式(_B)=岛上问题
)
#>警告:`position_dodge()`需要非重叠的x间隔。
#>`position_dodge()`需要非重叠的x间隔。
其次是asr公司
算法:
plot_性能(
性能数据=性能数据$性能数据存储,
分组(_B)=岛上问题
)
#>警告:`position_dodge()`需要非重叠的x间隔。
#>`position_dodge()`需要非重叠的x间隔。
或者,可以根据以下概率对数据进行分组:岛上的物种是特有的(prob特有
)对于最小值
(第一)和asr公司
(二)算法:
plot_性能(
性能数据=性能数据$性能数据最小值,
分组方式(_B)=prob特有
)
#>警告:`position_dodge()`需要非重叠的x间隔。
#>`position_dodge()`需要非重叠的x间隔。
plot_性能(
性能数据=性能数据$性能数据最小值,
分组方式(_B)=prob特有
)
#>警告:`position_dodge()`需要非重叠的x间隔。
#>`position_dodge()`需要非重叠的x间隔。
我们发现,即使是大树(10000个小枝)提取少于秒,而运行DAISIE推理模型以分钟到天为单位,因此预处理不会给管道带来了瓶颈。我们运行的经验树(马达加斯加哺乳动物的例子)比模拟树木更快处理具有均匀随机岛的存在(图1)。这表明当岛上物种与殖民活动的比率较高时提取速度应该更快。然而,即使是有许多殖民提取应该是一个计算问题。速度的提取有助于跨多个岛屿数据的提取系统发育,例如提取整个岛屿社区的数据推断系统发育树的后验分布分支时间和树拓扑的不确定性。
给定在上述log-log图中提取所需的系统发育和时间将幂律拟合到平均运行时间(重复数据的平均值)。
分组性能数据<-数字播放器::分组方式(_B)(
性能数据$performance_ data_,
树大小,
“prob_on_island”
)
平均绩效数据<-数字播放器::总结(
分组性能数据,
平均值= 意思是(中间时间),
.个组= “下降”
)
适合最小值<- 勒姆(日志(平均绩效数据$平均值)~ 日志(平均绩效数据$树大小)
适合最小值$系数
#>(截取)日志(平均性能数据$tree_size)
#> -28.297771 1.399895
分组性能数据<-数字播放器::分组方式(_B)(
性能数据$性能数据存储,
树大小,
“prob_on_island”
)
平均绩效数据<-数字播放器::总结(
分组性能数据,
平均值= 意思是(中间时间),
.组= “下降”
)
fit_asr公司<- 勒姆(日志(平均绩效数据$平均值)~ 日志(平均绩效数据$树大小)
配件(asr)$系数
#>(截取)日志(平均性能数据$tree_size)
#> -28.0177 1.3008
两者的时间增长最小值
和asr公司
算法遵循幂函数(\(y=ax ^k))带指数\(k=\)1.3998949和\(k=\)安装时,分别为1.3008005平均运行时间与树大小的关系。因此,时间复杂性不断扩大与树木大小相对较好,因此除非需要应用于超大系统发育(>10000个提示)DAISIEprep公司
提取功能应该是适用。