本文估计实际GDP增长率的两状态Markov区制转换动态回归模型 。
通过指定转移矩阵和两个区制的AR(0)(仅常数)子模型的两状态离散时间马尔可夫链,为朴素估计量创建马尔可夫转换动态回归模型。标记状态。
加载GDP数据集。
Data
包含1947:Q1-2005:Q2期间实际GDP的季度数据。估计周期 为1947:Q2-2004:Q2。
可下载资源
通过以下方式将数据转换为年度序列:
- 在估计期内将数据转换为季度比率
- 将季度比率年度化
diff(Data(2:230))./Data(2:229); % 季度比率
100*((1 + qrate).^4 - 1); % 年度比率
估计模型
区制转移模型也称为状态空间模型或动态线性模型,其基本思路是,时间序列存在于两个或多个状态,每个状态都有自己的概率分布,并且一个状态到另一个状态的转换由另一个过程或变量控制。区制转移模型有三种类型:阈值模型(Threshold models)、预测模型(Predictive models)和马尔科夫转换自回归模型(Markov switching autoregressive models)。
阈值模型观察到的变量超过阈值会触发状态转换。例如,价格跌破200天移动均线将触发“看跌状态”或下降趋势。预测模型,可以使用机器学习算法之类的预测方法,将GDP,失业,长期趋势,债券收益率,贸易平衡等宏观经济变量作为输入,并预测下一时期的风险。当模型预测高风险数字时,市场处于高风险状态。当模型预测低风险数字时,市场处于趋势状态。马尔科夫转换自回归模型(MSAM),假定状态为“隐藏状态”,并假定潜在状态的的转换遵循同质一阶马尔可夫链,而下一个状态的概率仅取决于当前状态。可以通过最大似然法来估计从一个状态到下一个状态的转移概率,通过使似然函数最大化来估计参数值。
估计模型
模型拟合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
显示估计的状态转移矩阵。
使模型拟合数据。当估计过程终止时,绘制对数似然比与迭代步骤。
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算法的每次迭代中绘制对数似然图。
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语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!