Blomberg's K
135–151×
2,000 个末端
fastphylosig · R 包 · v0.3.5
在 2,000 个物种/末端节点规模上,fastphylosig 计算系统发育信号的最高可提速达 23,591 倍。
系统发育信号衡量性状在近缘物种间相似的程度。fast_signal() 用一行代码就能算出 K、lambda、D 或 Delta,树越大,速度优势越明显(查看耗时基准)。fast_hetero() 用于比较大型系统发育树内部各支系的信号差异(查看 512 物种案例)。
Blomberg's K
135–151×
2,000 个末端
Pagel's lambda
20,697–23,591×
2,000 个末端
Fritz–Purvis D
218–224×
2,000 个末端
多状态 Delta
23.9–33.6×
2,000 个末端
耗时比为“参考实现中位耗时 ÷ fastphylosig 中位耗时”,比值大于 1 表示 fastphylosig 更快。参考实现分别是 phytools 2.5.2(K、lambda)、caper(D)和 Borges (2019) 的公开代码(Delta)。每个区间覆盖三种预设信号场景(Brownian 与噪声混合,权重 0、0.5、0.95)。
v0.3.5 发布版 是最新的版本,提供完整的支系分析流程,并优化了 D/lambda 的计算性能。
install.packages(
"https://github.com/yinwen-ecology/fastphylosig/releases/download/v0.3.5/fastphylosig_0.3.5.tar.gz",
repos = NULL, type = "source"
)
library(fastphylosig)
源码安装需要 C++17 工具链,Windows 上需要安装 Rtools,并依赖 ape、Rcpp 和 RcppArmadillo。
模拟数据示例
set.seed(1)
tree <- ape::rtree(30)
trait <- setNames(stats::rnorm(30), tree$tip.label)
binary <- setNames(as.integer(trait > stats::median(trait)), tree$tip.label)
state <- setNames(sample(letters[1:3], 30, replace = TRUE), tree$tip.label)
K
k <- fast_signal(tree, data = trait, method = "K",
test = TRUE, nsim = 999,
return_sim = TRUE, progress = FALSE)
lambda
lambda <- fast_signal(tree, data = trait, method = "lambda",
test = TRUE, progress = FALSE)
D
d <- fast_signal(tree, data = binary, method = "D",
test = TRUE, nsim = 999,
return_sim = TRUE, progress = FALSE)
Delta
delta <- fast_signal(tree, data = state, method = "Delta",
test = TRUE, nsim = 199, progress = FALSE)
fast_signal() 整合了系统发育树检查、树与性状匹配、缺失值处理、系统发育信号计算功能。如果需要,也可以单独执行四个步骤。
checked <- check_tree(tree, signal = "K")
tree_ready <- resolve_tree(tree, signal = "K")
matched <- match_tree_data(tree_ready, data = trait)
ctx <- prepare_tree(matched$tree)
k <- fast_k(ctx, x = matched$data, test = TRUE, nsim = 999,
progress = FALSE)
更多示例见中文使用指南与 v0.3.0 完整案例。
K 和 lambda 对比 phytools 2.5.2 的 phylosig(),D 对比 caper 1.0.4 的 phylo.d(),Delta 对比 Borges (2019) 的公开代码。50 至 2,000 个末端、3 种信号场景,每种设置 10 组配对重复(共 20 次计时调用)。计时从树与数据准备完成后开始。
plot_signal基于模拟数据的绘图
fast_hetero() 比较大树内不同支系的差异在大树情况下(例如超过 1,000 个末端),仅凭一个系统发育信号值难以描述内部不同分支间的差异,有的分支可能更保守,有的更发散。因此我开发了 fast_hetero(),把大树拆成冠群(一个节点及其全部后代),逐群估计信号,再把局部估计与整树值并列。冠群可以由你指定,也可以在给定大小范围内让函数选择互不重叠的最大冠群。结果保留每个冠群的实际样本量、缺失观测、状态组成,以及拟合与 MCMC 诊断。
fast_hetero() 先选择冠群、复用方法内核,再汇总局部估计、可选整树分析与诊断。结合案例阅读技术路线 · English diagramDelta 比值比较的是返回调用,不是精度。参考实现在 120 次调用中有 112 次出现数值告警,且不提供最终收敛检查;fast 实现有一次达到优化器限制。带告警的调用没有被剔除或重跑,因此这些比值不能说明两种实现的精度或收敛程度相当。告警记录保留在原始计时记录中,分类汇总见基准 QA 报告。
当前发布版为 fastphylosig v0.3.5。上面的性能数据来自 v0.3.0,由于核心计算代码未改变,未针对 v0.3.4 重跑。详见发布说明与 fast_hetero 案例。