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

如何用maxLik包计算MLE?Newton-Raphson算法R代码报错求助

问题解决步骤

1. 错误根源

maxLik要求对数似然函数的第一个参数必须是待估计的参数向量theta,你写的obs.loglik把y放在第一个参数位置,导致函数调用时无法正确识别theta,触发"argument 'theta' is missing"错误。另外,原似然公式中平方项的括号位置有误,应该先对每个观测计算平方再求和,否则结果会偏离正确值。

2. 修正后的代码

调整参数顺序+修正似然公式

# 修正对数似然函数:theta作为第一个参数,调整平方项的括号位置
obs.loglik <- function(theta, y) {
  mu <- theta[1]
  sigma2 <- theta[2]
  lambda <- theta[3]
  n <- length(y)
  # 对每个观测计算平方后再求和
  sq_term <- sum( ((y^lambda - 1)/lambda - mu)^2 )
  # 对数似然公式
  -0.5*n*log(2*pi) - 0.5*n*log(sigma2) - sq_term/(2*sigma2) + (lambda - 1)*sum(log(y))
}

library(maxLik)

# 示例:模拟一组观测数据(替换为你的真实数据即可)
set.seed(123)
y <- exp(rnorm(100, mean=0.5, sd=0.3))

# 优化初始值:用lambda=0.5变换后变量的均值、方差作为mu、sigma²的初始值
init_mu <- mean((y^0.5 - 1)/0.5)
init_sigma2 <- var((y^0.5 - 1)/0.5)

# 调用maxLik,通过...传递y参数,显式指定Newton-Raphson方法
mle <- maxLik(obs.loglik, start=c(init_mu, init_sigma2, 0.5), y=y, method="Newton-Raphson")

# 查看估计结果
summary(mle)

3. 额外提示

  • 初始值选择:用lambda初始值对应的变换后变量的统计量作为mu、sigma²的初始值,能提升算法收敛概率,避免因初始值偏离太远导致收敛失败。
  • 收敛检查:若运行后提示收敛失败,可尝试微调lambda的初始值(比如0.4或0.6),或者增加迭代次数(通过control=list(maxIter=1000)参数设置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:40