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: RE: Rolling Means and Standard Deviations
From
Richard Herron <[email protected]>
To
[email protected]
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 <[email protected]> wrote:
> You do not define "not working".
>
> But why not check out -mvsumm- (SSC) instead as recommended very recently by Kit Baum?
>
> Nick
> [email protected]
>
> 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/