估计组的多个回归模型并保存特定参数值

时间:2013-01-17 12:38:09

标签: r loops regression stata estimation

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

我更像是一个R-guy,这里是一个非常简单的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: - (

2 个答案:

答案 0 :(得分:3)

你最终的目标是什么? Stata和R的范例是不同的,因此了解最终目标会有所帮助。在R中我倾向于用向量来思考,而不是在Stata中思考(向量并不存在于Stata中)。如果你想要一个表,那么我建议来自SSC的estout包(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

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

答案 1 :(得分:1)

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