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

原文链接:http://tecdat.cn/?p=19918

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

创建模型进行估计

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

mc(NaN(2),'StateNames',["增长" "衰退"]);

加载和预处理数据

加载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: 1P: 0Constant: 4.90146AR: {}Trend: 0Beta: [1×0 matrix]Covariance: 12.087

1-Dimensional VAR(0) Modelvarm with properties:

Description: "ARIMA(0,0,0) Model (Gaussian Distribution)"SeriesNames: "Y1"NumSeries: 1P: 0Constant: 0.0084884AR: {}Trend: 0Beta: [1×0 matrix]Covariance: 12.6876

1-Dimensional VAR(0) Model

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


2×2

0.9088 0.09120.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]);

估计模型

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




figurehold on

for i = 1:N

estimate(Data(:,i),'Plot',true);



end

hold off

评估准确性

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

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


DGPvsEstimate = 6×2

5.0000 5.0260-2.0000 -1.96154.0000 3.97102.0000 1.99030.4000 0.40610.2000 0.2017

P = 2×2

0.7000 0.30000.1000 0.9000

PEstimate = 2×2

0.7065 0.29350.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.10000.2000 0.6000 0.20000 0.1000 0.9000

PEstimate = 3×3

0.7787 0.0856 0.13570.1366 0.6906 0.17270.0086 0.0787 0.9127

(0)

相关推荐