PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列

简介: PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列

本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器。

%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
from pandas_datareader.data import DataReader
from datetime import datetime
 DataReader(start=datetime(1947, 1, 1), end=datetime(2013, 4, 1))

Hamilton (1989) 马尔可夫转换模型(_Markov -switching_ _model_)

这是对Hamilton(1989)介绍马可夫转换模型(_Markov -switching_ _model_)的开创性论文的复现。该模型是一个4阶的自回归模型,其中过程的平均值在两个区制之间切换。可以这样写。

每个时期,区制都根据以下的转移概率矩阵进行转换。

其中 pij是从区制 i 转移到区制 j 的概率。

该模型类别是时间序列部分中的MarkovAutoregression。为了创建这个模型,我们必须指定k\_regimes=2的区制数量,以及order=4的自回归阶数。默认模型还包括转换自回归系数,所以在这里我们还需要指定switch\_ar=False。

创建后,模型通过极大似然估计进行拟合。使用期望最大化(EM)算法的若干步骤找到好的起始参数,并应用准牛顿(BFGS)算法来快速找到最大值。

\[2\]:
#获取数据
hamilton= pd.read('gndata').iloc\[1:\]
# 绘制数据
hamilton.plot()
# 拟合模型
Markovreg(hamilton)

summary()

我们绘制了经过过滤和平滑处理的衰退概率。滤波指的是基于截至并包括时间tt(但不包括时间t+1,...,Tt+1,...,T)的数据对时间t的概率估计。平滑化是指使用样本中的所有数据对时间t的概率进行估计。

fig, axes = plt.subplots(2, figsize=(7,7))
ax = axes\[0\]
ax.plot(margl_prob\[0\])
ax = axes\[1\]
ax.plot(smoomarginal_pro\[0\])

根据估计的转移矩阵,我们可以计算出衰退与扩张的预期持续时间。

print(expected_du)

在这种情况下,预计经济衰退将持续约一年(4个季度),扩张约两年半。

Kim, Nelson, and Startz (1998) 三状态方差转换模型。


这个模型展示了带有区制异方差(方差转换)和无平均效应的估计。

模型是:

由于没有自回归成分,这个模型可以用MarkovRegression类来拟合。由于没有平均效应,我们指定趋势='nc'。假设转换方差有三个区制,所以我们指定k\_regimes=3和switching\_variance=True(默认情况下,方差被假定为在不同区制下是相同的)。

raw = pd.read_table(ew ,engine='python')
# 绘制数据集
plot( figsize=(12, 3))

res_kns.summary()

下面我们绘制了处于每个区制中的概率;只有在少数时期,才有可能出现高_方差_区制。

fig, axes = plt.subplots(3, figsize=(10,7))
ax.plot(smoothed_proba\[0\])
ax.plot(smoothed_proba\[2\])
ax.plot(smoothed_proba\[3\])

Filardo (1994) 时变的转移概率

这个模型展示了用时变的转移概率进行估计。

在上述模型中,我们假设转移概率在不同时期是不变的。在这里,我们允许概率随着经济状况的变化而变化。否则,该模型就是Hamilton(1989)的马尔可夫自回归。

每个时期,区制现在都根据以下的时变转移概率矩阵进行转移。

其中 pij,tipij,t 是在 t 期间从区制 i 转移到区制 j 的概率,并定义为。

与其将转移概率作为最大似然法的一部分进行估计,不如估计回归系数βij。这些系数将转移概率与预先确定的或外生的变量xt-1向量联系起来。

\[9\]:
# 用标准差进行标准化
data\['p'\]\['1960-01-01':\].std() / data\['dlip'\]\[:'1959-12-01'\].std()
# 绘制数据
data\['dlip'\].plot( )
 
data\['dmdlleading'\].plot(  figsize=(13,3));

时变的转移概率是由exog_tvtp参数指定的。

这里我们展示了模型拟合的另一个特点--使用随机搜索的MLE起始参数。因为马尔科夫转换模型的特征往往是似然函数的许多局部最大值,执行初始优化步骤有助于找到最佳参数。

下面,我们规定对起始参数向量的20个随机扰动进行检查,并将最好的一个作为实际的起始参数。由于搜索的随机性,我们事先设置了随机数种子,以便结果复制。

markovreg(data, k=2, order=4)
fit(search=20)
summary()

下面我们绘制了经济运行在低生产状态下的平滑概率,并再次将NBER的衰退情况纳入其中进行比较。

ax.plot(smoo\_marg\_prob\[0\])

利用时间变化的转移概率,我们可以看到低生产状态的预期持续时间如何随时间变化。

exp_dura\[0\].plot( figsize=(12,3));

在经济衰退期间,低生产状态的预期持续时间要比经济扩张时高得多。


相关文章
|
9天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
11天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
19天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
63 7
|
18天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
27 3
|
19天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
34 2
|
6月前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
6月前
|
数据可视化 数据挖掘 Python
Python用 tslearn 进行时间序列聚类可视化
Python用 tslearn 进行时间序列聚类可视化
|
自然语言处理 数据可视化 数据挖掘
如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧。 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。
1825 0
|
6天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
6天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!