时间序列笔记-简单移动平均模型(二)
笔记说明
在datacamp网站上学习“Time Series with R ”track
“Introduction to Time Series Analysis”课程 做的对应笔记。
学识有限,错误难免,还请不吝赐教。
如无特殊说明,笔记中所使用数据均来自datacamp课程
简单移动平均模型部分的笔记分为(一)(二)两个部分发布,第一部分主要包括简单移动平均过程简介、不同参数情况下简单移动平均过程的特点和数据模拟;第二部分主要是简单移动平均模型的拟合和预测。(这样我每日一更打卡的压力可以小一些。。。)
拟合简单移动平均模型
arima是自回归滑动平均混合模型(Autoregressive Integrated Moving Average model)的简称,模型有p,d,q三个参数:自回归阶数p,差分阶数d,移动平均阶数q,这三个参数会在以后讲解中再行详述。现在只需要知道ARIMA(0,0,1)模型就是一个简单移动平均模型,因此我们可以用arima(..., order=c(0,0,1))函数对给定时间序列进行简单移动平均模型的拟合。(我们这里只关注1阶的情景)
拟合后给出的结果中,ma1即为的估计值,intercept即为μ的估计值,sigma^2即为的估计值。
有了这些估计值后,就可以根据公式计算出各时间点序列数据的拟合值:
以及残差(实际值与拟合值之差):
下面是实践,实践使用的数据Nile记录了1871年至1970年Nile河的年流量:
# Fit the MA model to Nile
MA <- arima(Nile, order = c(0, 0, 1))
print(MA)
# Plot Nile and MA_fit
ts.plot(Nile)
MA_fit <- Nile - resid(MA)
points(MA_fit, type = "l", col = 2, lty = 2)
拟合模型后参数估计的结果:
ma1:0.3783, 标准误0.0791
intercept:919.2433,标准误20.9685
sigma^2:23272
log likelihood=-644.72
aic=1295.44
添加了拟合值的tw.plot(Nile)
从图上可以看出来其实MA模型对Nile数据的拟合效果并不是很好。
拟合简单移动平均模型后进行简单的预测
建立模型后可以用predict()函数进行进行预测,在predict()函数生成的对象中,$pred值为预测值,$se值为预测值的标准误。
predict()函数的n.ahead参数用来指定你想在现有数据以后生成的预测值数,默认为1(即只会返回下一个时间点的预测值)。
下面进行实践,仍使用Nile数据
代码的最后利用预测值±1.96倍预测值标准误对应生成了预测值的95%置信区间的上下限。并同预测值一起附加在了原时间序列图上。
# Fit the MA model to Nile
MA <- arima(Nile, order = c(0, 0, 1))
print(MA)
# Make a 1-step forecast based on MA
predict_MA <- predict(MA)
# Obtain the 1-step forecast using $pred[1]
predict_MA$pred[1]
# Make a 1-step through 10-step forecast based on MA
predict(MA, n.ahead=10)
# Plot the Nile series plus the forecast and 95% prediction intervals
ts.plot(Nile, xlim = c(1871, 1980))
MA_forecasts <- predict(MA, n.ahead = 10)$pred
MA_forecast_se <- predict(MA, n.ahead = 10)$se
points(MA_forecasts, type = "l", col = 2)
points(MA_forecasts - 1.96*MA_forecast_se, type = "l", col = 2, lty = 2)
points(MA_forecasts + 1.96*MA_forecast_se, type = "l", col = 2, lty = 2)
模型拟合后的参数估计同上。
有一点值得注意:简单移动平均模型只能产生后1个时点的预测值,再往后的预测值就都是模型估计的均值(intercept)了。这是因为对于1阶的简单移动平均模型来说,只和有相关性,而与无相关性,因此已观测到的数据对于间隔1个时点以上的未来而言提供不了除序列均值以外的有用信息了。