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")。为什么会这样? 您如何确保相同的结果?

  1. 能否使用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))

有关稳健标准误差的不同选项的讨论,请参阅