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

在R中使用optim()拟合自定义模型的实现是否正确?

关于自定义模型拟合方法的正确性判断

你的拟合思路和代码整体是正确的,以下是具体分析:

一、核心逻辑的正确性

  • 负对数似然函数的参数化合理:通过beta = exp(alpha)、sigma = exp(params[4])的转换,确保了模型要求的非负参数约束,避免优化过程中出现无效的负数值。
  • 似然计算逻辑准确:使用dnorm(y, mean = mu, sd = sigma, log = TRUE)计算单观测对数似然,求和后取负得到负对数似然,符合极大似然估计的目标;加入的NA/Inf判断能规避数值异常导致的优化中断。
  • 优化流程规范:调用optim()的BFGS方法进行无约束优化,同时计算海森矩阵用于标准误估计,最后将转换后的参数(beta、sigma)整理输出的步骤完全正确。

二、需要优化的细节

  • 初始值调整:当前设置的start_params = c(0, 0.5, 0, 0)是可行的,但如果出现优化不收敛(fit$convergence != 0),可以尝试基于简单OLS估计初始值,比如先拟合y ~ y_lag + x,用系数作为c、phi1、beta的初始值,再取log(sigma)为OLS残差标准差的对数。
  • 标准误的转换:当前计算的se是优化参数(c、phi1、alpha、log(sigma))的标准误,若要得到原模型参数beta和sigma的标准误,需要通过delta方法转换:
    # 计算beta的标准误
    se_beta <- final_params["beta"] * se[3]
    # 计算sigma的标准误
    se_sigma <- final_params["sigma"] * se[4]
    # 整理最终参数与标准误
    final_results <- data.frame(
      Estimate = c(final_params),
      Std.Error = c(se[1], se[2], se_beta, se_sigma)
    )
    
  • 收敛性验证:拟合完成后务必检查fit$convergence是否为0,若不为0说明优化未收敛,需要调整初始值或更换优化方法(比如使用method = "L-BFGS-B"并设置参数边界)。
  • 稳定性测试:可以尝试用不同的优化方法(如Nelder-Mead)重复拟合,对比参数估计结果,确保估计的稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:47