R - 参数估计和标准误差的差异 - ivreg、tsls 和 gmm 与 HAC
R - Differences in parameter estimates and standard errors - ivreg, tsls and gmm with HAC
我有两个密切相关的问题:
1. ivreg 和 tsls/gmm 似乎产生不同的参数估计:
require(AER)
data("CigarettesSW", package = "AER")
CigarettesSW$rprice <- with(CigarettesSW, price/cpi)
CigarettesSW$rincome <- with(CigarettesSW, income/population/cpi)
CigarettesSW$tdiff <- with(CigarettesSW, (taxs - tax)/cpi)
## model
ivreg1 <- ivreg(log(packs) ~ log(rprice) + log(rincome)
| 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW)
require(gmm)
tsls1 <- tsls(log(packs) ~ log(rprice) + log(rincome),
~ 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW)
gmm1 <- gmm(log(packs) ~ log(rprice) + log(rincome),
~ 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW,vcov="iid", method="2step")
xHat <- lm(log(rprice) ~ log(rincome)+ tdiff + I(tax/cpi),
data = CigarettesSW)$fitted.values
manual2sls = lm(log(packs) ~ xHat + log(rincome) , data = CigarettesSW)
print("iid:")
print(summary(manual2sls)$coef[,1])
print(summary(ivreg1)$coef[,1:2])
print(summary(tsls1)$coef[,1:2])
print(summary(gmm1)$coef[,1:2])
ivreg 和 "manual" 2 阶段 LS 估计产生相同的参数估计("ivreg1" 和 "manual2sls"),
但是 tsls 和 gmm 程序会导致不同的结果("tsls1" 和 "gmm1")。为什么会这样?
您如何确保相同的结果?
能否使用vcovHAC函数计算异方差和自相关一致标准误与ivreg and/or 2sls/gmm?为什么在 gmm 内或之后使用 HAC 的估计标准误差存在差异?
gmmhac <- gmm(log(packs) ~ log(rprice) + log(rincome),
~ 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW,vcov="HAC", method="2step")
print("HAC:")
print(coeftest(ivreg1, vcovHAC(ivreg1))[,1:2])
print(coeftest(tsls1, vcovHAC(tsls1))[,1:2])
try(print(print(coeftest(gmm1, vcovHAC(gmm1))[,1:2])))
print(coeftest(gmmhac)[,1:2])
非常感谢。
查看 gmm
vignette,看起来 gmm
以数字方式找到参数,这是有道理的,因为它用于更一般的情况。因此,gmm
获得的系数可能总是与分析获得的系数略有不同,ivreg
.
就是这种情况。
要获得可靠的标准误差,请使用例如
coeftest(fm, vcov.=vcovHAC(fm))
有关稳健标准误差的不同选项的讨论,请参阅 。
我有两个密切相关的问题: 1. ivreg 和 tsls/gmm 似乎产生不同的参数估计:
require(AER)
data("CigarettesSW", package = "AER")
CigarettesSW$rprice <- with(CigarettesSW, price/cpi)
CigarettesSW$rincome <- with(CigarettesSW, income/population/cpi)
CigarettesSW$tdiff <- with(CigarettesSW, (taxs - tax)/cpi)
## model
ivreg1 <- ivreg(log(packs) ~ log(rprice) + log(rincome)
| 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW)
require(gmm)
tsls1 <- tsls(log(packs) ~ log(rprice) + log(rincome),
~ 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW)
gmm1 <- gmm(log(packs) ~ log(rprice) + log(rincome),
~ 1+ log(rincome) + tdiff + I(tax/cpi),
data = CigarettesSW,vcov="iid", method="2step")
xHat <- lm(log(rprice) ~ log(rincome)+ tdiff + I(tax/cpi),
data = CigarettesSW)$fitted.values
manual2sls = lm(log(packs) ~ xHat + log(rincome) , data = CigarettesSW)
print("iid:")
print(summary(manual2sls)$coef[,1])
print(summary(ivreg1)$coef[,1:2])
print(summary(tsls1)$coef[,1:2])
print(summary(gmm1)$coef[,1:2])
ivreg 和 "manual" 2 阶段 LS 估计产生相同的参数估计("ivreg1" 和 "manual2sls"), 但是 tsls 和 gmm 程序会导致不同的结果("tsls1" 和 "gmm1")。为什么会这样? 您如何确保相同的结果?
能否使用vcovHAC函数计算异方差和自相关一致标准误与ivreg and/or 2sls/gmm?为什么在 gmm 内或之后使用 HAC 的估计标准误差存在差异?
gmmhac <- gmm(log(packs) ~ log(rprice) + log(rincome), ~ 1+ log(rincome) + tdiff + I(tax/cpi), data = CigarettesSW,vcov="HAC", method="2step") print("HAC:") print(coeftest(ivreg1, vcovHAC(ivreg1))[,1:2]) print(coeftest(tsls1, vcovHAC(tsls1))[,1:2]) try(print(print(coeftest(gmm1, vcovHAC(gmm1))[,1:2]))) print(coeftest(gmmhac)[,1:2])
非常感谢。
查看 gmm
vignette,看起来 gmm
以数字方式找到参数,这是有道理的,因为它用于更一般的情况。因此,gmm
获得的系数可能总是与分析获得的系数略有不同,ivreg
.
要获得可靠的标准误差,请使用例如
coeftest(fm, vcov.=vcovHAC(fm))
有关稳健标准误差的不同选项的讨论,请参阅