Reference book: R in Action
For further study, the following books are recommended:
library(forecast)
观测值: Yt = level + irregulart
fitANN=ets(nhtemp, model = "ANN")
fitANN
## ETS(A,N,N)
##
## Call:
## ets(y = nhtemp, model = "ANN")
##
## Smoothing parameters:
## alpha = 0.182
##
## Initial states:
## l = 50.2759
##
## sigma: 1.1263
##
## AIC AICc BIC
## 265.9298 266.3584 272.2129
预测值(1-step ahead forecast): Yt+1 = \(\sum_0^t\){ci*Yt-i}
其中 ci = \(\alpha * (1 - \alpha)^i\); \(0 \leq \alpha \leq 1\); \(\sum_0^t{c_i} = 1\)
forecast(fitANN, 1)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 1972 51.87045 50.42708 53.31382 49.66301 54.0779
时序值, 预测值, 预测区间
accuracy(fitANN)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.1460295 1.126268 0.8951331 0.2418693 1.748922 0.7512497
## ACF1
## Training set -0.00653111
准确性度量
观测值: Yt = level + slope * t + irregulart
fitAAN=ets(nhtemp, model = "AAN")
观测值: Yt = level + slope * t + st + irregulart
fitAAA=ets(log(AirPassengers), model = "AAA")
fitAAA
## ETS(A,A,A)
##
## Call:
## ets(y = log(AirPassengers), model = "AAA")
##
## Smoothing parameters:
## alpha = 0.6534
## beta = 1e-04
## gamma = 1e-04
##
## Initial states:
## l = 4.8022
## b = 0.01
## s=-0.1047 -0.2186 -0.0761 0.0636 0.2083 0.217
## 0.1145 -0.011 -0.0111 0.0196 -0.1111 -0.0905
##
## sigma: 0.0359
##
## AIC AICc BIC
## -208.3619 -203.5047 -157.8750
用原始尺度预测
pred=forecast(fitAAA, 5) ##预测未来5个月
p=cbind(exp(pred$mean), exp(pred$lower), exp(pred$upper))
colnames(p)=c("mean", "Lo 80", "Lo 95", "Hi 80", "Hi 95")
p
## mean Lo 80 Lo 95 Hi 80 Hi 95
## Jan 1961 447.4958 427.3626 417.0741 468.5774 480.1365
## Feb 1961 442.7926 419.1001 407.0756 467.8245 481.6434
## Mar 1961 509.6958 478.7268 463.1019 542.6682 560.9776
## Apr 1961 499.2613 465.7258 448.8949 535.2116 555.2788
## May 1961 504.3514 467.5503 449.1688 544.0491 566.3135
!!要求序列具有平稳性
常用变换: 对数变换, Box-Cox变换
library(forecast)
ndiffs(ts) # Find the optimal d
dts=diff(ts, differences = d) # 对序列进行差分
Acf(dts) # 绘制ACF图
Pacf(dts) # 绘制PACF图
| 模型 | ACF自相关 | PACF偏自相关 |
|---|---|---|
| ARIMA(p, d, 0) | 逐渐减小到零 | p阶后减小到零 |
| ARIMA(0, d, q) | q阶后减小到零 | 逐渐减小到零 |
| ARIMA(p, d, q) | 逐渐减小到零 | 逐渐减小到零 |
library(forecast)
library(tseries)
plot(Nile) # 方差稳定但存在趋势项
ndiffs(Nile)
## [1] 1
dNile=diff(Nile) # 一次差分
plot(dNile)
adf.test(dNile)
##
## Augmented Dickey-Fuller Test
##
## data: dNile
## Dickey-Fuller = -6.5924, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Acf(dNile)
Pacf(dNile)
由上两图可知, q取1, p取0
fit=arima(Nile, order=c(0, 1, 1))
fit
##
## Call:
## arima(x = Nile, order = c(0, 1, 1))
##
## Coefficients:
## ma1
## -0.7329
## s.e. 0.1143
##
## sigma^2 estimated as 20600: log likelihood = -632.55, aic = 1269.09
accuracy(fit) # 准确性度量
## ME RMSE MAE MPE MAPE MASE
## Training set -11.9358 142.8071 112.1752 -3.574702 12.93594 0.841824
## ACF1
## Training set 0.1153593
qqnorm(fit$residuals)
qqline(fit$residuals) # Q-Q Plot
Box.test(fit$residuals, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: fit$residuals
## X-squared = 1.3711, df = 1, p-value = 0.2416
p-value不显著, 故认为残差的自相关系数为0
forecast(fit, 3) # 预测后三个月
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 1971 798.3673 614.4307 982.3040 517.0605 1079.674
## 1972 798.3673 607.9845 988.7502 507.2019 1089.533
## 1973 798.3673 601.7495 994.9851 497.6663 1099.068
plot(forecast(fit, 3), xlab="Year", ylab="Annual Flow")