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

如何解决R语言nls函数报错:Convergence failure: false convergence (8)

R中nls函数拟合小波动数据出现false convergence的解决办法

报错原因

你使用的数据集df2中Numbers列的数值波动幅度极小,远小于数值本身的量级,默认收敛阈值下port算法检测到梯度变化过小,误判为无法收敛,触发false convergence (8)报错。此外你当前使用的模型对待估参数b1、b2是纯线性的,本身不需要调用非线性最小二乘函数nls,选错拟合工具也额外增加了收敛风险。

解决办法

  • 最优方案:改用线性回归函数lm拟合,完全规避收敛问题,结果精度更高
    你的模型Numbers ~ b1*Days^2 + b2对待估参数属于线性形式,直接运行以下代码即可得到无误差的拟合结果:
    mod2 <- lm(Numbers ~ I(Days^2), data = df2)
    # 输出结果中,截距项对应b2,I(Days^2)的系数对应b1
    
  • 若必须使用nls函数,调整收敛控制参数即可正常运行
    调宽松残差收敛阈值,同时开启警告仅提示模式不强制终止运行:
    mod2 <- nls(Numbers ~ b1*Days^2+b2,
                start = list(b1 = 0,b2 = 0),
                data = df2, 
                algorithm = "port",
                control = nls.control(ftol = 1e-6, warnOnly = TRUE))
    
  • 备选方案:更换拟合算法,可改用minpack.lm包中的nlsLM函数,对低波动数据的收敛兼容性更好,对初值要求更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:03