exponenta event banner

Подгонка модели Diebold Li

В этом примере показано, как построить модель 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.

Ежедневные данные можно найти здесь:

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

Данные хранятся в файле данных 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 начинают с модели Нельсона Сигела

y = β0 + (β1 + β2)

и переписать его следующим образом:

yt (start) = β1t + β2t (1-e-λ tü λ tstart) + β3t (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')

Figure contains an axes. The axes with title Factor Loadings for Diebold Li Model with time factor of .0609 contains 3 objects of type line. These objects represent Beta1, Beta2, Beta3.

Подогнать модель

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

Figure contains 4 axes. Axes 1 with title Yield Curve on 30-May-1997 contains 2 objects of type scatter, line. Axes 2 with title Yield Curve on 31-Aug-1998 contains 2 objects of type scatter, line. Axes 3 with title Yield Curve on 29-Jun-2001 contains 2 objects of type scatter, line. Axes 4 with title Yield Curve on 31-Oct-2005 contains 2 objects of type scatter, line.

Прогнозирование

Модель 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

Figure contains an axes. The axes with title Diebold Li Forecasted Yield Curves on 31-Dec-2010 for 30-Jan-2011 contains 3 objects of type line. These objects represent Forecasted Curve, Additional Scenarios.

Библиография

Этот пример основан на следующем документе:

[1] Фрэнсис Х. Диболд, Канлин Ли, Прогнозирование терминологической структуры доходности государственных облигаций, Журнал эконометрики, том 130, выпуск 2, февраль 2006 г., стр. 337-364

См. также

| | | | | | | | |

Связанные примеры

Подробнее