install.package(‘forecast’) library(readx) library(forecast) data <- read_xlsx(‘a.xlsx’) ts <- ts(data$sales,frequency=12,start = c(2012,8))
$$ \[\begin{equation}
\begin{split}
&自回归模型:序列中的每一个值都可以由它之前的p个值的线性组合来表示,具体表示为 \\
&AR(p):Y_t = c + \beta_1Y_{t-1}+ \beta_2Y_{t-2}+ ...+ \beta_pY_{t-p} +\varepsilon_t \\
&移动平均模型:时序中的每个值都可以用之前的q个残差的线性组合来表示,具体表示为:\\
&MA(q):Y_t = c + \varepsilon_{t} + \theta_1\varepsilon_{t-1}+ \theta_2\varepsilon_{t-2}+...+ \theta_q\varepsilon_{t-q}\\
&ARMA(p,q):Y_t = \beta_0 + \beta_1Y_{t-1}+ \beta_2Y_{t-2}+ ...+ \beta_1Y_{t-p} +\varepsilon_t -\theta_1\varepsilon_{t-1}+ \theta_1\varepsilon_{t-1}+...+ \theta_1\varepsilon_{t-q} \\
&\\
\end{split}
\end{equation}\] $$
nhtemp
Time Series:
Start = 1912
End = 1971
Frequency = 1
[1] 49.9 52.3 49.4 51.1 49.4 47.9 49.8 50.9 49.3 51.9 50.8 49.6 49.3 50.6 48.4 50.7 50.9 50.6
[19] 51.5 52.8 51.8 51.1 49.8 50.2 50.4 51.6 51.8 50.9 48.8 51.7 51.0 50.6 51.7 51.5 52.1 51.3
[37] 51.0 54.0 51.4 52.7 53.1 54.6 52.0 52.0 50.9 52.6 50.2 52.6 51.6 51.9 50.5 50.9 51.7 51.4
[55] 51.7 50.8 51.9 51.8 51.9 53.0
平稳性检验(单位根) 和 差分变换
$$ \[\begin{equation}
\begin{split}
&平稳就是指序列的统计性质并不会随着时间的推移而改变,例如Y_t的均值和方差都是恒定的。\\
&另外,对任意滞后阶数k,此序列的自相关性不发生改变。\\
&时间序列的平稳性一般可以通过图形来直接判断,观察是否有明显的趋势向和不规则波动项\\
&也可使用单位根(ADF)统计检验来验证平稳性,原假设为该序列存在单位根,如果经过原假设不能被拒绝的话,那么我们就可以认为该序列为非平稳时间序列。\\
&R中的ADF检验可使用tseries包中的adf.test()函数来实现:
\end{split}
\end{equation}\] $$
adf.test(nhtemp)
Augmented Dickey-Fuller Test
data: nhtemp
Dickey-Fuller = -3.2773, Lag order = 3, p-value = 0.08376
alternative hypothesis: stationary
# 备择假设为'stationary',即平稳时序,零假设也就自然为非平稳时序
# 已知P值为0.08>0.05,无法在95%的置信度下拒绝原假设,所以该序列不满足平稳性假设
ndiffs(nhtemp)
[1] 1
dnhtemp <- diff(nhtemp,1)
adf.test(dnhtemp)
p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: dnhtemp
Dickey-Fuller = -4.6366, Lag order = 3, p-value = 0.01
alternative hypothesis: stationary
# 根据P值可拒绝原假设,一次差分后实现了平稳性
par(mfrow=c(1,2))
plot(nhtemp)
plot(diff(nhtemp,1))

模型定阶
par(mfrow=c(1,2))
acf(dnhtemp)
Pacf(dnhtemp)

