Outier detection using tsoutlier in R
I am trying to predict the weekly stock price of Nifty using ARIMA model. Data can be downloaded here. I tried the following three cases:
First Case: I used tso function from tsoutliers package to identify outliers (if any) and to fit ARIMA model. I got the results as ARIMA(1,1,1) with no outliers detected. Minimal code:
outliers1 <- tso(close, tsmethod = c("auto.arima"), args.tsmethod = list(allowdrift=TRUE))
ARIMA(1,1,1) Coefficients: ar1 ma1 0.6112 -0.5684 s.e. 0.3496 0.3632 sigma^2 estimated as 25268: log likelihood=-2523.68 AIC=5053.35 AICc=5053.41 BIC=5065.24 No outliers were detected.
Second Case: Since there were no outliers detected, I used auto.arima() from forecast package to see what model I get. As suggested in previous posts, I made stepwise and approximation to FALSE. I obtained ARIMA (3,1,2) model. Minimal code:
close <- read.ts("close.csv", header = FALSE") fit <- auto.arima(close, stepwise = FALSE, trace = TRUE, approximation = FALSE)
Series: close ARIMA(3,1,2) with drift Coefficients: ar1 ar2 ar3 ma1 ma2 drift -1.7302 -0.7838 0.0624 1.7730 0.9097 10.4769 s.e. 0.0695 0.1125 0.0578 0.0483 0.0475 8.4509 sigma^2 estimated as 24413: log likelihood=-2510.18 AIC=5034.37 AICc=5034.66 BIC=5062.11
Third Case: In my third case, I tried using ARIMA(3,1,2) obtained in second case in tso to check for any outliers. But the model detected no outliers. Minimal code:
outlier2 <- tso(close, maxit = 10, tsmethod = c("arima"), args.tsmethod = list(order =c(3,1,2)))
Coefficients: ar1 ar2 ar3 ma1 ma2 -0.2224 0.3573 -0.0186 0.2451 -0.2548 s.e. 0.7914 0.4344 0.1107 0.7884 0.4603 sigma^2 estimated as 24986: log likelihood = -2521.51, aic = 5055.02 No outliers were detected.
My question is if there aren't any outliers in the data then why are the results different in cases 1 and 2. Is there something I am missing out in the model building? In addition, the forecasts obtained using both ARIMA (3,1,2) and (1,1,1) are poor.
In the first case tso is using the default argument stepwise=TRUE. In the second case you are setting stepwise=FALSE. This can lead to a different choice of the ARIMA model. Passing stepwise=FALSE through argument args.tsmethod in tso should yield the same result (unless outliers are found for this model).