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

R中对数模型使用mle函数出现minuslogl缺失报错的解决咨询

报错原因

stats4::mle()的第一个参数要求传入自定义负对数似然函数,不支持lm()类的公式语法。你直接将回归公式作为首个入参传入,函数无法识别有效输入,就会触发找不到minuslogl、入参不是函数的报错。

正确实现代码

你的对数模型本质是带正态扰动项的柯布-道格拉斯生产函数:

log(Y) = log(A) + αlog(K) + βlog(L) + ε,ε~N(0,σ²)

按要求构造负对数似然函数后传给mle()即可,完整可运行代码如下:

# 加载包
library(stats4)
# 你的测试数据
DF <- structure(list(Y = c(26971.71, 330252.5, 127345.3, 3626843, 37192.73
), K = c(32.46371, 28.42238, 5.199048, 327.807, 16.01538), L = c(3013256.014, 
135261574.9, 39168414.92, 1118363069, 9621912.503)), 
class = "data.frame", row.names = c(NA, -5L))

# 1. 自定义负对数似然函数
ll_prod <- function(logA, alpha, beta, sigma){
  # 计算模型预测值
  y_hat <- logA + alpha*log(DF$K) + beta*log(DF$L)
  # 计算负对数似然(正态分布假设)
  -sum(dnorm(log(DF$Y), mean = y_hat, sd = sigma, log = TRUE))
}

# 2. 调用mle拟合,需传入参数初始猜测值start
prod.mle <- mle(ll_prod, start = list(logA = 1, alpha = 0.5, beta = 0.5, sigma = 1))

# 查看拟合结果
summary(prod.mle)
补充说明
  • 如果你不需要做额外的似然约束,这个线性形式的对数模型直接用OLS拟合lm(log(Y) ~ log(K) + log(L), data = DF),得到的系数和MLE估计结果完全一致,写法更简单。
  • 如果要使用公式语法调用MLE拟合,可以换用bbmle包的mle2()函数,支持直接传入公式,无需手动写似然函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:18:03