主要内容

拟合Diebold Li模型

这个例子展示了如何构建美国1990 - 2010年每个月的收益率曲线的Diebold Li模型。这个例子也演示了如何通过对每个参数的时间序列拟合一个自回归模型来预测未来的收益率曲线。

该论文可以在这里找到:

https://www.nber.org/papers/w10048

加载数据

使用的数据是1990年至2010年1个月、3个月、6个月、1个月、2个月、3个月、5个月、7个月、10个月、20个月、30个月期限的月度国债收益率。

每日数据可在此找到:

https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yieldAll

数据存储在MATLAB®数据文件作为MATLAB数据集对象。

负载Data_USYieldCurve%提取每个月最后一天的数据MonthYearMat = repmat((1990:2010) ', 1、12)”;EOMDates = lbusdate (MonthYearMat (:), repmat((1:12), 21岁,1));MonthlyIndex =找到(ismember (Dataset.Properties.ObsNames datestr (EOMDates)));Estimationdataset =数据集(MonthlyIndex:);EstimationData =双(Estimationdataset);

Diebold李模型

Diebold和Li从Nelson Siegel模型开始

y β 0 + β 1 + β 2 τ 1 - e - τ - β 2 e - τ

把它改写成这样:

y t τ β 1 t + β 2 t 1 - e - λ t τ λ t τ + β 3. t 1 - e - λ t τ λ t τ - e - λ t τ

通过上述模型,可以将这些因素解释为:Beta1对应于收益率曲线的长期/水平,Beta2对应于短期/斜率,Beta3对应于中期/曲率。 λ 确定了曲率上的载荷在哪个成熟度时达到最大值,并控制了模型的指数衰减率。

迪堡和李主张设置 λ 使中期因子Beta3在30个月时的负荷最大化。这也将问题从非线性拟合转化为简单的线性回归。

%显式设置时间因子lambda_t = .0609;构建因子负荷矩阵与数据相关的期限TimeToMat = [3 6 9 12 24 36 60 84 120 240 360]';X = [ones(size(TimeToMat)) (1 - exp(-lambda_t*TimeToMat))./(lambda_t*TimeToMat))...((1 - exp(-lambda_t*TimeToMat))./(lambda_t*TimeToMat) - exp(-lambda_t*TimeToMat))];%绘制因子负荷情节(TimeToMat X)标题(时间因子为0.0609的Diebold Li模型的因子载荷)包含(的期限(月)) ylim([0 1.1]) legend({“Beta1”“Beta2”“Beta3”},“位置”“东”

图中包含一个轴对象。时间因子为.0609的Diebold Li模型的标题因子载荷轴对象包含3个线型对象。这些对象代表Beta1 Beta2 Beta3。

合适的模型

一个DieboldLi对象的开发是为了方便从产量数据拟合模型。的DieboldLi对象继承IRCurve对象,因此getZeroRatesgetDiscountFactorsgetParYieldsgetForwardRates,toRateSpec方法都实现了。此外,该方法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];结束

迪堡李适合选定的日期包括在这里

PlotSettles = datenum ({“30 - 1997年5月- - - - - -”31日- 8月- 1998的截止2001年6月29日的2005年- 10月31日的});数字tmpIdx = find(strcmpi(Estimationdataset.Properties.ObsNames,datestr(PlotSettles(jdx))));tmpCurveModel = DieboldLi.fitBetasFromYields (PlotSettles (jdx) lambda_t * 12,...daysadd (PlotSettles (jdx)、30 * TimeToMat), EstimationData (tmpIdx:) ');散射(daysadd (PlotSettles (jdx)、30 * TimeToMat), EstimationData (tmpIdx,:))PlottingDates = (PlotSettles (jdx) + 30:30: PlotSettles (jdx) + 30 * 360) ';情节(PlottingDates tmpCurveModel.getParYields (PlottingDates),的r -)标题(“收益率曲线”datestr (PlotSettles (jdx)))) datetick结束

图中包含4个轴对象。坐标轴对象1,标题为Yield Curve on 30- 5 -1997包含2个类型为散点、线的对象。轴对象2与标题收益率曲线在1998年8月31日包含2对象的类型散点,线。轴对象3与标题收益率曲线在29年6月-2001包含2对象的类型散点,线。轴对象4的标题为Yield Curve在31-Oct-2005包含两个对象的类型散点,线。

预测

Diebold Li模型可以用来预测未来的收益率曲线。Diebold和Li提出对每个Beta参数的时间序列拟合一个AR(1)模型。这个拟合模型可以用来预测每个参数的未来值,并引申出未来的收益率曲线。

本例为MATLAB函数回归用于估计每个Beta的AR(1)模型的参数。

回归拟合的置信区间也用于生成两个额外的收益率曲线预测,作为收益率曲线的额外可能情景。

MonthsLag变量可以进行调整,以作出不同时期的提前预测。例如,更改值from16将预测从1个月前改为6个月前。

MonthsLag = 1;[tmpBeta,bint] =回归(Beta(MonthsLag+1:end,1),[ones(size(Beta(MonthsLag+1:end,1))) Beta(1:end-MonthsLag,1)]);ForecastBeta(1,1) = [1 Beta(end,1)]*tmpBeta;ForecastBeta_Down(1, - 1) =[1β(结束,1)]*少女(:1);ForecastBeta_Up(1, - 1) =[1β(结束,1)]*少女(:,2);[tmpBeta,bint] = reress (Beta(MonthsLag+1:end,2),[ones(size(Beta(MonthsLag+1:end,2))) Beta(1:end-MonthsLag,2)]); / /月渣ForecastBeta(1,2) = [1 Beta(end,2)]*tmpBeta;ForecastBeta_Down(1、2)=[1β(,2)]*少女(:1);ForecastBeta_Up(1、2)=[1β(,2)]*少女(:,2);[tmpBeta,bint] = return (Beta(MonthsLag+1:end,3),[ones(size(Beta(MonthsLag+1:end,3))) Beta(1:end-MonthsLag,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”,解决ForecastBeta 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 -”)举行情节(PlottingDates DieboldLi_Forecast_Up.getParYields (PlottingDates),的r -)情节(PlottingDates DieboldLi_Forecast_Down.getParYields (PlottingDates),的r -)标题(李国宝预测未来收益率曲线datestr (EOMDates(结束)“对”datestr(解决)])传说({的预测曲线“额外的场景”},“位置”“东南”) datetick

图中包含一个轴对象。以diboldli预测的2010年12月31日至2011年1月30日的收益曲线为标题的轴对象包含3个线型对象。这些对象表示预测曲线,附加场景。

参考书目

本示例基于以下论文:

弗朗西斯·x·迪博尔德,李灿林《预测政府债券收益率的期限结构》计量经济学杂志,第130卷,第2期,2006年2月,337-364页。

相关的话题