时间序列笔记-ARMA模型(一)

笔记说明

在datacamp网站上学习“Time Series with R ”track
“ARIMA Modeling with R”课程 做的对应笔记。
学识有限,错误难免,还请不吝赐教。
从本次笔记开始学习的课程从“Introduction to Time Series Analysis”变为“ARIMA Modeling with R”了,主要用astsa包。
如无特殊说明,笔记中所使用数据均来自datacamp课程。
ARMA模型拟分为(一)(二)两部分发布,第一部分主要包括ARMA模型简介,模拟ARMA数据、拟合ARMA模型,单纯的AR模型或MA模型的定阶。第二部分主要包括ARMA模型的定阶策略、模型选择、残差分析。模型预测部分见ARIMA模型的笔记。

Wold分解与ARMA模型

Wold证明了任何平稳的时间序列都可以表示成白噪声的线性组合:
   
其中为常数,W表示白噪声。
所有ARMA模型都具有这个形式,这意味着ARMA模型很适合拟合平稳的时间序列。
ARMA模型即自回归滑动平均模型(Autoregressive moving average model),是由自回归模型(简称AR模型)与移动平均模型(简称MA模型)为基础“混合”构成。
AR模型的基本形式: (为白噪声)
MA模型的基本形式: (为白噪声)
ARMA模型的基本形式: ,自相关且有着具有相关性的误差

模拟ARMA数据

可以用arima.sim(model = , n = , ...)函数产生ARMA模型的模拟数据,其中:

  • model是含有模型阶数和系数信息的list。模型阶数格式为c(p,d,q),其中p为AR阶数,q为MA阶数。
  • n是产生模拟数据序列的长度。
    例子:
# Generate white noise
WN <- arima.sim(model = list(order = c(0, 0, 0)),n = 200)

# Generate MA(1) with parameter .9 
MA <- arima.sim(model = list(order = c(0, 0, 1), ma = .9 ), n = 200)

# Generate AR(2) with parameters 1.5 and -.75
AR <- arima.sim(model = list(order = c(2, 0, 0), ar = c(1.5,-0.75) ), n = 200)

拟合ARMA模型

本课程中使用astsa包中的sarima()函数对数据进行模型拟合。使用该函数时除了需要输入数据外还要给出ARIMA模型的三个参数:AR阶数p,差分阶数d,MA阶数q。(d我们目前暂不涉及)
使用时sarima(x, p = 1, d = 0, q = 0)可以简写为sarima(x, 1, 0, 0)
例:

# Generate 100 observations from the AR(1) model
x <- arima.sim(model = list(order = c(1, 0, 0), ar = .9), n = 100)

# Fit an AR(1) to the data and examine the t-table
sarima(x, p = 1, d = 0, q = 0)

sarima()函数的主要输出结果包括:回归系数的参数估计结果;自由度;模型参数估计及其是否为0的t检验结果;衡量模型拟合效果的一些判断指标(AIC BIC等)。此外还会自动输出一张内含4张图的残差诊断图,在后面的讲解中再详细说:


时间序列笔记-ARMA模型(一)_第1张图片
sarima()输出的残差诊断图

单纯AR\MA模型的定阶

AR阶数为p,MA阶数为q的ARMA模型记为ARMA(p,q)。在拟合ARMA模型时需要指定p、q的值。如何确定p、q的值就是ARMA模型的定阶问题。
一个常用的定阶方法是利用ACF图和PACF图(自相关图和偏自相关图),不同模型的ACF、PACF图表现见下表:

  AR(p) MA(q) ARMA(p,q)
ACF 拖尾 在lag q处截尾 拖尾
PACF 在lag p处截尾 拖尾 拖尾

ACF(自相关函数)在时间序列笔记-自相关中有讲解。
偏自相关函数(PACF)之前没有提到过,它是去除等的影响后,和之间的相关系数。
利用astsa包的acf2()函数可以同时画出时间序列数据的ACF图和PACF图.
下面的例子分别生成AR(1),AR(2),MA(1)模型的数据(分别对应x,y,z数据),并查看对应的ACF图和PACF图:

# Generate 100 observations from the AR(1) model
x <- arima.sim(model = list(order = c(1, 0, 0), ar = .9), n = 100) 

# Plot x
plot(x)

# Plot the sample P/ACF pair
acf2(x)

# Generate 100 observations from the AR(2) model
y <- arima.sim(model = list(order = c(2, 0, 0), ar = c(1.5, -.75)), n = 100)

# Plot y
plot(y)

# Plot the sample P/ACF of y
acf2(y)

# Generate 100 observations from the MA(1) model
z <- arima.sim(model = list(order = c(0, 0, 1), ma = -.8), n = 100)

# Plot z
plot(z)

# Plot the sample P/ACF of z
acf2(z)
时间序列笔记-ARMA模型(一)_第2张图片
plot(x)
时间序列笔记-ARMA模型(一)_第3张图片
acf2(x)
时间序列笔记-ARMA模型(一)_第4张图片
plot(y)
时间序列笔记-ARMA模型(一)_第5张图片
acf2(y)
时间序列笔记-ARMA模型(一)_第6张图片
plot(z)
时间序列笔记-ARMA模型(一)_第7张图片
acf2(z)

单纯的AR或MA模型根据ACF和PACF图还是比较容易定阶的,但p、q均不为0的ARMA模型定阶就没这么简单了,详见下一个笔记。

你可能感兴趣的:(时间序列笔记-ARMA模型(一))