拓端tecdat|Python用時變馬爾可夫區(qū)制轉換(Markov regime switching)自回歸模型分析
原文鏈接:http://tecdat.cn/?p=22617
原文出處:拓端數(shù)據(jù)部落公眾號
本文提供了一個在統(tǒng)計模型中使用馬可夫轉換模型模型的例子,來復現(xiàn)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)的開創(chuàng)性論文的復現(xiàn)。該模型是一個4階的自回歸模型,其中過程的平均值在兩個區(qū)制之間切換??梢赃@樣寫。

每個時期,區(qū)制都根據(jù)以下的轉移概率矩陣進行轉換。

其中 pij是從區(qū)制 i?轉移到區(qū)制 j?的概率。
該模型類別是時間序列部分中的MarkovAutoregression。為了創(chuàng)建這個模型,我們必須指定k_regimes=2的區(qū)制數(shù)量,以及order=4的自回歸階數(shù)。默認模型還包括轉換自回歸系數(shù),所以在這里我們還需要指定switch_ar=False。
創(chuàng)建后,模型通過極大似然估計進行擬合。使用期望最大化(EM)算法的若干步驟找到好的起始參數(shù),并應用準牛頓(BFGS)算法來快速找到最大值。
[2]:
#獲取數(shù)據(jù)
hamilton= pd.read('gndata').iloc[1:]
# 繪制數(shù)據(jù)
hamilton.plot()
# 擬合模型
Markovreg(hamilton)

summary()


我們繪制了經(jīng)過過濾和平滑處理的衰退概率。濾波指的是基于截至并包括時間tt(但不包括時間t+1,...,Tt+1,...,T)的數(shù)據(jù)對時間t的概率估計。平滑化是指使用樣本中的所有數(shù)據(jù)對時間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])

根據(jù)估計的轉移矩陣,我們可以計算出衰退與擴張的預期持續(xù)時間。
print(expected_du)

在這種情況下,預計經(jīng)濟衰退將持續(xù)約一年(4個季度),擴張約兩年半。
?
Kim, Nelson, and Startz (1998) 三狀態(tài)方差轉換模型。
?
這個模型展示了帶有區(qū)制異方差(方差轉換)和無平均效應的估計。
模型是:

由于沒有自回歸成分,這個模型可以用MarkovRegression類來擬合。由于沒有平均效應,我們指定趨勢='nc'。假設轉換方差有三個區(qū)制,所以我們指定k_regimes=3和switching_variance=True(默認情況下,方差被假定為在不同區(qū)制下是相同的)。
raw = pd.read_table(ew ,engine='python')
# 繪制數(shù)據(jù)集
plot( figsize=(12, 3))

res_kns.summary()
?
?


下面我們繪制了處于每個區(qū)制中的概率;只有在少數(shù)時期,才有可能出現(xiàn)高方差區(qū)制。
?
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) 時變的轉移概率
這個模型展示了用時變的轉移概率進行估計。
在上述模型中,我們假設轉移概率在不同時期是不變的。在這里,我們允許概率隨著經(jīng)濟狀況的變化而變化。否則,該模型就是Hamilton(1989)的馬爾可夫自回歸。
每個時期,區(qū)制現(xiàn)在都根據(jù)以下的時變轉移概率矩陣進行轉移。

其中 pij,tipij,t 是在 t 期間從區(qū)制 i?轉移到區(qū)制 j?的概率,并定義為。

與其將轉移概率作為最大似然法的一部分進行估計,不如估計回歸系數(shù)βij。這些系數(shù)將轉移概率與預先確定的或外生的變量xt-1向量聯(lián)系起來。
[9]:
# 用標準差進行標準化
data['p']['1960-01-01':].std() / data['dlip'][:'1959-12-01'].std()
# 繪制數(shù)據(jù)
data['dlip'].plot( )
data['dmdlleading'].plot( ?figsize=(13,3));


時變的轉移概率是由exog_tvtp參數(shù)指定的。
?
這里我們展示了模型擬合的另一個特點--使用隨機搜索的MLE起始參數(shù)。因為馬爾科夫轉換模型的特征往往是似然函數(shù)的許多局部最大值,執(zhí)行初始優(yōu)化步驟有助于找到最佳參數(shù)。
?
下面,我們規(guī)定對起始參數(shù)向量的20個隨機擾動進行檢查,并將最好的一個作為實際的起始參數(shù)。由于搜索的隨機性,我們事先設置了隨機數(shù)種子,以便結果復制。
markovreg(data, k=2, order=4)
fit(search=20)
summary()
?


下面我們繪制了經(jīng)濟運行在低生產(chǎn)狀態(tài)下的平滑概率,并再次將NBER的衰退情況納入其中進行比較。
ax.plot(smoo_marg_prob[0])

利用時間變化的轉移概率,我們可以看到低生產(chǎn)狀態(tài)的預期持續(xù)時間如何隨時間變化。
?
exp_dura[0].plot( figsize=(12,3));

在經(jīng)濟衰退期間,低生產(chǎn)狀態(tài)的預期持續(xù)時間要比經(jīng)濟擴張時高得多。
最受歡迎的見解
1.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
2.R語言中使用排隊論預測等待時間
3.R語言中實現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機制轉換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
7.Python基于粒子群優(yōu)化的投資組合優(yōu)化
8.R語言馬爾可夫轉換模型研究交通傷亡人數(shù)事故預測
9.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用