原文鏈接:http://tecdat.cn/?p=22617
原文出處:拓端數據部落公眾號
本文提供了一個在統計模型中使用馬可夫轉換模型模型的例子,來復現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));

在經濟衰退期間,低生產狀態的預期持續時間要比經濟擴張時高得多。

最受歡迎的見解
