[R] arima crashes too
    Alberto Monteiro 
    albmont at centroin.com.br
       
    Fri Oct 23 18:09:47 CEST 2009
    
    
  
Barry Rowlingson wrote:
> 
>  If you're doing anything in a loop that has the potential to fail
> because of singularities or other conditions when your model can't be
> fitted, you need to stick what you are doing in a 'try' clause. This
> lets you trap errors and do something with them.
> 
>  Plenty of examples in help(try) or this from me:
> 
>  for(i in 1:10){
>  print(solve(matrix(c(3,3,3,i),2,2)))
>  }
> 
>  This stops the loop at i=3. Now stick it in a try() clause:
> 
>  for(i in 1:10){
>  print(try(solve(matrix(c(3,3,3,i),2,2))))
>  }
> 
>  and it gives a warning and carries on. If you want your code to do
> something with the failure cases then the help for try() tells you
> what to look for.
> 
I will try try.  # irreristible pun
But...
>  I'm not sure why your arima produces an error, but I'm assuming the
> numbers are such that the model can't be fitted. I don't really know
> what arima is doing.
> 
That's a problem. In this case, I'm fitting an AR(1) time series 
using arima and arma. The documentation does not mention that we 
should  be careful about what numbers are passed to it; on contrary, 
it's perfectly possible (in theory) that an AR(1) time series was
created using an "evil" phi in 
x[i+1] <- phi * x[i] + sigma * n01[i]
and the regression should return the "evil" phi.
As in this reproducible example:
phi <- 1.5
sigma <- 0.5
n01 <- c(-1, 0.3, -0.3, 0.2, -0.7)
x <- rep(0, 6)
for (i in 1:5) x[i+1] <- phi * x[i] + sigma * n01[i]
arma(x, order=c(1,0))
arima(x, order=c(1,0,0))
It seems like arma does not force phi to be in the -1:1 range, because
it correctly returns "evil" phi's, but arima kind of bayesianises
the output, forcing the time series to be stationary.
Probably a longer example may <s>crash</s> stop arima but not arma.
Non-reproducible example (almost surely <s>crashes</s> stops arima but
plays safely in arma):
phi <- 1.05
sigma <- 0.5
n <- 100
n01 <- rnorm(n)
x <- rep(0, n)
for (i in 1:n) x[i+1] <- phi * x[i] + sigma * n01[i]
arma(x, order=c(1,0))
arima(x, order=c(1,0,0))
Increasing phi (or n) will <s>crash</s> stop both arma and arima:
phi <- 1.1
sigma <- 0.5
n <- 100
n01 <- rnorm(n)
x <- rep(0, n)
for (i in 1:n) x[i+1] <- phi * x[i] + sigma * n01[i]
arma(x, order=c(1,0))
arima(x, order=c(1,0,0))
Alberto 'Darth Albmont' Monteiro
    
    
More information about the R-help
mailing list