[R] Moving window regressions - how can I improve this code?

Warnes, Gregory R gregory_r_warnes at groton.pfizer.com
Tue Apr 27 01:03:08 CEST 2004


movingWindow can be made even simpler when using the running() with recent
versions of the gregmisc library:


movingWindow <- function(formula, data, width, ...)
  {
    index <- 1:nrow(data)
    running(index, fun=function(st) summary(lm(formula, data[st,])),
width=width)
  }

this returns a *matrix* with one row per element of summary.  To get the
coefficients, do

movingWindow( weight ~ height, women, 5)["coefficients",]

-Greg


> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of Gabor 
> Grothendieck
> Sent: Sunday, April 25, 2004 10:07 AM
> To: r-help at stat.math.ethz.ch
> Subject: Re: [R] Moving window regressions - how can I improve this
> code?
> 
> 
> Gabor Grothendieck <ggrothendieck <at> myway.com> writes:
>  
> > movingWindow <- function(formula, data, width, ...) {
> >     nr <- nrow(data)
> >     width <- as.integer(width)[1]
> >     stopifnot( width > 0, width <= nr )
> >     indices <- as.data.frame( t( embed( 1:nr, width ) ) )
> >     lapply(indices, function(st) summary(lm(formula, data[st,])) )
> > }
> > 
> 
> Just one further simplification using apply instead of lapply to
> eliminate having to transform embed:
> 
> movingWindow <- function(formula, data, width, ...) {
>     nr <- nrow(data)
>     width <- as.integer(width)[1]
>     stopifnot( width > 0, width <= nr )
>     apply( embed(1:nr, width), 1, # rows are indices of 
> successive windows
> 		function(st) summary(lm(formula, data[st,])) )
> }
> 
> This could also be used in movingWindow2, as well.
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 


LEGAL NOTICE\ Unless expressly stated otherwise, this messag...{{dropped}}




More information about the R-help mailing list