0

我正在寻找一种方法来估计各种模型(假设是 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 :-(

4

2 回答 2

3

你的最终目标是什么?Stata 和 R 的范式不同,因此了解最终目标会有所帮助。在 RI 中倾向于考虑向量,但不在 Stata 中(向量在 Stata 中并不真正存在)。如果您想要一张桌子,那么我建议您使用estoutSSC ( ssc install 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

两者esttab都有statsby很多选项,因此请查看帮助文件。


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

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
于 2013-01-17T20:38:49.807 回答
1

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

于 2013-01-18T12:47:13.470 回答