문제

I looking for a way to estimate various models (lets say 10) and save a certain parameter value from each estimation in a vector with stata.

Im more of a R-guy and here it is very simple working example with R-code

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]
}

Alternatively

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

And yes, unfortunately I need to use stata :-(

도움이 되었습니까?

해결책

What is you ultimate objective? The paradigms of Stata and R are different, so knowing the ultimate goal would help. In R I tend to think in terms of vectors, but not in Stata (vectors don't really exist in Stata). If you want a table, then I suggest the estout package from SSC (ssc install estout). If just want the coefficients as an end in themselves, then I suggest 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

Both esttab and statsby have lots of options, so check out the help files.


Update: It seems you want time series betas by group (here a firm). In terms of economics I think you would want rolling regressions, but this framework should get you started.

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

다른 팁

This calls for a multilevel model in which level-1 regression is your firm-level regression, and level-2 regression is the regression explaining variability between the group slopes. What you are doing is overly cumbersome, and would not give you the right standard errors, anyway. This most clearly implemented via gllamm, although you can probably twist the hands of xtmixed to do that, too.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top