原文链接:http://tecdat.cn/?p=22617
==============================================================
本文提供了一个在统计模型中应用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些后果。它利用了Hamilton(1989)的滤波器和Kim(1994)的平滑器。
%matplotlib inlineimport numpy as npimport pandas as pdimport statsmodels.api as smfrom pandas_datareader.data import DataReaderfrom 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));
在经济衰退期间,低生产状态的预期持续时间要比经济扩张时高得多。
最受欢迎的见解
1.用R语言模仿混合制排队随机服务排队零碎
2.R语言中应用排队论预测等待时间
3.R语言中实现马尔可夫链蒙特卡罗MCMC模型
4.R语言中的马尔科夫机制转换(Markov regime switching)模型
5.matlab贝叶斯隐马尔可夫hmm模型
6.用R语言模仿混合制排队随机服务排队零碎
7.Python基于粒子群优化的投资组合优化
8.R语言马尔可夫转换模型钻研交通伤亡人数事变预测
9.用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用