原文連結:http://tecdat.cn/?p=19918
最近我們被客戶要求撰寫關於馬爾可夫區制轉換動態回歸的研究報告,包括一些圖形和統計輸出。
本文估計實際GDP增長率的兩狀態Markov區制轉換動態回歸模型 ( 點擊文末「閱讀原文」獲取完整代碼數據******** )。
創建模型進行估計
通過指定轉移矩陣和兩個區制的AR(0)(僅常數)子模型的兩狀態離散時間馬爾可夫鏈,為樸素估計量創建馬爾可夫轉換動態回歸模型。標記狀態。
html
mc(NaN(2),'StateNames',["增長" "衰退"]);
加載和預處理數據
加載GDP數據集。
Data 包含1947:Q1-2005:Q2期間實際GDP的季度數據。估計周期 為1947:Q2-2004:Q2。
通過以下方式將數據轉換為年度序列:
html
diff(Data(2:230))./Data(2:229); % 季度比率
100*((1 + qrate).^4 - 1); % 年度比率
估計模型
模型擬合Mdl 年利率序列 arate。
html
estimate(Mdl,Mdl0,arate);
EstMdl 是估計的(完全指定的)馬爾可夫轉換動態回歸模型。 EstMdl.Switch 是估計的離散時間馬爾可夫鏈模型(dtmc 對象), EstMdl.Submodels 是估計的單變量VAR(0)模型(varm 對象)的向量。
顯示估計的特定於狀態的動態模型。
html
varm with properties:
Description: "ARIMA(0,0,0) Model (Gaussian Distribution)"
SeriesNames: "Y1"
NumSeries: 1
P: 0
Constant: 4.90146
AR: {}
Trend: 0
Beta: [1×0 matrix]
Covariance: 12.087
1-Dimensional VAR(0) Model
html
varm with properties:
Description: "ARIMA(0,0,0) Model (Gaussian Distribution)"
SeriesNames: "Y1"
NumSeries: 1
P: 0
Constant: 0.0084884
AR: {}
Trend: 0
Beta: [1×0 matrix]
Covariance: 12.6876
1-Dimensional VAR(0) Model
顯示估計的狀態轉移矩陣。
html
2×2
0.9088 0.0912
0.2303 0.7697
估計後的EM算法
在估計馬爾可夫轉換動態回歸模型中考慮模型和數據 。
創建部分指定模型進行估計。
創建完全指定的模型,其中包含估計過程的初始參數值。
加載並預處理數據。
html
diff(Data(2:230))./Data(2:229);
100*((1 + qrate).^4 - 1);
使模型擬合數據。當估計過程終止時,繪製對數似然比與疊代步驟。
html
Plot(Mdl,Mdl0);
點擊標題查閱往期內容
Matlab馬爾可夫鏈蒙特卡羅法(MCMC)估計隨機波動率(SV,Stochastic Volatility) 模型
左右滑動查看更多
01
02
03
04
使模型擬合模擬數據
使用來自已知數據生成過程(DGP)的模擬數據評估估計準確性。本示例使用任意參數值。
為DGP創建模型
為轉換區制創建一個完全指定的兩狀態離散時間馬爾可夫鏈模型。
html
P = [0.7 0.3; 0.1 0.9];
對於每個狀態,為過程創建一個完全指定的AR(1)模型。
html
% 常數
C1 = 4;
C2 = -1;
% 自回歸係數
AR1 = 0.5;
AR2 = 0.3;
% 方差
V1 = 3;
V2 = 2;
% AR 子模型
arima('Constant',C1,'AR',AR1,'Variance',V1);
為DGP創建完全指定的Markov轉換動態回歸模型。
模擬來自DGP的路徑
從DGP生成10條長度為1000的隨機路徑。
html
rng(1); % 重現性
N = 10;
n = 1000;
simulate(DGP,n,'Numpaths',N);
Data 是模擬的1000 x 10矩陣。
創建估計模型
創建一個部分指定的馬爾可夫轉換動態回歸模型,該模型具有與數據生成過程相同的結構,但是指定了未知的轉移矩陣和未知的子模型係數。
創建包含初始值的模型
創建一個完全指定的馬爾可夫轉換動態回歸模型,該模型具有與相同的結構 Mdl,但是將所有可估計的參數都設置為初始值。
html
P0 = 0.5*ones(2);
dtmc(P0);
ms(mc0,[mdl01,mdl02]);
估計模型
使模型擬合每個模擬路徑。對於每條路徑,在EM算法的每次疊代中繪製對數似然圖。
html
figure
hold on
for i = 1:N
estimate(Data(:,i),'Plot',true);
end
hold off
點擊標題查閱往期內容
R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)採樣
左右滑動查看更多
01
02
03
04
評估準確性
計算每個估計參數的蒙特卡洛平均值。
將總體參數與相應的蒙特卡洛估計進行比較。
html
DGPvsEstimate = 6×2
5.0000 5.0260
-2.0000 -1.9615
4.0000 3.9710
2.0000 1.9903
0.4000 0.4061
0.2000 0.2017
html
P = 2×2
0.7000 0.3000
0.1000 0.9000
html
PEstimate = 2×2
0.7065 0.2935
0.1023 0.8977
預採樣數據
考慮 估計馬爾可夫轉換動態回歸模型中的數據,但假設關注期間為1960:Q1–2004:Q2。另外,考慮向每個子模型添加一個自回歸項。
創建部分指定的馬爾可夫轉換動態回歸模型進行估計。指定AR(1)子模型。
html
arima(1,0,0);
ms(mc,[mdl; mdl]);
由於子模型是AR(1),因此每個子模型都需要進行一次預採樣觀察以初始化其動態分量以進行估計。
創建包含用於估計過程的初始參數值的模型。
html
P0 = 0.5*ones(2);
mc(P0,'StateNames');
加載數據。將整個集合轉換為年化利率序列。
使用與年率序列相關的日期來確定預採樣和估計採樣周期。由於轉換應用了一階差分,因此必須從原始樣本中刪除第一個觀察日期。
html
dates = datetime(dates(2:end),'ConvertFrom','datenum',...
'Format','yyyy:QQQ','Locale','en_US');
estPrd = datetime(["1960:Q2" "2004:Q2"],'InputFormat','yyyy:QQQ',...
'Format','yyyy:QQQ','Locale','en_US');
使模型擬合估計樣本數據。指定預採樣觀測值,並在估計過程終止時在每次疊代時繪製對數似然度。
訪問預期的平滑狀態機率和對數似然
在估計馬爾可夫轉換動態回歸模型中考慮模型和數據 。
創建部分指定的模型進行估計。
創建完全指定的模型,其中包含估計過程的初始參數值。
加載並預處理數據。
使模型擬合數據。當算法終止時,返回預期的平滑狀態機率和對數似然。
html
[EstMdl,SS,logL] = estimate(Mdl,Mdl0,arate);
SS 是預期平滑狀態機率的228 x 2矩陣;行對應於估計樣本中的周期,列對應於方案。 logL 是最終的對數似然。
顯示估計樣本中最後一個時期的預期平滑狀態機率,並顯示最終對數似然。
html
ans = 1×2
0.8985 0.1015
html
logL = -639.4962
執行約束估計
將模擬數據擬合到具有VARX子模型的Markov轉換動態回歸模型。指定用於估計的相等約束。
為DGP創建模型
為轉換區制創建一個完全指定的三態離散時間馬爾可夫鏈模型。
html
P = [0.8 0.1 0.1; 0.2 0.6 0.2; 0 0.1 0.9];
mc = dt(P);
對於每種狀態,為響應過程創建一個完全指定的VARX(1)模型。為所有子模型指定相同的模型常數和滯後1 AR係數矩陣。對於每個模型,為一個外生變量指定不同的回歸係數。
html
% 常數
C = [1;-1];
% 自回歸係數
AR = {[0.6 0.1; 0.4 0.2]};
% 回歸係數
Beta1 = [0.2;-0.4];
% VAR 子模型
dgp = varm('Constant',C,'AR',AR,'Covariance',5*eye(2));
為DGP創建完全指定的Markov轉換動態回歸模型。
html
ms(mc,[dgp1; dgp2; dgp3]);
模擬來自DGP的數據
通過從均值0和方差100的高斯分布中生成1000個觀測值來模擬外生序列的數據。
html
rng(1); % 重現性
X = 10*randn(1000,1);
從DGP生成長度為1000的隨機路徑。為子模型回歸指定模擬的外部數據。
html
Data = simulate(DGP,1000,'X',X);
Data 是模擬的1000 x 1向量。
創建估計模型
創建一個部分指定的馬爾可夫轉換動態回歸模型,該模型具有與數據生成過程相同的結構,但是指定了未知的轉換矩陣和未知的回歸係數。指定常數和AR係數矩陣的真值。
html
ms(mcEst,[mdl; mdl; mdl]);
由於常數和AR係數矩陣的值被指定在 Mdl, estimate 將它們作為用於估計等式約束。
創建包含初始值的模型
創建具有與相同結構的完全指定的馬爾可夫轉換動態回歸模型 Mdl,但將所有可估計參數設置為初始值,並將具有相等約束的參數設置為中指定的值 Mdl。
估計模型
使模型擬合模擬數據。指定回歸的外部數據。在EM算法的每次疊代中繪製對數似然。
html
figure
EstMdl = estimate(Mdl,Mdl0,Data,'X',X,'IterationPlot',true);
評估準確性
將估計的回歸係數向量和轉移矩陣與其真實值進行比較。
html
Beta1 = 2×1
0.2000
-0.4000
html
Beta1Estimate = 2×1
0.1596
-0.4040
html
Beta2 = 2×1
0.6000
-1.0000
html
Beta2Estimate = 2×1
0.5888
-0.9771
html
Beta3 = 2×1
0.9000
-1.3000
html
Beta3Estimate = 2×1
0.8987
-1.2991
html
P = 3×3
0.8000 0.1000 0.1000
0.2000 0.6000 0.2000
0 0.1000 0.9000
html
PEstimate = 3×3
0.7787 0.0856 0.1357
0.1366 0.6906 0.1727
0.0086 0.0787 0.9127
點擊文末 「閱讀原文」
獲取全文完整代碼數據資料。
本文選自《Matlab馬爾可夫區制轉換動態回歸模型估計GDP增長率》。
點擊標題查閱往期內容
R語言隱馬爾可夫模型HMM連續序列重要性重抽樣CSIR估計隨機波動率模型SV分析股票收益率時間序列
馬爾可夫Markov區制轉移模型分析基金利率
馬爾可夫區制轉移模型Markov regime switching
時變馬爾可夫區制轉換MRS自回歸模型分析經濟時間序列
馬爾可夫轉換模型研究交通傷亡人數事故時間序列預測
如何實現馬爾可夫鏈蒙特卡羅MCMC模型、Metropolis算法?
Matlab用BUGS馬爾可夫區制轉換Markov switching隨機波動率模型、序列蒙特卡羅SMC、M H採樣分析時間序列
R語言BUGS序列蒙特卡羅SMC、馬爾可夫轉換隨機波動率SV模型、粒子濾波、Metropolis Hasting採樣時間序列分析
matlab用馬爾可夫鏈蒙特卡羅 (MCMC) 的Logistic邏輯回歸模型分析汽車實驗數據
stata馬爾可夫Markov區制轉移模型分析基金利率
PYTHON用時變馬爾可夫區制轉換(MRS)自回歸模型分析經濟時間序列
R語言使用馬爾可夫鏈對營銷中的渠道歸因建模
matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計
R語言隱馬爾可夫模型HMM識別不斷變化的股票市場條件
R語言中的隱馬爾可夫HMM模型實例
用機器學習識別不斷變化的股市狀況—隱馬爾科夫模型(HMM)
Matlab馬爾可夫鏈蒙特卡羅法(MCMC)估計隨機波動率(SV,Stochastic Volatility) 模型
MATLAB中的馬爾可夫區制轉移(Markov regime switching)模型
Matlab馬爾可夫區制轉換動態回歸模型估計GDP增長率
R語言馬爾可夫區制轉移模型Markov regime switching
stata馬爾可夫Markov區制轉移模型分析基金利率
R語言如何做馬爾可夫轉換模型markov switching model
R語言隱馬爾可夫模型HMM識別股市變化分析報告
R語言中實現馬爾可夫鏈蒙特卡羅MCMC模型