You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复chronopl函数运行时的NA/NaN梯度与函数评估错误?

解决chronopl函数在子集数据集上的NA/NaN梯度/函数评估错误

问题场景

树结构可正常绘图,但chronopl()函数在同一数据集的子集上运行报错,原大数据集无此问题。

运行代码

etal <- chronopl(Larkie, 0, age.min = 1, age.max = NULL,
                  node = "root", S = 1, tol = 1e-8,
                  CV = FALSE, eval.max = 500, iter.max = 500)

报错信息(翻译后)

错误:
Error in nlminb(c(ini.rate, ini.time[unknown.ages]), function(p) minusploglik(p[EDGES], :
NA/NaN梯度评估
附加警告信息:
In nlminb(c(ini.rate, ini.time[unknown.ages]), function(p) minusploglik(p[EDGES], :
NA/NaN函数评估

可行解决方向

  • 排查子集树拓扑:子集操作可能生成异常树结构(如单分支节点、根节点定义矛盾),用plot(Larkie)可视化检查,或用is.ultrametric(Larkie)验证是否为超度量树——chronopl对树的拓扑完整性有硬性要求。
  • 调整根节点年龄约束:age.min = 1在子集树中可能过于严苛,尝试缩小约束范围(比如设age.min = 0.5),或替换为根节点的实际年龄估计值,而非固定值1。
  • 手动指定初始参数:从大数据集的chronopl结果中提取速率和节点时间,作为子集树的初始值传入,避免默认初始化引发的数值不稳定。
  • 检查子集序列质量:子集可能存在序列过短、变异位点不足的情况,导致似然函数计算溢出产生NA/NaN。统计子集序列的变异位点数量,确保数据量足够支撑分子钟推断。
  • 优化迭代参数:增大eval.max和iter.max(比如设为1000),给优化器更多迭代空间;或调高tol值(比如改为1e-6),降低收敛精度要求。

内容的提问来源于stack exchange,提问作者Ditiro Moloto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:03:25