模拟
矢量误差校正(VEC)模型的蒙特卡罗模拟
描述
例子
从VEC模型模拟响应序列
考虑以下七个宏观经济系列的VEC模型,然后将模型与数据拟合。
国内生产总值(GDP)
GDP隐性价格平减指数
员工薪酬
所有人的非农业务部门工作时间
实际联邦基金利率
个人消费支出
国内私人投资总额
假设协整秩为4和一个短期项是合适的,即考虑VEC(1)模型。
加载Data_USEconVECModel
数据集。
负载Data_USEconVECModel
有关数据集和变量的更多信息,请输入描述
在命令行。
通过在单独的图上绘制序列来确定是否需要对数据进行预处理。
图;次要情节(2、2、1)情节(FRED.Time FRED.GDP);标题(“本地生产总值”);ylabel (“指数”);包含(“日期”);次要情节(2 2 2)情节(FRED.Time FRED.GDPDEF);标题(“GDP平减指数”);ylabel (“指数”);包含(“日期”);次要情节(2,2,3)情节(FRED.Time FRED.COE);标题(“已付雇员补偿”);ylabel (“数十亿美元”);包含(“日期”);次要情节(2,2,4)情节(FRED.Time FRED.HOANBS);标题(“非农业行业营业时间”);ylabel (“指数”);包含(“日期”);
图;次要情节(2、2、1)情节(FRED.Time FRED.FEDFUNDS);标题(“联邦基金利率”);ylabel (“百分比”);包含(“日期”);次要情节(2 2 2)情节(FRED.Time FRED.PCEC);标题(“消费支出”);ylabel (“数十亿美元”);包含(“日期”);次要情节(2,2,3)情节(FRED.Time FRED.GPDI);标题(“国内私人投资总额”);ylabel (“数十亿美元”);包含(“日期”);
通过应用对数变换,稳定除联邦基金利率外的所有系列。将生成的系列按100缩放,以便所有系列都在相同的比例上。
弗雷德。GDP = 100*log(FRED.GDP);弗雷德。GDPDEF = 100*log(FRED.GDPDEF);弗雷德。COE = 100*log(FRED.COE); FRED.HOANBS = 100*log(FRED.HOANBS); FRED.PCEC = 100*log(FRED.PCEC); FRED.GPDI = 100*log(FRED.GPDI);
使用简写语法创建VECM(1)模型。指定变量名。
Mdl = vecm(7,4,1);Mdl。SeriesNames = FRED.Properties.VariableNames
Mdl = vecm与属性:说明:“7维秩= 4 VEC(1)模型与线性时间趋势”SeriesNames:“GDP”“GDPDEF”“COE”…和4更NumSeries: 7等级:4 P: 2常数:[7×1的向量nan]调整:[7×4矩阵nan)协整:[7×4矩阵nan)影响:[7×7矩阵nan] CointegrationConstant:[4×1的向量nan] CointegrationTrend:[4×1的向量nan]短期的:{7×7矩阵nan}在滞后[1]的趋势:[7×1的向量nan]β:协方差矩阵[7×0]:[7×7矩阵nan)
Mdl
是一个结果
模型对象。所有属性包含南
值对应于给定数据要估计的参数。
使用整个数据集和默认选项估计模型。
EstMdl =估计(Mdl,FRED.Variables)
EstMdl = vecm属性:描述:“7维Rank = 4 VEC(1)模型”SeriesNames:“GDP”“GDPDEF”“COE”…和4更多NumSeries: 7排名:4 P: 2常量:[14.1329 8.77841 -7.20359…调整:[7×4矩阵]协整:[7×4矩阵]影响:[7×7矩阵]协整常量:[-28.6082 109.555 -77.0912…and 1 more]' CointegrationTrend: [4×1 vector of zero] ShortRun: {7×7 matrix} at lag[1]趋势:[7×1 vector of zero] Beta: [7×0 matrix]协方差:[7×7 matrix]
EstMdl
是估计的结果
模型对象。它是完全指定的,因为所有参数都有已知值。默认情况下,估计
通过从模型中去除协整趋势项和线性趋势项,对H1 Johansen VEC模型形式施加约束。从估计中排除参数相当于将相等约束施加到零。
模拟来自估计模型的响应序列路径,其长度等于数据中的路径。
rng (1);%用于再现性nummobs = size(FRED,1);Y =模拟(EstMdl, nummobs);
Y
是一个240 × 7的模拟响应矩阵。中的变量名对应于列EstMdl。SeriesNames
.
使用过滤器模拟响应
说明之间的关系模拟
而且过滤器
通过估计Johansen丹麦数据集中四个响应系列的4-D VEC(1)模型。将拟合的模型和历史数据作为初始值,模拟单路径响应,然后使用相同的预采样响应,通过估计模型筛选随机的高斯扰动集。
加载约翰森的丹麦经济数据。
负载Data_JDanish
变量说明请输入描述
.
创建一个默认的4-D VEC(1)模型。假设协整秩为1是合适的。
Mdl = vecm(4,1,1);Mdl。SeriesNames = DataTable.Properties.VariableNames
Mdl = vecm与属性:说明:“4维秩= 1 VEC(1)模型与线性时间趋势”SeriesNames:“M2”“Y”“IB”…和1个更多NumSeries: 4排名:1 P: 2常量:[4×1 NaNs向量]调整:[4×1 NaNs矩阵]协整:[4×1 NaNs矩阵]影响:[4×4 NaNs矩阵]协整常量:NaN协整趋势:NaN ShortRun: {4×4 NaNs矩阵}滞后[1]趋势:[4×1 NaNs向量]Beta: [4×0矩阵]协方差:[4×4 NaNs矩阵]
使用整个数据集估计VEC(1)模型。指定H1* Johansen模型表单。
EstMdl =估计(Mdl,数据,“模型”,“H1 *”);
的结果时模拟
而且过滤器
,采取这些行动是很重要的。
设置相同的随机数种子使用
rng
.属性指定相同的预采样响应数据
“Y0”
名称-值对参数。
设置默认的随机种子。通过将估计的模型传递给模拟
.指定整个数据集作为预示例。
rng默认的;YSim =模拟(EstMdl,100,“Y0”、数据);
YSim
是模拟响应的100 × 4矩阵。列对应于变量的列EstMdl。SeriesNames
.
设置默认的随机种子。从标准高斯分布模拟4个系列的100个观测值。
rng默认的;Z = randn(100,4);
通过估计模型对高斯值进行滤波。指定整个数据集作为预示例。
YFilter = filter(EstMdl,Z,“Y0”、数据);
YFilter
是模拟响应的100 × 4矩阵。列对应于变量的列EstMdl。SeriesNames
.在过滤干扰之前,过滤器
尺度Z
中模型协方差的下三角Cholesky因子EstMdl。Covariance
.
比较两者的结果反应过滤器
而且模拟
.
(YSim - YFilter)'*(YSim - YFilter)
ans =4×40 0 0 0 0 0 0 0 0 0 0
结果是相同的。
模拟多个响应路径
考虑三个假设响应序列的VEC(1)模型。
创新是均值为0的多元高斯分布和协方差矩阵
为参数值创建变量。
调整= [-0.3 0.3;-0.2 - 0.1;1 0];协整= [0.1 -0.7;-0.2 - 0.5;0.2 - 0.2);ShortRun = {[0.]0.1 - 0.2;0.2 -0.2 0;0.7 -0.2 0.3]}; Constant = [-1; -3; -30]; Trend = [0; 0; 0]; Covariance = [1.3 0.4 1.6; 0.4 0.6 0.7; 1.6 0.7 5];
创建一个结果
模型对象使用适当的名称-值对参数表示VEC(1)模型。
Mdl = vecm(“调整”调整,协整的协整,...“不变”常数,“短期的”短期的,“趋势”的趋势,...协方差的、协方差);
Mdl
是否有效地完全指定结果
模型对象。也就是说,协整常数和线性趋势是未知的,但由于总体常数和趋势参数是已知的,因此模拟观测或预测不需要协整常数和线性趋势。
模拟100个观测值的1000条路径。返回创新(缩放扰动)。
Numpaths = 1000;Numobs = 100;rng (1);%用于再现性[Y,E] =模拟(Mdl, nummobs,“NumPaths”, numpaths);
Y
是一个100 × 3 × 1000的模拟响应矩阵。E
矩阵的维数是否与的维数对应Y
,但表示模拟的、缩放的扰动。列对应于响应变量名Mdl。SeriesNames
.
对于每个时间点,计算所有路径之间模拟响应的平均向量。
MeanSim = mean(Y,3);
MeanSim
是一个100 × 7的矩阵,包含每个时间点模拟响应的平均值。
绘制模拟反应及其平均值。
图;为j = 1:Mdl。NumSeriessubplot(2,2,j) plot(squeeze(Y(:,j,:)),“颜色”, 0.8, 0.8, 0.8)标题(Mdl.SeriesNames {j});持有在情节(MeanSim (:, j));包含(“时间指数”)举行从结束
输入参数
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字
在报价。
例子:Y0, Y0, X, X
使用矩阵Y0
作为预样响应和矩阵X
作为回归分量中的预测数据。
Y0
- - - - - -Presample反应
数字矩阵|数字数组
为模型提供初始值的预示例响应,由逗号分隔的对组成“Y0”
和一个numpreobs
——- - - - - -numseries
数值矩阵或numpreobs
——- - - - - -numseries
——- - - - - -numprepaths
数字数组。
numpreobs
是预采样观测数。numseries
是响应序列的个数(Mdl。NumSeries
).numprepaths
是预采样响应路径的数量。
行对应于预采样观测值,最后一行包含最新的预采样观测值。Y0
至少要有Mdl。P
行。如果你提供的行数比需要的多,模拟
使用最新的Mdl。P
观察。
中的响应序列名称必须与列对应Mdl。SeriesNames
.
页面对应于独立的路径。
默认情况下,模拟
设置任何必要的预采样观察。
对于无回归分量的平稳VAR过程,
模拟
将预采样观测值设置为无条件平均值对于包含回归成分的非平稳过程或模型,
模拟
将预采样观测值设置为零。
数据类型:双
X
- - - - - -预测数据
数字矩阵
模型中回归组件的预测器数据,指定为逗号分隔的对,由“X”
和一个数字矩阵包含numpreds
列。
numpreds
是预测变量的数量(大小(Mdl.Beta, 2)
).
行对应观测值,最后一行包含最新观测值。X
至少要有numobs
行。如果你提供的行数比需要的多,模拟
只使用最新版本numobs
观察。模拟
在预采样期间不使用回归组件。
列对应于单独的预测变量。所有预测变量都出现在每个响应方程的回归分量中。
模拟
适用于X
到每个路径(页);也就是说,X
表示观测到的预测器的一条路径。
默认情况下,模拟
排除回归组件,不管它是否存在于Mdl
.
数据类型:双
YF
- - - - - -未来多元反应系列
数字矩阵|数字数组
用于条件模拟的未来多元响应序列,指定为由逗号分隔的对组成“。”
和一个数字矩阵或数组包含numseries
列。
行对应模拟视界中的观测值,第一行是最早的观测值。具体地说,行j
在采样路径中k
(YF (
)内载有回应j
:,k
)j
未来的时期。YF
至少要有numobs
行来覆盖模拟视界。如果你提供的行数比需要的多,模拟
只使用第一个numobs
行。
中的响应变量名必须与列对应Mdl。SeriesNames
.
页面对应于示例路径。具体来说,路径k
(YF (:,:
)捕捉响应序列从过去的预样本演化而来的状态或知识(k
)Y0
)的未来。
如果
YF
是矩阵吗模拟
适用于YF
给每一个numpaths
输出路径(见NumPaths
).否则,
YF
至少要有numpaths
页面。如果你提供了多余的页数,模拟
只使用第一个numpaths
页面。
的元素YF
可以是数值标量或缺失值(由南
值)。模拟
将数值标量视为预先已知的确定性未来响应,例如由策略设置的响应。模拟
模拟对应的响应南
值以已知值为条件。
默认情况下,YF
数组由什么组成南
表示完全不了解所有模拟响应的未来状态的值。因此,模拟
获取输出响应Y
从常规的无条件蒙特卡罗模拟。
详情请参见算法.
例子:考虑模拟由四个响应序列组成的VEC模型的一条路径。假设你对一些响应的未来值有先验知识,你想根据你的知识来模拟未知的响应。指定YF
作为一个矩阵,包含你知道的值,并使用南
对于您不知道但想要模拟的值。例如,'YF',[NaN 2 5 NaN;南南0.1南;楠楠楠楠]
指定您不知道第一个和第四个响应系列的未来值;您知道第二个响应序列中周期1的值,但不知道其他值;你知道第三个响应序列中周期1和2的值,但不知道周期3的值。
数据类型:双
请注意
南
值Y0
而且X
指出缺失的值。模拟
通过按列表删除从数据中删除缺失的值。如果Y0
是一个三维数组,那么模拟
执行这些步骤。
水平连接页面以形成
numpreobs
——- - - - - -numpaths * numseries
矩阵。删除至少包含一个的任何行
南
从连接的数据。
在观测缺失的情况下,从多个路径得到的结果Y0
可能不同于从每个路径单独获得的结果。
有关条件模拟(请参阅YF
),如果X
包含最新版本中任何缺失的值numobs
观察,然后模拟
抛出错误。
输出参数
E
-模拟多元模型创新系列
数值矩阵|数值数组
模拟多元模型创新系列,作为numobs
——- - - - - -numseries
数值矩阵或numobs
——- - - - - -numseries
——- - - - - -numpaths
数字数组。
如果指定条件模拟的未来响应(请参阅YF
名-值对参数),然后模拟
从已知值中推断创新YF
并将推断出的创新放在E
.对于缺失的观察YF
,模拟
从任意已知值条件下的高斯分布中绘制,并将绘制的位置放在E
.
算法
模拟
使用此过程对所有页面执行条件模拟k
= 1,…,numpaths
对于每一次t
= 1,…,numobs
.模拟
推断(或反向过滤)创新E (
从已知的未来反应t
:,k
)YF (
.为t
:,k
)E (
,t
:,k
)模拟
模仿的模式南
的值。YF (
.t
:,k
)缺少的元素
E (
,t
:,k
)模拟
执行这些步骤。画
Z1
的已知元素条件下的随机标准高斯分布扰动E (
.t
:,k
)规模
Z1
条件协方差矩阵的下三角Cholesky因子。也就是说,Z2
=L * Z1
,在那里l
=胆固醇(C,“低”)
而且C
为条件高斯分布的协方差。嫁祸于
Z2
中的相应缺失值E (
.t
:,k
)
中缺少的值
YF (
,t
:,k
)模拟
通过模型过滤相应的随机创新Mdl
.
模拟
使用此过程来确定时间原点t0包含线性时间趋势的模型。
参考文献
[1]汉密尔顿,詹姆斯D。时间序列分析.普林斯顿,新泽西州:普林斯顿大学出版社,1994。
[2]约翰森,S。协整向量自回归模型中的似然推理.牛津:牛津大学出版社,1995年。
[3]Juselius, K。协整VAR模型.牛津:牛津大学出版社,2006年。
[4]Lutkepohl, H。多重时间序列分析新导论.柏林:施普林格,2005。
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。