| | |
模型 | ACF | PACF | |
| |A |
RIMA(p,d,0)|逐渐减小到0 |在P阶后减小到0 | |
| |A |
RIMA(0,d,q)|q阶后减小到0|逐渐减小到0 | |
| |A |
RIMA(p,d,q)|逐渐减小到0 |逐渐减小到0 | |
#forecast包中的auto.arima()函数可以帮助我们自行选取最优参数值,
# 这比观察ACF图自行确定要便捷的多。
model_fit <- auto.arima(nhtemp, seasonal = FALSE)
model_fit
Series: nhtemp
ARIMA(0,1,1)
Coefficients:
ma1
-0.7983
s.e. 0.0956
sigma^2 estimated as 1.313: log likelihood=-91.76
AIC=187.52 AICc=187.73 BIC=191.67
#模型验证 模型的残差应该满足独立正态分布
model_fit <- arima(nhtemp,order=c(0,1,1))
#accuracy(model_fit)
summary(model_fit)
Call:
arima(x = nhtemp, order = c(0, 1, 1))
Coefficients:
ma1
-0.7983
s.e. 0.0956
sigma^2 estimated as 1.291: log likelihood = -91.76, aic = 187.52
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.1285716 1.126722 0.8952077 0.2080785 1.749865 0.7513123 -0.008258617
残差正态性
qqnorm(model_fit$residuals)
qqline(model_fit$residuals)

残差间相关性
acf(model_fit$residuals)

pacf(model_fit$residuals)

Box.test(model_fit$residuals,type='Ljung-Box')
Box-Ljung test
data: model_fit$residuals
X-squared = 0.0043004, df = 1, p-value = 0.9477
# P值为0.95,说明模型的残差没有通过显著性检验(即可以认为残差的自相关系数为零),ARIMA模型能较好地拟合本数据
#模型预测
# 以下值分别为预测值及80%,95%的置信区间值
forecast(model_fit,5)
plot(forecast(model_fit,5))

