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

R中使用MLE和NLS函数估计非线性生产模型参数问题求助

NLS报错原因与解决

NLS报错是因为你设置的初始值不合理,生产函数的要素弹性通常位于0~1区间,你将Beta_1、Beta_2初始值设为2,代入数据后会出现极大值溢出,生成无穷值导致计算终止。
修复方法:调整初始值为合理区间数值,也可以先通过对数线性回归获取初始值再代入NLS计算,示例代码如下:

# 构造样本数据集
dat <- data.frame(
  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)
)

# 修正后的NLS估计
prod.nls <- nls(Y ~ A * (K^Beta_1) * (L^Beta_2), 
                data = dat,
                start = list(A = 1, Beta_1 = 0.3, Beta_2 = 0.7))
# 查看估计结果
summary(prod.nls)

MLE报错原因与解决

你调用mle函数的语法错误,stats4包中的mle不支持直接传入公式进行拟合,需要先自定义负对数似然函数传入。
如果只是要估计对数转换后的线性模型,在误差项独立同分布服从正态分布的假设下,普通最小二乘估计结果和MLE完全一致,可以直接用lm函数拟合:

# 对数线性模型拟合
prod.loglm <- lm(log(Y) ~ log(K) + log(L), data = dat)
summary(prod.loglm)

如果需要显式调用mle函数拟合,需要先构造负对数似然函数,示例代码如下:

library(stats4)
# 自定义负对数似然函数
neg_loglik <- function(lnA, beta1, beta2, sigma) {
  mu <- lnA + beta1 * log(dat$K) + beta2 * log(dat$L)
  -sum(dnorm(log(dat$Y), mean = mu, sd = sigma, log = TRUE))
}
# MLE估计
prod.mle <- mle(neg_loglik, start = list(lnA = 1, beta1 = 0.3, beta2 = 0.7, sigma = 0.1))
summary(prod.mle)

内容的提问来源于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 11:06:03