[R] Search for best ARIMA model

Spencer Graves spencer.graves at pdf.com
Sat Sep 2 23:32:24 CEST 2006


      I just got 166 hits from RSiteSearch("best fit arima") and 86 from 
RSiteSearch("best fit arima").  Have you tried that? 

      If that does not get you what you want, I might try 'expand.grid' 
plus some hand massage if necessary to create the list of alternative 
models I wanted to consider.  Then I might add a column "AIC" of NAs to 
that using "cbind" to create a data.frame with all the alternatives with 
the result.  Then I might start with something like "fit0 <- arima(lh, 
order = c(0,0,0))" and use 'update(fit0, order=...)' to evaluate each 
one, storing only the AIC.  Then 'which(aic==max(aic))' would identify 
the best fitting alternative(s).  If you haven't already, I suggest you 
review Venables and Ripley (2002) Modern Applied Statistics with S, 4th 
ed. (Springer) on 'expand.grid', 'cbind', and 'update';  if you don't 
already have this book, I highly recommend it. 

      Hope this helps. 
      Spencer Graves

Schweitzer, Markus wrote:
> Hello,
>
> I have a several time series, which I would like to check for their best
> fitted Arima model (I am checking for the lowest aic value).
> Which lets me raise two questions:
>
> 1) is there are more efficient way, than using 6 for-loops?
> 2) sometimes the system cannot calculate  with given parameters - is
> there a more efficient solution than I found?
>
> I hope, you can help me to make this calculation quicker since I have to
> run this function 450 times...
> Thank you very much in advance,
>
> Markus
>
>
> arima.estim <- function(TS) {
> 	best.model <- arima(TS, order = c(1, 0, 0), seasonal =
> list(order = c(0, 0, 0), period = frequency(TS)) )
>
> # Start value
> # I continue with brute force- p, q, r, s are nested from 0 to 3 and i
> and j are nested from 0 to 2. p and  q are not both allowed to be 0.
>
> for (p in 0:3){
>   for( q in 0:3){
>     if(p==0 && q==0) {}
>       else {
>         for(r in 0:3) {
>           for(s in 0:3) {
>             for (j in 0:2) {
>               for(i in 0:2) {
>       
> # test, if series works
>     if(inherits(try(arima(TS, order = c(p, i, q), seasonal = list(order
> = c(r,  j, s), period = frequency(TS)) ), TRUE), 'try-error')){
>         
> 	print(c(p,i,q))} #shows, which parameters didn't work -> will be
> removed by
>        
> 	 else    {
> 	         tmp <- arima(TS, order = c(p, i, q), seasonal =
> list(order = c(r,  j, s), period = frequency(TS)))     # calculate again
> :(
>
>           if(best.model$aic > tmp$aic)
>           {
>                   best.model <- tmp
>           }
>               }
>                  }
>                  }    
>                  }
>                  } } } } 
>                  
>                  best.model}
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list