В этом примере показано, как создать Модель Диболда-Ли кривой доходности США в течение каждого месяца от 1 990 до 2010. Этот пример также демонстрирует, как предсказать будущие кривые доходности, подбирая авторегрессивную модель к временным рядам каждого параметра.
Бумага может быть найдена здесь:
https://www.nber.org/papers/w10048
Используемыми данными является ежемесячная доходность казначейских облигаций США от 1 990 до 2010 в течение многих сроков 1 мес, 3 мес, 6 мес, 1 года, 2 лет, 3 лет, 5 лет, 7 лет, 10 лет, 20 лет, 30 лет.
Ежедневные данные могут быть найдены здесь:
Данные хранятся в файле данных MATLAB® как dataset
MATLAB объект.
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);
Диболд и Ли начинают с модели Нельсона Зигеля
и перепишите его, чтобы быть следующими:
Вышеупомянутая модель позволяет факторам быть интерпретированными следующим образом: 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')
DieboldLi
объект разрабатывается, чтобы упростить подбирать модель из данных о выражении. DieboldLi
объект наследовался IRCurve
объект, таким образом, getZeroRates
, getDiscountFactors
, getParYields
, getForwardRates
, и toRateSpec
методы все реализованы. Кроме того, метод fitYieldsFromBetas
реализован, чтобы оценить Бета параметры, учитывая параметр lambda для наблюдаемых выражений рынка.
DieboldLi
объект используется, чтобы соответствовать Модели Диболда-Ли в течение каждого месяца от 1 990 до 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
Подгонки Диболда Ли в выбранные даты включены здесь
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
Модель Диболда-Ли может использоваться, чтобы предсказать будущие кривые доходности. Диболд и Ли предлагают подбирать модель AR (1) к временным рядам каждого Бета параметра. Эта подобранная модель может затем использоваться, чтобы предсказать будущие значения каждого параметра, и следовательно, будущие кривые доходности.
Для этого примера функция 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