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 at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: RE: Rolling Means and Standard Deviations


From   Richard Herron <richard.c.herron@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: RE: Rolling Means and Standard Deviations
Date   Thu, 1 Dec 2011 20:57:15 -0500

@David -- Did you try my code? Also check out -mvsumm-, as Nick suggests.

If you reshape to a proper panel you will find these options much
faster than -rolling- (I wrestled this when I switched from R to Stata
about two months ago). If you can do the operation with summations and
differences, then rolling operations can be done _very quickly_.
(Also, I changed my variance calc to divide by n-1 instead of n).

If you prefer to stick with -rolling- my code below works.

* my program
capture program drop rolling_mean_sd
program rolling_mean_sd
    version 11.2
    syntax varlist(numeric min=1 max=1), window(real)

    * get dependent and indpendent vars from varlist
    tempvar x x2 xs x2s
    tokenize "`varlist'"
    generate `x' = `1'
    local w = `window'

    * generate sums
    generate `x2' = `x' * `x'
    generate `xs' = sum(`x')
    generate `x2s' = sum(`x2')

    * generate mean, variance, and sd
    generate meanx = s`w'.`xs' / `w'
    generate sdx = sqrt((s`w'.`x2s' - s`w'.`xs' * s`w'.`xs' / `w') ///
        / (`w' - 1))

end

* get data
use http://www.stata-press.com/data/r11/ibm,clear
tsset t
generate ibmadj = ibm - irx
generate spxadj = spx - irx

* call my program
rolling_mean_sd ibmadj, window(200)
list in -10/l

* call rolling
rolling sd = r(sd) mean = r(mean), window(200) nodots clear ///
    : summarize ibmadj
list in -10/l

On Wed, Nov 30, 2011 at 07:50, Nick Cox <n.j.cox@durham.ac.uk> wrote:
> You do not define "not working".
>
> But why not check out -mvsumm- (SSC) instead as recommended very recently by Kit Baum?
>
> Nick
> n.j.cox@durham.ac.uk
>
> David Ashcraft
>
> I am trying to find the rolling mean and standard deviation. I know that I can use -rolling- command but somehow lost my track. Please see the example below:
>
> use http://www.stata-press.com/data/r11/ibm
> tsset t
> generate ibmadj = ibm - irx
> generate spxadj = spx - irx
>
> now I want to generate means and standard deviation of both ibmadj and spxadj with window of 200 days. I looked in the Stata manual, it mentioned about the command. I believe, I should do the following:
>
> rolling  _sd, window(200) saving(means, replace) keep(date): gen sd=r(sd)
> rolling  _mean, window(200) saving(means, append) keep(date): gen mean=r(mean)
>
>
> But this is not working. Any help will be greatly appreciated.
>
> *
> *   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/

*
*   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/


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