在许多领域,如金融、气象、销售等,我们常常需要对未来的数据进行预测。时间序列分析就是一种强大的工具,它可以帮助我们理解数据随时间的变化规律,并基于这些规律构建预测模型。本文将介绍几种常见的时间序列预测模型,包括 ARIMA 模型,并通过 R 语言代码进行演示。
平稳性是时间序列分析中的一个重要概念。一个平稳的时间序列具有恒定的均值、方差和自协方差,不随时间的推移而变化。平稳性是许多时间序列模型的前提条件,因为只有平稳的序列才能更好地进行建模和预测。
AR 模型假设当前值是过去若干期值的线性组合,其数学表达式为:
[
Yt = c + \sum{i = 1}^{p} \phii Y{t - i} + \epsilon_t
]
其中,$Y_t$ 是当前值,$c$ 是常数,$\phi_i$ 是自回归系数,$p$ 是自回归阶数,$\epsilon_t$ 是白噪声。
MA 模型假设当前值是过去若干期白噪声的线性组合,其数学表达式为:
[
Yt = \mu + \epsilon_t + \sum{i = 1}^{q} \thetai \epsilon{t - i}
]
其中,$\mu$ 是均值,$\theta_i$ 是移动平均系数,$q$ 是移动平均阶数。
ARIMA 模型是 AR 模型和 MA 模型的扩展,它通过差分来处理非平稳序列。其数学表达式为:
[
\phi(B)(1 - B)^d Y_t = c + \theta(B) \epsilon_t
]
其中,$\phi(B)$ 是自回归多项式,$(1 - B)^d$ 是差分算子,$\theta(B)$ 是移动平均多项式,$d$ 是差分阶数。
我们使用 R 语言中的 AirPassengers
数据集,该数据集记录了 1949 年至 1960 年每月的航空乘客数量。
# 加载数据集
data("AirPassengers")
# 查看数据集信息
str(AirPassengers)
# 绘制时间序列图
plot(AirPassengers, main = "Monthly Airline Passengers", ylab = "Passengers")
我们使用 adf.test()
函数进行单位根检验,以判断序列是否平稳。
library(tseries)
# 进行 ADF 检验
adf.test(AirPassengers)
由于原始序列不平稳,我们对其进行一阶差分。
# 一阶差分
diff_passengers <- diff(AirPassengers)
# 绘制差分后的时间序列图
plot(diff_passengers, main = "Differenced Monthly Airline Passengers", ylab = "Passengers")
# 再次进行 ADF 检验
adf.test(diff_passengers)
我们通过观察 ACF 和 PACF 图来确定 ARIMA 模型的阶数。
# 绘制 ACF 和 PACF 图
par(mfrow = c(1, 2))
acf(diff_passengers, main = "ACF of Differenced Series")
pacf(diff_passengers, main = "PACF of Differenced Series")
根据 ACF 和 PACF 图的结果,我们选择合适的阶数来拟合 ARIMA 模型。
# 拟合 ARIMA 模型
arima_model <- arima(AirPassengers, order = c(2, 1, 2))
# 查看模型摘要
summary(arima_model)
使用拟合好的 ARIMA 模型进行未来 12 个月的预测。
# 进行预测
forecast_result <- forecast(arima_model, h = 12)
# 绘制预测结果图
plot(forecast_result, main = "Forecast of Airline Passengers")
模型名称 | 特点 | 适用场景 |
---|---|---|
AR 模型 | 基于过去若干期值进行预测 | 序列具有自相关性 |
MA 模型 | 基于过去若干期白噪声进行预测 | 序列受随机干扰影响较大 |
ARIMA 模型 | 结合了 AR 和 MA 模型,可处理非平稳序列 | 大多数时间序列数据 |
通过本文的介绍,我们了解了时间序列分析的基础概念,掌握了常见的时间序列预测模型,并通过 R 语言代码演示了如何构建和使用 ARIMA 模型进行预测。希望这些内容对你在时间序列分析和预测方面有所帮助。