【问题标题】:Heteroskedastic consistent covariance matrix with univariate regression [R]具有单变量回归的异方差一致协方差矩阵 [R]
【发布时间】:2011-08-15 04:16:11
【问题描述】:

如何计算单变量回归(即具有一个回归量且没有截距的 OLS 回归)的异方差一致协方差矩阵 (HCCM)?

背景故事:我有一个固定效应面板回归,但只有一个回归量。所以我可以用最小二乘虚拟变量(LSDV)方法来做到这一点

lm.ser.yr <- lm(realwage ~ placebo.ser + factor(incyear) + 0, data = cps)

或者我可以在年级水平上贬低 LHS 并退步

cps <- ddply(cps, .(incyear), transform, realwage.dm.yr = realwage - mean(realwage))
lm.ser.yr <- lm(realwage.dm.yr ~ placebo.ser + 0, data = cps)

但两者都有问题。

  • 使用 LSDV 方法和足够的假人,lm 对象变得巨大(每个 1 GB)。这主要是因为我必须保持较大的qr 矩阵将其传递给vcovHC() 以计算HCCM,该矩阵经常因“无法分配大小向量”错误而停止(或进行大量分页)。

  • 使用贬低的内部估计器,一切正常,但我无法计算 HCCM,因为 vcovHC()hccm() 都没有处理无拦截单变量 lm 对象(即,它吐回 @987654329 @,据我所知,这是因为没有截距和虚拟变量,我的残差离零均值更远)。

如果不积极管理内存和/或迁移到云端,是否有解决方案?

【问题讨论】:

  • 可能属于 math.overflow.com
  • @duffymo -- 可能。我认为这是一个计量经济学/计算问题,我想在这里看到更多。

标签: r


【解决方案1】:

plm 包中的vcovHC() 似乎可以很好地处理lm() 模型而没有拦截:

library(plm)
df <- data.frame('a'=rnorm(1000), 'b'=rnorm(1000))
mod <- lm(a ~ b -1, df)
vcovHC(mod)

编辑:这里有一些手动计算它们的代码。

library(Matrix)
e2 = mod$residuals ^ 2
X = model.matrix(mod)
N = nrow(X)
bread = solve(crossprod(X))
I <- Matrix(data=0, ncol=N, nrow=N, sparse=TRUE)
diag(I) <- e2
salami <- t(X) %*% I %*% X 
V = bread %*% salami %*% bread

【讨论】:

  • @Vincent -- 非常感谢!我曾修改过plm,但对所有设置有点不知所措……我完全忘记了他们有自己的vcovHC()。谢谢!
  • @Vincent -- 我自欺欺人了。我没有查看所有结果并错过了两个失败的结果——所以这不是一个真正的“单变量”问题,一定是我的模型残差太大而无法正确解决(我猜这里mod 必须是 plm 才能调用 vcovHC.plm)。我会深入研究sandwich,看看我能找到什么。
  • 您是否尝试过手动计算白色错误?这样你就会看到它失败的地方。实现起来真的很简单,不妨试试。
  • 当我运行你的代码时,我得到这个错误:Error in array(0, c(n, p)) : 'dim' specifies too large an array
  • 我不应该这么晚写代码。这是一个工作版本。如果你真的只是在做一个双变量回归,你需要大量的观察来对抗内存限制。无论如何,我还使用稀疏矩阵来最小化该单位矩阵运算的内存使用量。所以这也能有所帮助。
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2013-02-01
相关资源
最近更新 更多