Pregunta

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 :-(

¿Fue útil?

Solución

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

Otros consejos

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top