【发布时间】:2020-12-09 17:33:58
【问题描述】:
这个问题是数学和编程的混合体,但我猜解决方案在于编程方面。
假设我有一个带有乘法误差的线性模型。
我想估计我在 R 中的系数 a 和 b。我在最佳答案 here 和证明中找到了解决方案似乎有道理。我还发现了如何使用异方差稳健标准错误here 进行 OLS。我对两种资源之间结果的解释是,plain-Jane OLS 和异方差稳健 OLS 中系数的估计值保持不变,但 t 值 F-values 和标准错误会有所不同。但是,我不关心那些,只关心系数的估计。如果我要记录原始方程,似乎可以得出这样的结论
然后通过R中的优化函数最小化如下
那么系数的结果应该与lm(y~x)$coefficients 的结果相匹配。我没有看到。到目前为止,这是我的代码。
library(dplyr)
library(wooldridge)
# Get the data ready.
data("saving")
saving <- saving %>% filter(sav > 0,
inc < 20000,
sav < inc)
x = saving$inc
y = saving$sav
# Define LinearLogError and generate coefficient estimates.
LinearLogError = function(coeffs){
a = coeffs[1]; b = coeffs[2]
yhat = log(a + b*x)
return(sum((log(y) - yhat)^2))
}
lmCoeffs = lm(y~x)$coefficients
startCoeffs = c(1, 1)
optimCoeffs = optim(par = startCoeffs, fn = LinearLogError)$par
# Results.
lmCoeffs
optimCoeffs
结果是
> lmCoeffs
(Intercept) x
316.1983535 0.1405155
> optimCoeffs
[1] -237.0579080 0.1437663
所以我的问题是我是否正确理解了解决方案 - 即我的数学是否正确?如果是,那么我需要在 R 中做什么才能看到与lmCoeffs 类似的结果?不是,我不明白什么以及为我的问题找到合适的系数估计值的正确方法是什么?
*已编辑:更正了我的代码中的一个错字。
【问题讨论】:
标签: r statistics least-squares nonlinear-optimization