【问题标题】:Estimate multiple Regression Models for groups and save a certain parameter value为组估计多个回归模型并保存某个参数值
【发布时间】:2013-01-17 12:38:09
【问题描述】:

我正在寻找一种方法来估计各种模型(比如说 10 个)并将每个估计中的某个参数值保存在带有 stata 的向量中。

我更像是一个 R 人,这里是一个非常简单的 R 代码工作示例

n1 <- 100
n2 <- 10
group <- rep(1:10,each=n1)
data <- as.data.frame(cbind(rnorm(n1*n2,0,1),rnorm(n1*n2,0,1),group))
dimnames(data)[[2]] <- c("y","x","group")
val <- names(table(group))
estimates <- vector(mode="numeric",length=length(val))

for( i in 1:length(val)){
j <- which(data$group==val[i])
estimates[i] <- coef(lm(y[j] ~ x[j], data=data))[2]
}

或者

library(nlme)
mod1 <- lmList(y~x | group, data=data)
coef(mod1)[,2]

是的,不幸的是我需要使用 stata :-(

【问题讨论】:

  • statsby 是正确的方法吗?
  • 您的问题好像是针对精通 R 和 Stata 的人提出的,以便他们能够理解 R 代码并立即转换为 Stata 等价物。此外,不建议您对 Stata 进行个人挖掘,无论其意图多么幽默。一个更好的策略是显示你到目前为止的 Stata 代码,以便 Stata 人员可以快速看到你正在尝试做什么。但是是的:如果您的模型分别适合不同的子集,那么statsby 是整理参数估计的好方法。
  • 我无意唠叨某人。但我假设如果我发布洞 R 代码作为示例,逻辑响应将是“你为什么不在 R 中做呢?”我发布 R 代码的原因是我想提供一些示例。

标签: r loops regression stata estimation


【解决方案1】:

你的最终目标是什么? Stata 和 R 的范式不同,因此了解最终目标会有所帮助。在 R 中,我倾向于用向量来思考,但在 Stata 中却没有(向量在 Stata 中并不真正存在)。如果您想要一张桌子,那么我建议您使用来自 SSC (ssc install estout) 的 estout 包。如果只是想以系数本身为目的,那么我建议statsby

clear
version 11.2
set seed 2001

* generate your data
set obs 1000
generate y = rnormal()
generate x = rnormal()
generate group = 1 + floor((_n - 1) / 100)

* if you want a table
* you'll need the estout package from SSC (ssc install estout)
eststo clear
forvalues i = 1/10 {
    eststo : regress y x if (group == `i')
}
esttab

* if you just the coefficients
statsby, by(group) clear : regress y x
list

esttabstatsby 都有很多选项,请查看帮助文件。


更新:您似乎想要按组(这里是公司)进行时间序列测试。在经济学方面,我认为您会想要滚动回归,但这个框架应该可以帮助您入门。

clear
version 11.2
set seed 2001

* generate your data
set obs 1000
generate y = rnormal()
generate x = rnormal()
generate firm = 1 + floor((_n - 1) / 100)
generate year = 1 + mod((_n - 1), 100)

* regress by firm
xtset firm year
statsby _b, by(firm) saving(temp, replace) : regress y x

* then merge back
merge m:1 firm using temp
list in 1/20

【讨论】:

  • 嗨。我的最终目标是在变量 x 上回归变量 y。然后我想重复这个过程,因为我的数据中有组。随后,这个计算的斜率估计应该存储在某个地方,以便我可以访问它们以执行额外的回归。该回归将是变量的合并版本,然后将回归到从先前回归中获得的该系数。我挣扎的原因是我在 R 中做得相当好,但根本不能“说”stata。我已经注意到范式非常不同
  • 这支持Richard Herron和我自己的建议:尤其是statsby
  • 我做到了,但如果我尝试这个statsby "xtreg y x" _b[x], by(group) clear 以某种方式将值保存在新数据集中,它不会返回值。
  • @Druss2k 是什么定义了您在xtreg 的个人和时间?这种技术有名称或参考吗?
  • 我没有使用过xtgls,但它在面板上确实可行 GLS。使用statsby,您不再有面板——您正在运行单独的时间序列回归。在金融领域,我看到 Newey-West 标准错误或聚类的频率比看到 FGLS 的频率高。
【解决方案2】:

这需要一个多级模型,其中 1 级回归是您的公司级回归,2 级回归是解释组斜率之间可变性的回归。您正在做的事情过于繁琐,无论如何都不会给您正确的标准错误。这通过gllamm 最清楚地实现了,尽管您也可以扭转xtmixed 的手来做到这一点。

【讨论】:

  • 非常正确。唯一的问题是我的大学有点固执。我也不赞成我之前描述的方法。
  • @Druss2k 您描述的方法在金融领域非常常见(以及横截面回归系数的时间序列平均值)。第一阶段的beta估计不一定会影响第二阶段吧?如果你的 beta 估计误差是白噪声,那么你就有一个变量误差问题,这会降低你的第二阶段系数,但这是不可避免的。
  • 但如果我选择一种方法,我猜我也会选择与混合效果建模相关的东西。我不太明白为什么有人会在这个特定的例子中选择不同的东西。老实说,我不太确定第二阶段将如何影响第一阶段,因为(我之前没有提到过)我们从中选择 beta 系数的自变量。第二阶段的因变量是第一阶段的因变量。这可能会导致某种与内生性相关的偏见。
  • Richard,通过同时估计所有内容,您既可以避免衰减偏差,又可以得到正确的标准误差。如果财务人员不这样做,那我就无能为力了。至少,生成的回归器的标准误差校正已经出现了四分之一个世纪,请参阅jstor.org/stable/1391724
  • 感谢您的链接,@StasK。我会检查一下。等到你发现 Fama 和 MacBeth (1973) 回归。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
相关资源
最近更新 更多