В этом примере показано, как построить модель Diebold Li кривой доходности США для каждого месяца с 1990 по 2010 год. В этом примере также показано, как прогнозировать будущие кривые доходности путем подгонки авторегрессионной модели к временным рядам каждого параметра.
Документ можно найти здесь:
https://www.nber.org/papers/w10048
В качестве данных используются ежемесячные показатели доходности Казначейства за период с 1990 по 2010 год для арендаторов 1 Mo, 3 Mo, 6 Mo, 1 Yr, 2 Yr, 3 Yr, 5 Yr, 7 Yr, 10 Yr, 20 Yr, 30 Yr.
Ежедневные данные можно найти здесь:
Данные хранятся в файле данных MATLAB ® как MATLABdataset объект.
load Data_USYieldCurve % Extract data for the last day of each month MonthYearMat = repmat((1990:2010)',1,12)'; EOMDates = lbusdate(MonthYearMat(:),repmat((1:12)',21,1)); MonthlyIndex = find(ismember(Dataset.Properties.ObsNames,datestr(EOMDates))); Estimationdataset = Dataset(MonthlyIndex,:); EstimationData = double(Estimationdataset);
Diebold и Li начинают с модели Нельсона Сигела
и переписать его следующим образом:
1-e-λ tü λ t,
Приведенная выше модель позволяет интерпретировать факторы следующим образом: Beta1 соответствует долгосрочному сроку/уровню кривой доходности, Beta2 соответствует краткосрочному сроку/наклону, а Beta3 соответствует среднесрочному сроку/кривизне. определяет зрелость, при которой нагрузка на кривизну максимизируется, и регулирует экспоненциальную скорость распада модели.
Диболд и Ли выступают за установку , чтобы максимизировать нагрузку на среднесрочный фактор, Beta3, в 30 месяцев. Это также преобразует проблему из нелинейного фитинга в простую линейную регрессию.
% Explicitly set the time factor lambda lambda_t = .0609; % Construct a matrix of the factor loadings % Tenors associated with data 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))]; % Plot the factor loadings plot(TimeToMat,X) title('Factor Loadings for Diebold Li Model with time factor of .0609') xlabel('Maturity (months)') ylim([0 1.1]) legend({'Beta1','Beta2','Beta3'},'location','east')

A DieboldLi разрабатывают объект для облегчения подгонки модели из данных о доходности. DieboldLi объект наследует от IRCurve объект, так что getZeroRates, getDiscountFactors, getParYields, getForwardRates, и toRateSpec все методы реализованы. Кроме того, метод fitYieldsFromBetas реализован для оценки бета-параметров, заданных лямбда-параметром для наблюдаемых рыночных доходностей.
DieboldLi объект используется для подгонки модели Diebold Li для каждого месяца с 1990 по 2010 год.
% Preallocate the Betas Beta = zeros(size(EstimationData,1),3); % Loop through and fit each end of month yield curve for jdx = 1:size(EstimationData,1) tmpCurveModel = DieboldLi.fitBetasFromYields(EOMDates(jdx),lambda_t*12,daysadd(EOMDates(jdx),30*TimeToMat),EstimationData(jdx,:)'); Beta(jdx,:) = [tmpCurveModel.Beta1 tmpCurveModel.Beta2 tmpCurveModel.Beta3]; end
Diebold Li подходит для выбранных дат включены здесь
PlotSettles = datenum({'30-May-1997','31-Aug-1998','29-Jun-2001','31-Oct-2005'});
figure
for jdx = 1:length(PlotSettles)
subplot(2,2,jdx)
tmpIdx = find(strcmpi(Estimationdataset.Properties.ObsNames,datestr(PlotSettles(jdx))));
tmpCurveModel = DieboldLi.fitBetasFromYields(PlotSettles(jdx),lambda_t*12,...
daysadd(PlotSettles(jdx),30*TimeToMat),EstimationData(tmpIdx,:)');
scatter(daysadd(PlotSettles(jdx),30*TimeToMat),EstimationData(tmpIdx,:))
hold on
PlottingDates = (PlotSettles(jdx)+30:30:PlotSettles(jdx)+30*360)';
plot(PlottingDates,tmpCurveModel.getParYields(PlottingDates),'r-')
title(['Yield Curve on ' datestr(PlotSettles(jdx))])
datetick
end
Модель Diebold Li может использоваться для прогнозирования будущих кривых доходности. Diebold и Li предлагают подгонку модели AR (1) к временным рядам каждого параметра Beta. Эта подогнанная модель затем может быть использована для прогнозирования будущих значений каждого параметра, а также, таким образом, будущих кривых доходности.
В этом примере используется функция MATLAB. regress используется для оценки параметров модели AR (1) для каждой бета-версии.
Доверительные интервалы для регрессионной посадки также используются для создания двух дополнительных прогнозов кривой доходности, которые служат дополнительными возможными сценариями для кривой доходности.
MonthsLag переменная может быть скорректирована для получения различных прогнозов на период вперед. Например, изменение значения с 1 кому 6 изменит прогноз с 1 месяца вперед на 6 месяцев вперед.
MonthsLag = 1; [tmpBeta,bint] = regress(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 Beta(end,1)]*bint(:,1); ForecastBeta_Up(1,1) = [1 Beta(end,1)]*bint(:,2); [tmpBeta,bint] = regress(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 Beta(end,2)]*bint(:,1); ForecastBeta_Up(1,2) = [1 Beta(end,2)]*bint(:,2); [tmpBeta,bint] = regress(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); % Forecasted yield curve figure Settle = daysadd(EOMDates(end),30*MonthsLag); DieboldLi_Forecast = DieboldLi('ParYield',Settle,[ForecastBeta lambda_t*12]); DieboldLi_Forecast_Up = DieboldLi('ParYield',Settle,[ForecastBeta_Up lambda_t*12]); DieboldLi_Forecast_Down = DieboldLi('ParYield',Settle,[ForecastBeta_Down lambda_t*12]); PlottingDates = (Settle+30:30:Settle+30*360)'; plot(PlottingDates,DieboldLi_Forecast.getParYields(PlottingDates),'b-') hold on plot(PlottingDates,DieboldLi_Forecast_Up.getParYields(PlottingDates),'r-') plot(PlottingDates,DieboldLi_Forecast_Down.getParYields(PlottingDates),'r-') title(['Diebold Li Forecasted Yield Curves on ' datestr(EOMDates(end)) ' for ' datestr(Settle)]) legend({'Forecasted Curve','Additional Scenarios'},'location','southeast') datetick

Этот пример основан на следующем документе:
[1] Фрэнсис Х. Диболд, Канлин Ли, Прогнозирование терминологической структуры доходности государственных облигаций, Журнал эконометрики, том 130, выпуск 2, февраль 2006 г., стр. 337-364
bnddurp | bnddury | bndfutimprepo | bndfutprice | convfactor | tfutbyprice | tfutbyyield | tfutimprepo | tfutpricebyrepo | tfutyieldbyrepo