此示例显示如何构建来自1990年至2010年的每个月的DIEBOLD LI模型。该示例还通过将自回归模型拟合到每个参数的时间序列来说明如何预测未来产量曲线。
本文可以在这里找到:
https://www.nber.org/papers/w10048
所使用的数据是每月1990年代到2010年的财政收益率为1 Mo,3莫,6莫,1 YR,2 YR,3 YR,5 YR,7 YR,10 YR,30 YR。
每日数据可以在这里找到:
数据存储在MATLAB®DATA文件中作为MATLAB数据集
目的。
加载data_usyieldcurve.%提取每个月的最后一天的数据月份= repmat((1990:2010)',1,12)';eomdates = lbusdate(月份日本(:),repmat((1:12)',21,1));lontleIndex = find(ismember(dataset.properties.obsnames,datestr(eomdates)));估计dataset = dataSet(lontleIndex,:);估计data = double(估计dataset);
Diebold和Li从尼尔森Siegel模型开始
并将其重写为以下内容:
上述模型允许以下列方式解释的因素:Beta1对应于屈服曲线的长期/水平,β2对应于短期/斜率,并且β3对应于中术术语/曲率。 确定最大化曲率的成熟度,并控制模型的指数衰减率。
Diebold和Li Advocate设置 最大化中期因子,β3的负载,在30个月内。这也将问题从非线性拟合到简单的线性回归转换。
%明确设置时因子lambdalambda_t = .0609;%构造因子负载的矩阵与数据相关的价值Timetomat = [3 6 9 12 24 36 60 84 120 240 360]';x = [(大小(timetomat))(1 - expda_t * timetomat))./(lambda_t * timetomat)......((1 - expda_t * timetomat))./(lambda_t * timetomat) - exp(-lambda_t * timetomat))];%绘制因子加载情节(Timetomat,x)标题('DieBold Li模型的因子装载,随时间因素为0.0609')Xlabel('成熟(月份)')ylim([0 1.1])传奇({'beta1'那'beta2'那'beta3'},'地点'那'东方的')
一种DieBoldli.
开发了对象以便于从产量数据拟合模型。这DieBoldli.
对象继承自orcurve.
对象,所以召集机会
那getDiscountactors.
那getParyields.
那GetForwardrates.
, 和托尔斯邮编
方法都实施。此外,该方法FityieldSfrombetas.
被实施以估计β参数给出了观察到的市场产量的Lambda参数。
这DieBoldli.
对象用于适用于1990年至2010年的每个月的DieBold Li模型。
%预先释放βBeta =零(尺寸(估计数据,1),3);%循环通过并拟合每月的每端产量曲线为了JDX = 1:大小(估计数据,1)tmpcurvemodel = dieboldli.fitbetasfromyields(eomdates(eomdates(jdx),lambda_t * 12,stayadd(eomdates(eomdates(JDX),30 * timetomat),估计数据(JDX,:)');beta(jdx,:) = [tmpcurvemodel.beta1 tmpcurvemodel.beta2 tmpcurvemodel.beta3];结尾
这里包含Diebold Li适合选定的日期
plotsettles = datenum({'30 -May-1997'那'31 -aug-1998'那'29 -Jun-2001'那'31 -oct-2005'});数字为了JDX = 1:长度(Plotsettles)子图(2,2,JDX)TMPIDX = find(strcmpi(strcmpi(reservationdataset.properties.obsnames,datestr(plotsettles(jdx))));tmpcurvemodel = dieboldli.fitbetasfromyields(plotsettles(jdx),lambda_t * 12,......StaysAdd(Plotsettles(JDX),30 * Timetomat),估计数据(tmpidx,:)');散射(Tainsettles(Plotsettles(JDX),30 * Timetomat),估计数据(TMPIDX,:))保持上Plottingdates =(Plotsettles(JDX)+30:30:Plotsettles(JDX)+ 30 * 360)';绘图(绘图,tmpcurvemodel.getparyields(绘图),'r-') 标题(['收益曲线'datestr(plotsettles(jdx))])dateTick结尾
DieBold Li模型可用于预测未来产量曲线。Diebold和Li提出将AR(1)模型拟合到每个测试阶段的时间序列。然后,该拟合模型可以用于预测每个参数的未来值,并通过延伸,未来产量曲线。
对于此示例,MATLAB功能回归
用于估计每个测试版的AR(1)模型的参数。
回归拟合的置信区间也用于产生两种额外的产量曲线预测,其用作屈服曲线的额外情况。
这劳动
可以调整变量以使不同的期间提前预测。例如,改变价值1
至6.
会将预测从提前1个月改为6个月预测。
月份= 1;[tmpbeta,bint] =回归(beta(月份+ 1:end,1),[(尺寸(beta(beta(thelaag + 1:end,1)))beta(1:end-themonlag,1)]);预测β(1,1)= [1 beta(终端,1)] * tmpbeta;预测β1down(1,1)= [1 beta(结束,1)] *烧烤(:,1);ForecastBeta_up(1,1)= [1 beta(终端,1)] *烧烤(:,2);[tmpbeta,bint] =回归(beta(月份+ 1:end,2),[(尺寸(beta(beta(beta(beta(thaplag + 1:end,2)))beta(1:end-themonlag,2)]);预测β(1,2)= [1 beta(结束,2)] * tmpbeta;预测β_Down(1,2)= [1 beta(结束,2)] *烧烤(:,1);预期预测β(1,2)= [1 beta(终端,2)] *烧烤(:,2);[tmpbeta,bint] =回归(beta(tomanlag + 1:end,3),[(尺寸(beta(beta(beta(thellag + 1:end,3)))beta(1:端子 - 月底,3)]); ForecastBeta(1,3) = [1 Beta(end,3)]*tmpBeta; ForecastBeta_Down(1,3) = [1 Beta(end,3)]*bint(:,1); ForecastBeta_Up(1,3) = [1 Beta(end,3)]*bint(:,2);%预测产量曲线图Settr = StaysAdd(eomdates(ENDATE(END),30 * WORENLAG);dieboldli_forecast = dieboldli('Paryield',解决[预测贝特拉Lambda_t * 12]);dieboldli_forecast_up = dieboldli('Paryield',解决,[预测β5_UPLABDA_T* 12]);dieboldli_forecast_down = dieboldli('Paryield',定居[预测β1downlambda_t * 12]);Plottingdates =(沉淀+ 30:30:stant + 30 * 360)';绘图(plottingdates,dieboldli_forecast.getparyields(plottingdates),'b-') 抓住上绘图(plottingdates,dieboldli_forecast_up.getparyields(plottingdates),'r-')绘图(plottingdates,dieboldli_forecast_down.getparyields(plottingdates),'r-') 标题(['Diebold Li预测产量曲线上'DATSTR(EOMDATES(END))' 为了 'datestr(soll)])传奇({'预测曲线'那'其他方案'},'地点'那'东南')DateTick.
此示例基于以下文件:
[1]弗朗西斯X.Iobold,Canlin Li,预测政府债券收益率期限的术语结构,CompuoreTrics杂志,130卷,2006年2月2日,第337-364页