拓端數據tecdat|Python用時變馬爾可夫區制轉換(Markov regime switching)自回歸模型分析經濟時間序列


原文鏈接:http://tecdat.cn/?p=22617

原文出處:拓端數據部落公眾號

 

本文提供了一個在統計模型中使用馬可夫轉換模型模型的例子,來復現Kim和Nelson(1999)中提出的一些結果。它應用了Hamilton(1989)的濾波器和Kim(1994)的平滑器。

  1.  
     
  2.  
    %matplotlib inline
  3.  
     
  4.  
    import numpy as np
  5.  
    import pandas as pd
  6.  
    import statsmodels.api as sm
  7.  
     
  8.  
    from pandas_datareader.data import DataReader
  9.  
    from datetime import datetime
  10.  
    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)算法來快速找到最大值。

  1.  
    [2]:
  2.  
    #獲取數據
  3.  
    hamilton= pd.read('gndata').iloc[1:]
  4.  
     
  5.  
     
  6.  
    # 繪制數據
  7.  
    hamilton.plot()
  8.  
     
  9.  
    # 擬合模型
  10.  
    Markovreg(hamilton)

summary()

我們繪制了經過過濾和平滑處理的衰退概率。濾波指的是基於截至並包括時間tt(但不包括時間t+1,...,Tt+1,...,T)的數據對時間t的概率估計。平滑化是指使用樣本中的所有數據對時間t的概率進行估計。

 

  1.  
    fig, axes = plt.subplots(2, figsize=(7,7))
  2.  
    ax = axes[0]
  3.  
    ax.plot(margl_prob[0])
  4.  
     
  5.  
     
  6.  
    ax = axes[1]
  7.  
    ax.plot(smoomarginal_pro[0])
  8.  
     

 

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

print(expected_du)

在這種情況下,預計經濟衰退將持續約一年(4個季度),擴張約兩年半。
 

Kim, Nelson, and Startz (1998) 三狀態方差轉換模型。
 

這個模型展示了帶有區制異方差(方差轉換)和無平均效應的估計。

模型是:

 

由於沒有自回歸成分,這個模型可以用MarkovRegression類來擬合。由於沒有平均效應,我們指定趨勢='nc'。假設轉換方差有三個區制,所以我們指定k_regimes=3和switching_variance=True(默認情況下,方差被假定為在不同區制下是相同的)。

  1.  
     
  2.  
    raw = pd.read_table(ew ,engine='python')
  3.  
     
  4.  
    # 繪制數據集
  5.  
    plot( figsize=(12, 3))
  6.  
     

 

res_kns.summary()
 

 

下面我們繪制了處於每個區制中的概率;只有在少數時期,才有可能出現高方差區制。

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

Filardo (1994) 時變的轉移概率

這個模型展示了用時變的轉移概率進行估計。

在上述模型中,我們假設轉移概率在不同時期是不變的。在這里,我們允許概率隨着經濟狀況的變化而變化。否則,該模型就是Hamilton(1989)的馬爾可夫自回歸。
每個時期,區制現在都根據以下的時變轉移概率矩陣進行轉移。

其中 pij,tipij,t 是在 t 期間從區制 i 轉移到區制 j 的概率,並定義為。

與其將轉移概率作為最大似然法的一部分進行估計,不如估計回歸系數βij。這些系數將轉移概率與預先確定的或外生的變量xt-1向量聯系起來。

[9]:
  1.  
     
  2.  
     
  3.  
     
  4.  
    # 用標准差進行標准化
  5.  
     
  6.  
    data['p']['1960-01-01':].std() / data['dlip'][:'1959-12-01'].std()
  7.  
     
  8.  
     
  9.  
    # 繪制數據
  10.  
    data['dlip'].plot( )
  11.  
     
  12.  
    data['dmdlleading'].plot( figsize=(13,3));

 

 

時變的轉移概率是由exog_tvtp參數指定的。
 

這里我們展示了模型擬合的另一個特點--使用隨機搜索的MLE起始參數。因為馬爾科夫轉換模型的特征往往是似然函數的許多局部最大值,執行初始優化步驟有助於找到最佳參數。
 

下面,我們規定對起始參數向量的20個隨機擾動進行檢查,並將最好的一個作為實際的起始參數。由於搜索的隨機性,我們事先設置了隨機數種子,以便結果復制。

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

 


下面我們繪制了經濟運行在低生產狀態下的平滑概率,並再次將NBER的衰退情況納入其中進行比較。

  1.  
     
  2.  
    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.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM