具有乘法误差的线性模型的匹配 lm 和优化系数估计
Matching lm and optim coefficient estimates for linear model with multiplicative error
这个问题是数学和编程的结合,但我猜解决方案是在编程方面。
假设我有一个带有乘法误差的线性模型。
我想估计 R 中的系数 a 和 b。我在最佳答案中找到了解决方案 here and the proof seems to make sense. I've also found out how to do OLS with heteroskedasticity-robust standard errors here。我对两种资源结果的解释是,plain-Jane OLS 和 heteroskedastically-robust OLS 中系数的估计值保持不变,但 t-值、F-值和标准误差会有所不同。但是,我不关心那些,只关心系数的估计。似乎可以得出结论,如果我要记录原始方程
然后通过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
相似的结果?不,我不明白什么?为我的问题找到合适的系数估计的正确方法是什么?
*已编辑:更正了我的代码中的拼写错误。
您正在优化不同的最小二乘法,因此没有理由假设它们应该给您相同的系数。
所以引用你的第一个post:
It's easy to verify now that , the thing in square brackets,
conditional on , has mean zero and variance (+)22. So,
this multiplicative errors model is just a cleverly disguised linear
model with heteroskedasticity.
这意味着假设同方差性(等方差)的正态线性回归不成立。您拥有的第二个 post,它显示了另一种测试系数在 运行 正常线性回归后不为零的方法。
如果您实际上需要的是对系数的良好估计,则需要 运行 linear regression for unequal variances。这绝对不是你在优化函数中所拥有的,因为你不需要除以 yhat 而且我不太确定你如何确保 log(ax + b) 是积极的。
您可以尝试 R 中的 gls
函数,同时指定方差结构,如上面的引述 (ax^2 + b) 所示:
library(nlme)
vf <-varConstPower(form =~ inc)
fit<-gls(sav ~ inc,weights = vf, data = saving)
fit
Generalized least squares fit by REML
Model: sav ~ inc
Data: saving
Log-restricted-likelihood: -641.6587
Coefficients:
(Intercept) inc
177.8608409 0.1557556
这个问题是数学和编程的结合,但我猜解决方案是在编程方面。
假设我有一个带有乘法误差的线性模型。
我想估计 R 中的系数 a 和 b。我在最佳答案中找到了解决方案 here and the proof seems to make sense. I've also found out how to do OLS with heteroskedasticity-robust standard errors here。我对两种资源结果的解释是,plain-Jane OLS 和 heteroskedastically-robust OLS 中系数的估计值保持不变,但 t-值、F-值和标准误差会有所不同。但是,我不关心那些,只关心系数的估计。似乎可以得出结论,如果我要记录原始方程
然后通过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
相似的结果?不,我不明白什么?为我的问题找到合适的系数估计的正确方法是什么?
*已编辑:更正了我的代码中的拼写错误。
您正在优化不同的最小二乘法,因此没有理由假设它们应该给您相同的系数。
所以引用你的第一个post:
It's easy to verify now that , the thing in square brackets, conditional on , has mean zero and variance (+)22. So, this multiplicative errors model is just a cleverly disguised linear model with heteroskedasticity.
这意味着假设同方差性(等方差)的正态线性回归不成立。您拥有的第二个 post,它显示了另一种测试系数在 运行 正常线性回归后不为零的方法。
如果您实际上需要的是对系数的良好估计,则需要 运行 linear regression for unequal variances。这绝对不是你在优化函数中所拥有的,因为你不需要除以 yhat 而且我不太确定你如何确保 log(ax + b) 是积极的。
您可以尝试 R 中的 gls
函数,同时指定方差结构,如上面的引述 (ax^2 + b) 所示:
library(nlme)
vf <-varConstPower(form =~ inc)
fit<-gls(sav ~ inc,weights = vf, data = saving)
fit
Generalized least squares fit by REML
Model: sav ~ inc
Data: saving
Log-restricted-likelihood: -641.6587
Coefficients:
(Intercept) inc
177.8608409 0.1557556