此示例显示如何构建来自1990年至2010年的每个月的DIEBOLD LI模型。该示例还通过将自回归模型拟合到每个参数的时间序列来说明如何预测未来产量曲线。
本文可以在这里找到:
https://www.nber.org/papers/w10048
使用的数据是1990年至2010年1个月、3个月、6个月、1个月、2个月、3个月、5个月、7个月、10个月、20个月、30个月期限的月度国债收益率。
每日数据可在此找到:
数据作为MATLAB文件存储在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对应于收益率曲线的长期/水平,Beta2对应于短期/斜率,Beta3对应于中期/曲率。 确定曲率上的载荷最大化的成熟度,并控制模型的指数衰减率。
迪堡和李主张设置 使中期因子Beta3在30个月时的负荷最大化。这也将问题从非线性拟合转化为简单的线性回归。
%显式设置时间因子lambda_t = .0609;%构造因子负载的矩阵与数据相关的价值Timetomat = [3 6 9 12 24 36 60 84 120 240 360]';x = [(大小(timetomat))(1 - expda_t * timetomat))./(lambda_t * timetomat)...((1 - exp(-lambda_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
对象继承自IRCurve
对象,所以召集机会
,getDiscountFactors
,getParyields.
,GetForwardrates.
, 和托尔斯邮编
方法都实施。此外,该方法fitYieldsFromBetas
的实现,以估计给定的lambda参数的Beta参数的观察市场收益率。
的DieboldLi
对象用于拟合1990年至2010年每个月的Diebold Li模型。
%预分配betaβ= 0(大小(EstimationData, 1), 3);%循环通过并拟合每月的每端产量曲线为jdx = 1:size(EstimationData,1) tmpCurveModel = dieboldfi . fitbetasfromyields (EOMDates(jdx),lambda_t*12,daysadd(EOMDates(jdx),30*TimeToMat),EstimationData(jdx,:)'); / /β(jdx:) = [tmpCurveModel。Beta1 tmpCurveModel。Beta2 tmpCurveModel.Beta3];结束
这里包含Diebold Li适合选定的日期
plotsettles = datenum({“30 - 1997年5月- - - - - -”,31日- 8月- 1998的,截止2001年6月29日的,'31 -oct-2005'});数字为tmpIdx = find(strcmpi(Estimationdataset.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)模型的参数。
回归拟合的置信区间也用于生成两个额外的收益率曲线预测,作为收益率曲线的额外可能情景。
的MonthsLag
变量可以进行调整,以作出不同时期的提前预测。例如,更改值from1
来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);%预测产量曲线figure set = daysadd(EOMDates(end),30*MonthsLag);DieboldLi_Forecast = DieboldLi (“ParYield”,解决[预测贝特拉Lambda_t * 12]);dieboldli_forecast_up = dieboldli(“ParYield”,解决ForecastBeta_Up lambda_t * 12]);DieboldLi_Forecast_Down = DieboldLi (“ParYield”,解决ForecastBeta_Down lambda_t * 12]);PlottingDates =(解决+ 30:30:解决+ 30 * 360)';情节(PlottingDates DieboldLi_Forecast.getParYields (PlottingDates),“b-”) 抓住在绘图(绘图日期,DieboldLi\u Forecast\u Up.getParYields(绘图日期),的r -)绘图(plottingdates,dieboldli_forecast_down.getparyields(plottingdates),的r -) 标题([李国宝预测未来收益率曲线日期(EOMDates(end))“对”datestr(解决)])传说({的预测曲线,'其他方案'},'地点','东南')DateTick.
本示例基于以下论文:
[1] Francis X. Diebold,Canlin Li。“预测政府债券收益率的术语结构。”中国经济学杂志,第130卷,第2期,2006年2月,337-364页。