向量自回归模型VAR


写在前面:所写仅为个人理解,请各位读者指正。

1 向量自回归 VAR

1.1 简述

向量自回归(Vector Autoregression,简称VAR)模型是一种常用的多变量时间序列分析模型,由Christopher A. Sims在1980年提出。用于预测相互关联的时间序列变量,并探究它们之间的动态关系。

  • 多元时间序列:VAR模型处理的是多个同时收集的时间序列数据,
  • 自回归结构:每个变量的当前值由自身过去值以及其他变量的过去值共同预测。
  • 模型估计:通常使用最小二乘法(OLS)来估计VAR模型的参数。

1.2 时间序列

首先我们要知道时间序列长什么样子:
在这里插入图片描述

1.3 术语概念

内生变量:受影响的变量。可以理解为真实存在数据集中的数据
外生变量:不受模型中变量的影响,但可以影响内生变量。可以理解为未被采集到的数据。

1.3 公式

  • y y y 表示一个标量
  • y \mathbf{y} y 表示一个样本向量
  • A \mathbf{A} A 表示一个矩阵

一个基本的VAR模型可以表示为:
y t = c + A 1 y t − 1 + A 2 y t − 2 + … + A p y t − p + ε t \mathbf{y}_t=\mathbf{c}+\mathbf{A}_1\mathbf{y}_{t-1}+\mathbf{A}_2\mathbf{y}_{t-2}+\ldots+\mathbf{A}_p\mathbf{y}_{t-p}+ \mathbf{\varepsilon_t} yt=c+A1yt1+A2yt2++Apytp+εt

  • y t ∈ R k \mathbf{y}_t \in \mathbb{R}^k ytRk k k k个内生变量在时间 t t t的观测值。
  • c ∈ R k \mathbf{c} \in \mathbb{R}^k cRk是常数向量。
  • A i ∈ R k × k \mathbf{A}_i \in \mathbb{R}^{k \times k} AiRk×k是系数矩阵,表示 t − i t-i ti 时刻的 y t − i \mathbf{y}_{t-i} yti y t \mathbf{y}_t yt的影响。
  • ε t ∈ R k \varepsilon_t \in \mathbb{R}^k εtRk是误差项向量,通常假设其满足经典的高斯白噪声过程。
  • p p p为阶数(可以理解为步长),即 t t t时刻的预测值通过需要 t − 1 t-1 t1 ~ t − p t-p tp 时刻的数据进行预测。

在这里插入图片描述

1.4 理解

由上面的公式可以看出:标准的VAR模型就是一个多元线性回归模型。只不过用当前时间步的样本作为标签,之前p个时间步的样本整体作为新的样本。
具体线性模型可以看我的动手学深度学习pytorch专栏

2 结构向量自回归 SVAR

在SVAR模型中,假设误差项 ε t \varepsilon_t εt 可以被分解为两个部分:一个反映同期结构性影响的 B η t B\eta_t Bηt,和一个表示简化VAR模型中误差项的 u t u_t ut。即:
ε t = B η t + u t \varepsilon_t = \mathbf{B}\eta_t + u_t εt=Bηt+ut
其中, B ∈ R k × m \mathbf{B} \in \mathbb{R}^{k \times m} BRk×m m ≤ k m \leq k mk η t ∈ R m \eta_t \in \mathbb{R}^{m} ηtRm 是结构性冲击向量, u t ∈ R k u_t \in \mathbb{R}^{k} utRk 是简化误差项向量。

代入VAR模型,我们得到SVAR模型:
A 0 Y t = c + A 1 Y t − 1 + A 2 Y t − 2 + … + A p Y t − p + B η t + u t \mathbf{A}_0\mathbf{Y}_t = \mathbf{c} + \mathbf{A}_1\mathbf{Y}_{t-1} + \mathbf{A}_2\mathbf{Y}_{t-2} + \ldots + \mathbf{A}_p\mathbf{Y}_{t-p} + \mathbf{B}\mathbf{\eta}_t + \mathbf{u}_t A0Yt=c+A1Yt1+A2Yt2++ApYtp+Bηt+ut

其中, A 0 ∈ R k × k \mathbf{A}_0 \in \mathbb{R}^{k \times k} A0Rk×k 用于反映同期结构性影响。

代码

由GPT生成

import numpy as np
import pandas as pd
import statsmodels.api as sm

# 假设我们有一个包含两个变量的数据集
# 这里我们使用随机数据作为示例
np.random.seed(0)
data = pd.DataFrame(np.random.randn(100, 2), columns=['X', 'Y'])

# 创建VAR模型
model_var = sm.tsa.VAR(data)
results_var = model_var.fit()

# 创建SVAR模型
# 假设我们有一个外生变量Z
np.random.seed(0)
z = pd.DataFrame(np.random.randn(100, 1), columns=['Z'])
data['Z'] = z

# 创建SVAR模型,并假设Z是外生变量
model_svar = sm.tsa.SVAR(data, {'Z': 'endog'})
results_svar = model_svar.fit()

# 打印VAR和SVAR模型的结果
print(results_var.summary())
print(results_svar.summary())




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rendy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值