library("forecast")
library("tseries")
Daily Adjusted Close
data <- read.csv("http://ptrckprry.com/course/forecasting/data/nasdaq.csv")
date <- as.Date(data$date)
time <- seq_along(date)
NASDAQ <- data$nasdaq
log.NASDAQ <- log(NASDAQ)
plot(date, log.NASDAQ, type="l", col=2)
diff.log.NASDAQ <- c(NA, diff(log.NASDAQ))
par(mfrow=c(1,2))
Acf(diff.log.NASDAQ)
Pacf(diff.log.NASDAQ)
d <- 1
# choose p, q with AICc
for (include.constant in c(FALSE, TRUE)) {
for (p in 0:4) {
for (q in 0:4) {
# work-around bug in R by manually differencing
fit <- Arima(diff(log.NASDAQ), c(p,0,q),
include.constant=include.constant, method="ML")
cat("ARIMA",
"(", p, ",", d, ",", q, ")",
"(constant=", include.constant, ")",
" : ", fit$aicc, "\n", sep="")
}
}
}
ARIMA(0,1,0)(constant=FALSE) : -69264.13
ARIMA(0,1,1)(constant=FALSE) : -69296.54
ARIMA(0,1,2)(constant=FALSE) : -69300.3
ARIMA(0,1,3)(constant=FALSE) : -69300.84
ARIMA(0,1,4)(constant=FALSE) : -69302.25
ARIMA(1,1,0)(constant=FALSE) : -69294.94
ARIMA(1,1,1)(constant=FALSE) : -69300.83
ARIMA(1,1,2)(constant=FALSE) : -69298.38
ARIMA(1,1,3)(constant=FALSE) : -69299
ARIMA(1,1,4)(constant=FALSE) : -69300.19
ARIMA(2,1,0)(constant=FALSE) : -69299.5
ARIMA(2,1,1)(constant=FALSE) : -69299.23
ARIMA(2,1,2)(constant=FALSE) : -69296.9
ARIMA(2,1,3)(constant=FALSE) : -69299.31
ARIMA(2,1,4)(constant=FALSE) : -69298.2
ARIMA(3,1,0)(constant=FALSE) : -69301.84
ARIMA(3,1,1)(constant=FALSE) : -69299.67
ARIMA(3,1,2)(constant=FALSE) : -69299.5
ARIMA(3,1,3)(constant=FALSE) : -69322.59
ARIMA(3,1,4)(constant=FALSE) : -69335.59
ARIMA(4,1,0)(constant=FALSE) : -69302.14
ARIMA(4,1,1)(constant=FALSE) : -69300.2
ARIMA(4,1,2)(constant=FALSE) : -69298.18
ARIMA(4,1,3)(constant=FALSE) : -69335.13
ARIMA(4,1,4)(constant=FALSE) : -69335.2
ARIMA(0,1,0)(constant=TRUE) : -69271.5
ARIMA(0,1,1)(constant=TRUE) : -69302.98
ARIMA(0,1,2)(constant=TRUE) : -69307.12
ARIMA(0,1,3)(constant=TRUE) : -69307.42
ARIMA(0,1,4)(constant=TRUE) : -69308.55
ARIMA(1,1,0)(constant=TRUE) : -69301.37
ARIMA(1,1,1)(constant=TRUE) : -69307.61
ARIMA(1,1,2)(constant=TRUE) : -69305.88
ARIMA(1,1,3)(constant=TRUE) : -69305.56
ARIMA(1,1,4)(constant=TRUE) : -69306.48
ARIMA(2,1,0)(constant=TRUE) : -69306.35
ARIMA(2,1,1)(constant=TRUE) : -69305.66
ARIMA(2,1,2)(constant=TRUE) : -69303.65
ARIMA(2,1,3)(constant=TRUE) : -69305.83
ARIMA(2,1,4)(constant=TRUE) : -69304.5
ARIMA(3,1,0)(constant=TRUE) : -69308.36
ARIMA(3,1,1)(constant=TRUE) : -69306.2
ARIMA(3,1,2)(constant=TRUE) : -69306.25
ARIMA(3,1,3)(constant=TRUE) : -69327.82
ARIMA(3,1,4)(constant=TRUE) : -69339.43
ARIMA(4,1,0)(constant=TRUE) : -69308.43
ARIMA(4,1,1)(constant=TRUE) : -69306.49
ARIMA(4,1,2)(constant=TRUE) : -69304.46
ARIMA(4,1,3)(constant=TRUE) : -69337.68
ARIMA(4,1,4)(constant=TRUE) : -69339.37
(fit.mean <- Arima(log.NASDAQ, c(3, 1, 4), include.constant=TRUE, method="ML"))
Series: log.NASDAQ
ARIMA(3,1,4) with drift
Coefficients:
Warning in sqrt(diag(x$var.coef)): NaNs produced
ar1 ar2 ar3 ma1 ma2 ma3 ma4 drift
0.1747 -0.2358 0.9165 -0.1197 0.2185 -0.8887 -0.0377 3e-04
s.e. NaN NaN 0.0244 NaN NaN 0.0271 0.0100 1e-04
sigma^2 estimated as 0.0001514: log likelihood=34678.72
AIC=-69339.45 AICc=-69339.43 BIC=-69273.19
Time Series Plots
resid <- as.numeric(residuals(fit.mean))
plot(date, abs(resid), type="l", col=3)