我正在寻找一种估算各种模型的方法(比方说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: - (
答案 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
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
答案 1 :(得分:1)
这需要一个多级模型,其中一级回归是你的公司级回归,而二级回归是解释组斜率之间变异性的回归。无论如何,你正在做的事情过于繁琐,并且不会给你正确的标准错误。这最清楚地通过gllamm
实现,尽管你也可以扭转xtmixed
的手来做这件事。