LS0tCnRpdGxlOiAiUl/pnZ7lraPoioLmgKdBUklNQeaooeWeiyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKaW5zdGFsbC5wYWNrYWdlKCdmb3JlY2FzdCcpCmxpYnJhcnkocmVhZHgpCmxpYnJhcnkoZm9yZWNhc3QpCmRhdGEgPC0gcmVhZF94bHN4KCdhLnhsc3gnKQp0cyA8LSB0cyhkYXRhJHNhbGVzLGZyZXF1ZW5jeT0xMixzdGFydCA9IGMoMjAxMiw4KSkKCiQkClxiZWdpbntlcXVhdGlvbn0gClxiZWdpbntzcGxpdH0KJuiHquWbnuW9kuaooeWei++8muW6j+WIl+S4reeahOavj+S4gOS4quWAvOmDveWPr+S7peeUseWug+S5i+WJjeeahHDkuKrlgLznmoTnur/mgKfnu4TlkIjmnaXooajnpLrvvIzlhbfkvZPooajnpLrkuLogXFwKJkFSKHApOllfdCA9IGMgKyBcYmV0YV8xWV97dC0xfSsgXGJldGFfMllfe3QtMn0rIC4uLisgXGJldGFfcFlfe3QtcH0gK1x2YXJlcHNpbG9uX3QgXFwKCibnp7vliqjlubPlnYfmqKHlnovvvJrml7bluo/kuK3nmoTmr4/kuKrlgLzpg73lj6/ku6XnlKjkuYvliY3nmoRx5Liq5q6L5beu55qE57q/5oCn57uE5ZCI5p2l6KGo56S677yM5YW35L2T6KGo56S65Li677yaXFwKJk1BKHEpOllfdCA9IGMgKyBcdmFyZXBzaWxvbl97dH0gKyBcdGhldGFfMVx2YXJlcHNpbG9uX3t0LTF9KyBcdGhldGFfMlx2YXJlcHNpbG9uX3t0LTJ9Ky4uLisgXHRoZXRhX3FcdmFyZXBzaWxvbl97dC1xfVxcCgoKJkFSTUEocCxxKTpZX3QgPSBcYmV0YV8wICsgXGJldGFfMVlfe3QtMX0rIFxiZXRhXzJZX3t0LTJ9KyAuLi4rIFxiZXRhXzFZX3t0LXB9ICtcdmFyZXBzaWxvbl90IC1cdGhldGFfMVx2YXJlcHNpbG9uX3t0LTF9KyBcdGhldGFfMVx2YXJlcHNpbG9uX3t0LTF9Ky4uLisgXHRoZXRhXzFcdmFyZXBzaWxvbl97dC1xfSBcXAomXFwKXGVuZHtzcGxpdH0gClxlbmR7ZXF1YXRpb259IAokJAoKYGBge3J9CmxpYnJhcnkoZm9yZWNhc3QpCmxpYnJhcnkodHNlcmllcykKbmh0ZW1wCmBgYAoKCiMg5bmz56iz5oCn5qOA6aqMKOWNleS9jeaguSkg5ZKMIOW3ruWIhuWPmOaNogokJApcYmVnaW57ZXF1YXRpb259IApcYmVnaW57c3BsaXR9CiblubPnqLPlsLHmmK/mjIfluo/liJfnmoTnu5/orqHmgKfotKjlubbkuI3kvJrpmo/nnYDml7bpl7TnmoTmjqjnp7vogIzmlLnlj5jvvIzkvovlpoJZX3TnmoTlnYflgLzlkozmlrnlt67pg73mmK/mgZLlrprnmoTjgIJcXCAKJuWPpuWklu+8jOWvueS7u+aEj+a7nuWQjumYtuaVsGvvvIzmraTluo/liJfnmoToh6rnm7jlhbPmgKfkuI3lj5HnlJ/mlLnlj5jjgIJcXAoKJuaXtumXtOW6j+WIl+eahOW5s+eos+aAp+S4gOiIrOWPr+S7pemAmui/h+WbvuW9ouadpeebtOaOpeWIpOaWre+8jOinguWvn+aYr+WQpuacieaYjuaYvueahOi2i+WKv+WQkeWSjOS4jeinhOWImeazouWKqOmhuVxcCibkuZ/lj6/kvb/nlKjljZXkvY3moLnvvIhBREbvvInnu5/orqHmo4DpqozmnaXpqozor4HlubPnqLPmgKfvvIzljp/lgYforr7kuLror6Xluo/liJflrZjlnKjljZXkvY3moLnvvIzlpoLmnpznu4/ov4fljp/lgYforr7kuI3og73ooqvmi5Lnu53nmoTor53vvIzpgqPkuYjmiJHku6zlsLHlj6/ku6XorqTkuLror6Xluo/liJfkuLrpnZ7lubPnqLPml7bpl7Tluo/liJfjgIJcXAoKJlLkuK3nmoRBREbmo4Dpqozlj6/kvb/nlKh0c2VyaWVz5YyF5Lit55qEYWRmLnRlc3QoKeWHveaVsOadpeWunueOsO+8mgpcZW5ke3NwbGl0fSAKXGVuZHtlcXVhdGlvbn0gCiQkCmBgYHtyfQphZGYudGVzdChuaHRlbXApCiMg5aSH5oup5YGH6K6+5Li6J3N0YXRpb25hcnknLOWNs+W5s+eos+aXtuW6jyzpm7blgYforr7kuZ/lsLHoh6rnhLbkuLrpnZ7lubPnqLPml7bluo8KIyDlt7Lnn6VQ5YC85Li6MC4wOD4wLjA1LOaXoOazleWcqDk1JeeahOe9ruS/oeW6puS4i+aLkue7neWOn+WBh+iuvizmiYDku6Xor6Xluo/liJfkuI3mu6HotrPlubPnqLPmgKflgYforr4KYGBgCmBgYHtyfQoj5beu5YiG5Y+Y5o2iCm5kaWZmcyhuaHRlbXApCmBgYAoKYGBge3J9CmRuaHRlbXAgPC0gZGlmZihuaHRlbXAsMSkKYWRmLnRlc3QoZG5odGVtcCkKIyDmoLnmja5Q5YC85Y+v5ouS57ud5Y6f5YGH6K6+LOS4gOasoeW3ruWIhuWQjuWunueOsOS6huW5s+eos+aApwpgYGAKCmBgYHtyfQoj5a+55q+U5beu5YiG5YmN5ZCOCnBhcihtZnJvdz1jKDEsMikpCnBsb3Qobmh0ZW1wKQpwbG90KGRpZmYobmh0ZW1wLDEpKQpgYGAKCiMg5qih5Z6L5a6a6Zi2CmBgYHtyfQpwYXIobWZyb3c9YygxLDIpKQphY2YoZG5odGVtcCkKUGFjZihkbmh0ZW1wKQpgYGAKCgrku6XmraTlh4bliJnkuLrmjIflr7zop4Llr59BQ0bkuI5QQUNG5Zu+77yM5Y+v5Lul5Y+R546w77yMZG5odGVtcOaVsOaNrumbhuWcqOa7nuWQjumhueS4uuS4gOmYtuaXtuaciemdnuW4uOaYjuaYvueahOiHquebuOWFs++8jOiAjOW9k+a7nuWQjumYtuaVsOmAkOa4kOWinuWKoOaXtu+8jOWBj+ebuOWFs+WfuuacrOWRiOeOsOmAkOa4kOWHj+Wwj+eahOi2i+WKv++8iOiHs+Wwkeayoeaciei2hei/h+e9ruS/oeWMuumXtO+8ie+8jOaJgOS7peWPr+S7peiAg+iZkWFyaW1hKDAsMSwxKeaooeWei+OAggotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnwgICDmqKHlnosgICAgIHwgICAgIEFDRiAgICB8ICAgICBQQUNGICAgICAgfAp8QVJJTUEocCxkLDApfOmAkOa4kOWHj+Wwj+WIsDAgfOWcqFDpmLblkI7lh4/lsI/liLAwIHwKfEFSSU1BKDAsZCxxKXxx6Zi25ZCO5YeP5bCP5YiwMHzpgJDmuJDlh4/lsI/liLAwICAgIHwKfEFSSU1BKHAsZCxxKXzpgJDmuJDlh4/lsI/liLAwIHzpgJDmuJDlh4/lsI/liLAwICAgIHwKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYGBge3J9CiNmb3JlY2FzdOWMheS4reeahGF1dG8uYXJpbWEoKeWHveaVsOWPr+S7peW4ruWKqeaIkeS7rOiHquihjOmAieWPluacgOS8mOWPguaVsOWAvO+8jAojIOi/meavlOinguWvn0FDRuWbvuiHquihjOehruWumuimgeS+v+aNt+eahOWkmuOAggptb2RlbF9maXQgPC0gYXV0by5hcmltYShuaHRlbXAsIHNlYXNvbmFsID0gRkFMU0UpCm1vZGVsX2ZpdAoKYGBgCiPmqKHlnovpqozor4EK5qih5Z6L55qE5q6L5beu5bqU6K+l5ruh6Laz54us56uL5q2j5oCB5YiG5biDCmBgYHtyfQptb2RlbF9maXQgPC0gYXJpbWEobmh0ZW1wLG9yZGVyPWMoMCwxLDEpKQojYWNjdXJhY3kobW9kZWxfZml0KQpzdW1tYXJ5KG1vZGVsX2ZpdCkKYGBgCiMjIyDmrovlt67mraPmgIHmgKcKYGBge3J9CnFxbm9ybShtb2RlbF9maXQkcmVzaWR1YWxzKQpxcWxpbmUobW9kZWxfZml0JHJlc2lkdWFscykKYGBgCiMjIyDmrovlt67pl7Tnm7jlhbPmgKcKYGBge3J9CmFjZihtb2RlbF9maXQkcmVzaWR1YWxzKQpwYWNmKG1vZGVsX2ZpdCRyZXNpZHVhbHMpCgojZ2dBY2YodXNjaGFuZ2VbLCJDb25zdW1wdGlvbiJdKQojZ2dQYWNmKHVzY2hhbmdlWywiQ29uc3VtcHRpb24iXSxtYWluPSIiKQoKQm94LnRlc3QobW9kZWxfZml0JHJlc2lkdWFscyx0eXBlPSdManVuZy1Cb3gnKQojIFDlgLzkuLowLjk1LOivtOaYjuaooeWei+eahOaui+W3ruayoeaciemAmui/h+aYvuiRl+aAp+ajgOmqjCjljbPlj6/ku6XorqTkuLrmrovlt67nmoToh6rnm7jlhbPns7vmlbDkuLrpm7YpLEFSSU1B5qih5Z6L6IO96L6D5aW95Zyw5ouf5ZCI5pys5pWw5o2uCmBgYAoj5qih5Z6L6aKE5rWLCmBgYHtyfQojIOS7peS4i+WAvOWIhuWIq+S4uumihOa1i+WAvOWPijgwJSw5NSXnmoTnva7kv6HljLrpl7TlgLwKZm9yZWNhc3QobW9kZWxfZml0LDUpCnBsb3QoZm9yZWNhc3QobW9kZWxfZml0LDUpKQpgYGAKCg==