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
相关产品推荐
相关产品推荐

