数据分析 时间序列
时间序列是按日期或时间戳索引的分类或数字变量的观察序列。时间序列数据的一个明显例子是股票价格的时间序列。在下表中,我们可以看到时间序列数据的基本结构。在这种情况下,观察结果每小时记录一次。
时间戳 |
股票-价格 |
2015-10-11 09:00:00 |
100 |
2015-10-11 10:00:00 |
110 |
2015-10-11 11:00:00 |
105 |
2015-10-11 12:00:00 |
90 |
2015-10-11 13:00:00 |
120 |
通常,时间序列分析的第一步是绘制序列,这通常使用折线图完成。
时间序列分析最常见的应用是使用数据的时间结构预测数值的未来值。这意味着,可用的观测值用于预测未来的值。
数据的时间顺序意味着传统的回归方法没有用。为了建立稳健的预测,我们需要考虑数据时间顺序的模型。
最广泛使用的时间序列分析模型称为
自回归移动平均线 (ARMA)。该模型由两部分组成,一个
自回归 (AR) 部分和一个
移动平均 (MA) 部分。该模型通常被称为
ARMA(p, q) 模型,其中
p 是自回归部分的阶数,
q 是移动平均部分的顺序。
自回归模型
AR(p) 被视为 p 阶的自回归模型。在数学上它被写成-
$$X_t = c + \sum_{i = 1}^{P} \phi_i X_{t-i} + \varepsilon_{t}$$
其中 {φ
1, …, φ
p} 为待估计参数,c 为常数,随机变量 ε
t 代表白噪声。需要对参数值进行一些约束,以使模型保持平稳。
移动平均线
符号
MA(q)指的是
q阶的移动平均模型-
$$X_t = \mu + \varepsilon_t + \sum_{i = 1}^{q} \theta_i \varepsilon_{t-i}$$
其中 θ
1, ..., θ
q 是模型的参数,μ 是 X
t 的期望,和 ε
t, ε
t − 1, ... 是白噪声误差项。
自回归移动平均线
ARMA(p, q) 模型结合了 p 个自回归项和 q 个移动平均项。在数学上,模型用以下公式表示-
$$X_t = c + \varepsilon_t + \sum_{i = 1}^{P} \phi_iX_{t-1} + \sum_{i = 1}^{q} \theta_i \varepsilon_{ti}$ $
我们可以看到
ARMA(p, q)模型是
AR(p)和
MA(q)模型的组合.
为了给出模型的一些直觉,考虑方程的 AR 部分试图估计 X
t − i 观测值的参数,以便预测 X
中变量的值t。它最终是过去值的加权平均值。 MA 部分使用相同的方法,但存在先前观测值的误差 ε
t − i。所以最终模型的结果是一个加权平均。
以下代码片段演示了如何在 R 中实现
ARMA(p, q)。
# install.packages("forecast")
library("forecast")
# Read the data
data = scan('fancy.dat')
ts_data <-ts(data, frequency = 12, start = c(1987,1))
ts_data
plot.ts(ts_data)
绘制数据通常是找出数据中是否存在时间结构的第一步。从图中我们可以看出,每年年底都有很强的尖峰。
以下代码将 ARMA 模型拟合到数据中。它运行多种模型组合并选择误差较小的一种。
# Fit the ARMA model
fit = auto.arima(ts_data)
summary(fit)
# Series: ts_data
# ARIMA(1,1,1)(0,1,1)[12]
# Coefficients:
# ar1 ma1 sma1
# 0.2401 -0.9013 0.7499
# s.e. 0.1427 0.0709 0.1790
#
# sigma^2 estimated as 15464184: log likelihood =-693.69
# AIC = 1395.38 AICc = 1395.98 BIC = 1404.43
# Training set error measures:
# ME RMSE MAE MPE MAPE MASE ACF1
# Training set 328.301 3615.374 2171.002 -2.481166 15.97302 0.4905797-0.02521172