Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Slow -rolling- regressions on panel data
From
Austin Nichols <[email protected]>
To
[email protected]
Subject
Re: st: Slow -rolling- regressions on panel data
Date
Mon, 26 Sep 2011 10:49:09 -0400
Richard Herron <[email protected]>:
Did you read the recent thread including
http://www.stata.com/statalist/archive/2011-09/msg00855.html
?
On Mon, Sep 26, 2011 at 10:37 AM, Richard Herron
<[email protected]> wrote:
> I am using -rolling- for rolling regressions on panel data, but it is
> exceedingly slow. I found a Statalist thread
> (http://www.stata.com/statalist/archive/2009-09/msg01239.html) 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?
>
> Thanks!
>
> * ----- begin code -----
> * generate data
> clear
> 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
> http://www.stata.com/statalist/archive/2009-09/msg01239.html) 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:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/