Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, is already up and running.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: Slow -rolling- regressions on panel data

From   Richard Herron <>
Subject   st: Slow -rolling- regressions on panel data
Date   Mon, 26 Sep 2011 10:37:35 -0400

I am using -rolling- for rolling regressions on panel data, but it is
exceedingly slow. I found a Statalist thread
( with a
more manual solution, but it is equally slow (both are too slow to run
to completion in a reasonable amount of time).

Is -regress- the bottleneck? I only want the AR(1) coefficient; is
there a different approach I should take? Are rolling
regressions/calculations best done in different software?


* ----- begin code -----
* generate data
set obs 250000
egen firm = seq(), from(1) to(2500) block(100)
egen date = seq(), from(1) to(100)
generate eps = 1 + rnormal()
sort firm date
tsset firm date

* generate variables for rolling regressions
bysort firm (date): generate l_eps = eps[_n - 1]
label variable l_eps "One-Quarter Lagged EPS"
bysort firm (date): generate end = _n
label variable end "Firm-Quarter (for rolling regressions)"

* the simple approach is very slow
rolling _b, window(16) clear: regress eps l_eps, noconstant

* and the approach from an old Statalist thread is
equally slow
tempfile tempfile_rr
egen level_firm = group(firm)
summarize level_firm, meanonly
forvalues l = 1/`r(max)' {
   rolling if level_firm == `l'
       , window(16) keep(firm) ///
       saving(`tempfile_rr', replace) nodots ///
       : regress eps l_eps, noconstant
   merge 1:1 firm end using "`tempfile_rr'" ///
       , update replace nogenerate keepusing(firm end _b_l_eps)
label variable _b_l_eps "Earnings Persistence"
* ----- end code -----
*   For searches and help try:

© Copyright 1996–2015 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index