fastphylosig 0.3.4 · 可复现模拟案例
比较不同支系的系统发育信号
整棵树的系统发育信号概括了总体格局,但不同支系可能很不一样。fast_hetero() 把树划分为单系冠群,复用已有 fast_* 内核计算局部信号,再汇总总体与局部差异。本例用同一组节点比较 K、λ、二元 D 和多状态 Δ,展示怎样从一张树图走向具体的生态与进化解释。
从整棵树到支系比较
fast_hetero() 先编译树并确定冠群,再按性状处理缺失观测,复用 K、λ、D、ACE 与 Δ 的 C++ 计算路径。总体估计和检验按需计算,最后把局部值、总体值、离散度与诊断汇总到同一对象。
1. 先确定数据设计与冠群
树为平衡、超度量二叉树,每条枝长为 1。按根下深度 3 的节点预先选择 8 个不重叠冠群,每群 64 个物种、高度 6,覆盖整棵树。这一步只使用树,不依据性状结果挑选节点。
C1–C4 的连续性状分别按 BM 模拟,分类性状分别按低转移率 ER 模拟;C5–C8 的性状独立随机赋值,让两组支系形成清楚的对照。另加入两个常见数据情形:C1 的连续性状有 3 个缺失值;C8 的二元性状全为 absent、多状态性状全为 A。
tree <- ape::stree(512, "balanced")
tree$edge.length <- rep(1, nrow(tree$edge))
depth <- ape::node.depth.edgelength(tree)
nodes <- which(seq_along(depth) > 512 & depth == 3)
真实研究可按科、属或其他有生物学含义的类群指定节点,尽量比较年龄和样本量相近的冠群。没有预定类群时,可用 min_tips=50, max_tips=80 自动选择最大不重叠冠群;在本例完整平衡树上,它对应相同的 8 个冠群。选好主切割后,再用少量预定尺度做敏感性比较。
2. 连续性状:局部 K 与 λ
x 是按物种命名的连续性状向量。下面对相同的 nodes 计算局部及总体结果;overall_test 是普通整树信号检验,test 是冠群间的参考检验。
k <- fast_hetero(tree, x, method = "K", nodes = nodes,
min_tips = 50, test = TRUE, nsim = 999,
overall_test = TRUE, progress = FALSE)
lambda <- fast_hetero(tree, x, method = "lambda", nodes = nodes,
min_tips = 50, test = TRUE, nsim = 999,
lambda_reference = "REML", overall_test = TRUE, progress = FALSE)
k$clades # 实际观测数、局部估计、状态与差异
k$overall # 普通整树信号估计与检验
k$heterogeneity # 冠群间离散度及其参考检验
plot(k, tree = tree, show.tip.label = FALSE, node_labels = TRUE)
本次实际运行的汇总如下。“总体信号 P”回答整树是否具有信号;“异质性参考 P”回答冠群间离散是否超出相应模型的预期。
| 指标 | 整树估计 | 普通整树信号 P | 整树 n | 局部可用/选定 | 冠群离散 | 异质性参考 P |
|---|---|---|---|---|---|---|
| K | 0.3029 | 0.001001 | 509 | 8 / 8 | SD(log(K)) = 0.5861 | 0.001 |
| lambda | 0.5634 | 3.745e-17 | 509 | 8 / 8 | SD(lambda) = 0.483 | 0.001 |
| D | 0.1256 | random: 0/1000; BM: 0.196 | 512 | 7 / 8 | SD(D) = 0.9703 | 未计算(描述) |
| Delta | 5.323 | 0.0201 | 512 | 7 / 8 | SD(log(Delta)) = 4.785 | 未计算(描述) |
K/λ 的参考 P = 0.001 是 999 次模拟、零次超越时的 +1 秩结果,也是这次模拟的分辨率下限。Δ 的普通整体 P 为 4/199 = 0.0201,MCSE 约为 0.00995。
K 和 λ 都揭示出整树汇总之外的支系差异。K 的离散与给定树形的 BM 参考比较;λ 使用共同局部 λ 的近似 bootstrap。本例冠群同龄,便于直接比较;实际数据中,也要同时看冠群年龄,因为 λ 的取值与冠群的计量尺度有关。
3. 分类性状:比较聚集格局与状态组成
二元性状用 D,多状态性状用 Δ。本例两者都设 test=FALSE,不计算其新增异质性 P;overall_test=TRUE 仍计算原有普通整树信号检验。
d <- fast_hetero(tree, binary, method = "D", nodes = nodes,
min_tips = 51, test = FALSE, d_nsim = 1000,
overall_test = TRUE, progress = FALSE)
delta <- fast_hetero(tree, multi, method = "Delta", nodes = nodes,
min_tips = 50, test = FALSE, overall_test = TRUE,
overall_nsim = 199, delta_control = list(model = "ER"),
progress = FALSE)
Δ 使用 LSE、两条各 10,000 步的链、burn=100, thin=10,拟合模型预先定为 ER。普通整体检验使用 199 次随机化,结果同时给出 P 与 Monte Carlo 误差;正式分析可按所需概率精度增加次数。
| 冠群 | 原始节点 | 连续性状 n | K | λ | D | Δ | 状态 |
|---|---|---|---|---|---|---|---|
| C1 | 516 | 61 | 1.125 | 0.9636 | -0.8426 | 91.24 | 可估计 |
| C2 | 579 | 64 | 0.7893 | 0.9964 | -1.361 | 193.7 | 可估计 |
| C3 | 643 | 64 | 1.111 | 0.9254 | -0.6767 | 19.81 | 可估计 |
| C4 | 706 | 64 | 0.8178 | 0.8336 | 0.544 | 565.9 | 可估计 |
| C5 | 771 | 64 | 0.3365 | 7.933e-05 | 0.8975 | 0.001573 | 可估计 |
| C6 | 834 | 64 | 0.3488 | 7.933e-05 | 1.118 | 0.08829 | 可估计 |
| C7 | 898 | 64 | 0.2847 | 7.933e-05 | 0.5317 | 0.1788 | 可估计 |
| C8 | 961 | 64 | 0.3411 | 0.1361 | NA | NA | D/Δ 单状态 |
C8 仍列在表中:它的状态全部相同,因此 D/Δ 的局部估计为 NA、状态为 undefined。这样的结果提醒我们先回看性状组成。K/λ 的 C1 则保留 61 个实际观测,其他冠群为 64 个;min_tips 检查剔除缺失后的观测数。分类性状没有相同的缺失,仍为每冠群 64 个物种。
阅读时注意指标方向:较大的 K、λ、Δ 通常表示更强的近缘相似格局;D 则是较小的值表示更强聚集,而且 D 可以小于 0 或大于 1。按同一指标比较支系,再结合状态组成和诊断理解差异。
4. 结合诊断,形成结果解释
| 冠群 | 状态计数 | rank R-hat(Δ) | bulk ESS | tail ESS | 相对 MCSE |
|---|---|---|---|---|---|
| C1 | A=50;B=2;C=12 | 1.001 | 1712 | 1682 | 0.58% |
| C2 | A=53;B=5;C=6 | 1 | 1918 | 1984 | 0.52% |
| C3 | A=40;B=7;C=17 | 0.9996 | 1812 | 1587 | 0.56% |
| C4 | A=62;B=1;C=1 | 1.001 | 1844 | 1809 | 0.80% |
| C5 | A=20;B=23;C=21 | 1.001 | 1747 | 1783 | 1.39% |
| C6 | A=17;B=27;C=20 | 0.9992 | 1925 | 1856 | 0.41% |
| C7 | A=26;B=24;C=14 | 1 | 1599 | 1865 | 0.37% |
| 整体 | 三状态 | 1.003 | 1642 | 1518 | 0.17% |
本次已估计的 Δ 冠群与整体结果未触发 MCMC 警告。表中给出 Δ 序列的 rank R-hat、bulk/tail ESS 和相对 MCSE;完整对象还保留 α、β 参数诊断,以及优化器、数值恢复和告警信息。实际分析据这些信息决定是否延长链,或进一步检查稀有状态。
本例可以写成:“在预先确定的冠群尺度上,C1–C4 整体表现出比后半部分支系更强的近缘相似格局。K 的冠群间离散超出 BM 参考,λ 的离散也超出共同局部参数的近似参考。D 和 Δ 补充展示了分类性状的局部聚集差异;C8 的单状态组成单独报告。”
适用范围。 K 采用 BM 参考,λ 采用共同局部冠群参数的近似参考;D 的新增异质性检验仍为实验性,Δ 推荐局部/总体描述而不推荐异质性检验。信号差异可描述分析尺度上的系统发育保守性格局;若要解释稳定选择、生态位保守或速率机制,还需相应证据。方法细节见页末完整指南。
5. 下载与完整复现
脚本需要 fastphylosig 0.3.4、ape 和 jsonlite;固定数据种子为 20261016,各方法另用固定分析种子。下载后在仓库根目录运行脚本,或设置 FASTPHYLOSIG_CASE_OUT 指向输出目录。完整脚本包含数据生成及所有参数,是复现的准确信息源;本页代码块为对应步骤摘录。
各方法 CSV 也可直接下载:K、λ、D、Δ。将地址中的 -clades.csv 换为 -overall.csv 或 -heterogeneity.csv 可查看对应完整标量表。RDS 保留状态列表和诊断,CSV 不代替完整对象。
本案例使用已验收的冻结源码包生成。脚本还验证了绘图前后的随机数状态一致;数据、结果及运行环境一并提供,方便复核。