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 ______________________________________________ R-help@r-project.org 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.