Matlab马尔可夫区制转换动态回归模型估计GDP增长率

本文估计实际GDP增长率的两状态Markov区制转换动态回归模型 。

通过指定转移矩阵和两个区制的AR(0)(仅常数)子模型的两状态离散时间马尔可夫链,为朴素估计量创建马尔可夫转换动态回归模型。标记状态。

由Kaizong Ye,Weilong Zhang撰写

加载GDP数据集。

Data 包含1947:Q1-2005:Q2期间实际GDP的季度数据。估计周期  为1947:Q2-2004:Q2。

通过以下方式将数据转换为年度序列:

  1. 估计期内将数据转换为季度比率
  2. 将季度比率年度化
diff(Data(2:230))./Data(2:229); % 季度比率
100*((1 + qrate).^4 - 1);       % 年度比率

估计模型

估计模型

模型拟合Mdl 年利率序列 arate

 estimate(Mdl,Mdl0,arate);

EstMdl 是估计的(完全指定的)马尔可夫转换动态回归模型。 EstMdl.Switch 是估计的离散时间马尔可夫链模型(dtmc 对象), EstMdl.Submodels 是估计的单变量VAR(0)模型(varm 对象)的向量。

显示估计的特定于状态的动态模型。

 
  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
  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

显示估计的状态转移矩阵。


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加


2×2
 
    0.9088    0.0912
    0.2303    0.7697
 

估计后的EM算法

估计马尔可夫转换动态回归模型中考虑模型和数据 。

创建部分指定模型进行估计

创建完全指定的模型,其中包含估计过程的初始参数值。

加载并预处理数据。

diff(Data(2:230))./Data(2:229); 
100*((1 + qrate).^4 - 1);       

使模型拟合数据。当估计过程终止时,绘制对数似然比与迭代步骤。

Plot(Mdl,Mdl0);

使模型拟合模拟数据

使用来自已知数据生成过程(DGP)的模拟数据评估估计准确性。本示例使用任意参数值。

为DGP创建模型

为转换区制创建一个完全指定的两状态离散时间马尔可夫链模型。

P = [0.7 0.3; 0.1 0.9];

对于每个状态,为过程创建一个完全指定的AR(1)模型。

% 常数
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的随机路径。

rng(1); % 重现性
N = 10;
n = 1000;
simulate(DGP,n,'Numpaths',N);

Data 是模拟的1000 x 10矩阵。

创建估计模型

创建一个部分指定的马尔可夫转换动态回归模型,该模型具有与数据生成过程相同的结构,但是指定了未知的转移矩阵和未知的子模型系数。

创建包含初始值的模型

创建一个完全指定的马尔可夫转换动态回归模型,该模型具有与相同的结构 Mdl,但是将所有可估计的参数都设置为初始值。

P0 = 0.5*ones(2);
dtmc(P0);
 
ms(mc0,[mdl01,mdl02]);

估计模型


MATLAB中的马尔可夫区制转移(Markov regime switching)模型

阅读文章


使模型拟合每个模拟路径。对于每条路径,在EM算法的每次迭代中绘制对数似然图。

 
figure
hold on
 
for i = 1:N
 
    estimate(Data(:,i),'Plot',true);
    
    
end
 
hold off

评估准确性

计算每个估计参数的蒙特卡洛平均值。


随时关注您喜欢的主题


将总体参数与相应的蒙特卡洛估计进行比较。

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
 
P = 2×2
 
    0.7000    0.3000
    0.1000    0.9000
 

PEstimate = 2×2
 
    0.7065    0.2935
    0.1023    0.8977
 

预采样数据

考虑 估计马尔可夫转换动态回归模型中的数据,但假设关注期间为1960:Q1–2004:Q2。另外,考虑向每个子模型添加一个自回归项。

创建部分指定的马尔可夫转换动态回归模型进行估计。指定AR(1)子模型。

arima(1,0,0);
ms(mc,[mdl; mdl]);

由于子模型是AR(1),因此每个子模型都需要进行一次预采样观察以初始化其动态分量以进行估计。

创建包含用于估计过程的初始参数值的模型。

P0 = 0.5*ones(2);
mc(P0,'StateNames');

加载数据。将整个集合转换为年化利率序列。

使用与年率序列相关的日期来确定预采样和估计采样周期。由于转换应用了一阶差分,因此必须从原始样本中删除第一个观察日期。

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');

使模型拟合估计样本数据。指定预采样观测值,并在估计过程终止时在每次迭代时绘制对数似然度。

访问预期的平滑状态概率和对数似然

估计马尔可夫转换动态回归模型中考虑模型和数据 。

创建部分指定的模型进行估计

创建完全指定的模型,其中包含估计过程的初始参数值。

加载并预处理数据。

使模型拟合数据。当算法终止时,返回预期的平滑状态概率和对数似然。

[EstMdl,SS,logL] = estimate(Mdl,Mdl0,arate);

SS 是预期平滑状态概率的228 x 2矩阵;行对应于估计样本中的周期,列对应于方案。 logL 是最终的对数似然。

显示估计样本中最后一个时期的预期平滑状态概率,并显示最终对数似然。

ans = 1×2
 
    0.8985    0.1015
 
logL = -639.4962

执行约束估计

将模拟数据拟合到具有VARX子模型的Markov转换动态回归模型。指定用于估计的相等约束。

为DGP创建模型

为转换区制创建一个完全指定的三态离散时间马尔可夫链模型。

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系数矩阵。对于每个模型,为一个外生变量指定不同的回归系数。

% 常数
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转换动态回归模型。

ms(mc,[dgp1; dgp2; dgp3]);

模拟来自DGP的数据

通过从均值0和方差100的高斯分布中生成1000个观测值来模拟外生序列的数据。

rng(1); % 重现性
X = 10*randn(1000,1);

从DGP生成长度为1000的随机路径。为子模型回归指定模拟的外部数据。

Data = simulate(DGP,1000,'X',X);

Data 是模拟的1000 x 1向量。

创建估计模型

创建一个部分指定的马尔可夫转换动态回归模型,该模型具有与数据生成过程相同的结构,但是指定了未知的转换矩阵和未知的回归系数。指定常数和AR系数矩阵的真值。


ms(mcEst,[mdl; mdl; mdl]);

由于常数和AR系数矩阵的值被指定在 Mdl, estimate 将它们作为用于估计等式约束。

创建包含初始值的模型

创建具有与相同结构的完全指定的马尔可夫转换动态回归模型 Mdl,但将所有可估计参数设置为初始值,并将具有相等约束的参数设置为中指定的值 Mdl

估计模型

使模型拟合模拟数据。指定回归的外部数据。在EM算法的每次迭代中绘制对数似然。

figureEstMdl = estimate(Mdl,Mdl0,Data,'X',X,'IterationPlot',true);

评估准确性

将估计的回归系数向量和转移矩阵与其真实值进行比较。

Beta1 = 2×1
 
    0.2000
   -0.4000
 
Beta1Estimate = 2×1
 
    0.1596
   -0.4040
 
Beta2 = 2×1
 
    0.6000
   -1.0000
 
Beta2Estimate = 2×1
 
    0.5888
   -0.9771
 
Beta3 = 2×1
 
    0.9000
   -1.3000
 
Beta3Estimate = 2×1
 
    0.8987
   -1.2991
 
P = 3×3
 
    0.8000    0.1000    0.1000
    0.2000    0.6000    0.2000
         0    0.1000    0.9000
 
PEstimate = 3×3
 
    0.7787    0.0856    0.1357
    0.1366    0.6906    0.1727
    0.0086    0.0787    0.9127


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds