Этот пример показывает, как сгенерировать минимальную среднеквадратичную погрешность (MMSE) и прогнозы Монте-Карло из модели ARX (1), адаптированной к историческим данным. Ряд ответа содержит ежегодные измерения уровня по умолчанию на корпоративных облигациях инвестиционного класса (IGD
).
Динамическая модель требует начальных значений для оценки и прогнозирования. Кроме того, чтобы включать внешние эффекты в прогнозы, модель, содержащая компонент регрессии, требует внешних данных в период прогноза. Поэтому этот пример показывает, как разделить демонстрационную временную шкалу в предварительную выборку, оценку, и предсказать периоды, чтобы получить необходимые данные.
Загрузите набор данных, содержащий уровни значения по умолчанию кредита.
load Data_CreditDefaults
Для получения дополнительной информации на наборе данных, отобразите Description
.
Таблица DataTable
содержит ежегодные измерения, но набор данных является агностиком основы времени. Чтобы применить основу времени к данным, преобразуйте DataTable
в расписание.
Tbl = table2timetable(DataTable,"RowTimes",datetime(DataTable.Dates,"Format","yyyy"));
Программное обеспечение Econometrics Toolbox™ arima
удаляет недостающие наблюдения (обозначенный NaN
s) от данных при помощи мудрого списком удаления. Это действие влияет, как вы делите данные.
Определите, содержит ли какая-либо строка в данных по крайней мере одно недостающее наблюдение.
idxmiss = any(ismissing(Tbl),2); anymissing = sum(idxmiss)
anymissing = 0
В данных нет никаких недостающих наблюдений.
Определите общий объем выборки.
T = size(Tbl,1)
T = 21
Примите, что все ряды в данных являются стационарными, и рассматривают эту модель ARX (1) для уровня IGD:
где iid серия Гауссовых случайных переменных со средним значением 0 и конечное отклонение.
Чтобы оценить модель ARX (1), условное среднее значение первого ответа требует предыдущего ответа. Поэтому преддемонстрационный период для оценки является первой строкой данных. Кроме того, рассмотрите прогнозирование IGD в 8-летний горизонт прогноза и сравнение прогнозов к наблюдаемым ответам. Поэтому период прогноза является последними восемью строками данных. Соответствуйте модели к остающимся данным.
Создайте индексные векторы, которые идентифицируют предварительную выборку, оценку, и предсказывают периоды.
fh = 8; % Forecast horizon idxpre = 1; idxest = 2:(T - fh); idxf = (T - fh + 1):T; fprintf('\nPresample period: %d\nEstimation Period: %d - %d\nForecast period: %d - %d\n',... year(Tbl.Time([idxpre idxest(1) idxest(end) idxf(1) idxf(end)])))
Presample period: 1984 Estimation Period: 1985 - 1996 Forecast period: 1997 - 2004
Создайте объект модели arima
, который представляет модель ARX (1).
Mdl = arima(1,0,0)
Mdl = arima with properties: Description: "ARIMA(1,0,0) Model (Gaussian Distribution)" Distribution: Name = "Gaussian" P: 1 D: 0 Q: 0 Constant: NaN AR: {NaN} at lag [1] SAR: {} MA: {} SMA: {} Seasonality: 0 Beta: [1×0] Variance: NaN
Mdl
является шаблоном для оценки. Свойства Mdl
, которые имеют значение NaN
, соответствуют неизвестному ARX (1) параметры модели, которые будут оценены estimate
. Несмотря на то, что свойство Beta
коэффициента регрессии пусто, estimate
определяет свой размер количеством столбцов в заданной внешней матрице данных.
Соответствуйте модели к демонстрационному ответу оценки и внешним данным. Задайте преддемонстрационный ответ.
X = Tbl{:,["AGE" "CPF" "SPR"]}; Mdl = estimate(Mdl,Tbl.IGD(idxest),'Y0',Tbl.IGD(idxpre),... 'X',X(idxest,:));
ARIMAX(1,0,0) Model (Gaussian Distribution): Value StandardError TStatistic PValue __________ _____________ __________ ________ Constant 0.022517 0.20278 0.11104 0.91158 AR{1} -0.18486 0.43861 -0.42146 0.67342 Beta(1) 0.0091356 0.016249 0.56224 0.57395 Beta(2) -0.0098351 0.0053577 -1.8357 0.066402 Beta(3) 0.0039044 0.057031 0.068461 0.94542 Variance 0.0027082 0.0014648 1.8489 0.064468
Mdl
является полностью заданным объектом модели arima
, представляющим подходящую модель ARX (1). Сводные данные оценки предполагают, что все переменные кроме CPF
(Beta(2)
) незначительны на 10%-м уровне значения.
Предскажите ответы MMSE в 8-летний горизонт прогноза и вычислите соответствующие отклонения ошибки прогноза. Поскольку 1 период вперед предсказан требует преддемонстрационного ответа и - прогноз периода вперед требует внешних данных , задайте итоговый ответ в выборке оценки как преддемонстрационный ответ и задайте период прогноза внешние данные.
[yf,ymse] = forecast(Mdl,fh,Tbl.IGD(idxest(end)),... 'XF',X(idxf,:));
Вычислите интервалы прогноза для прогнозов, принимающих, что они нормально распределены.
ci = yf + 1.96*[-sqrt(ymse) sqrt(ymse)];
Постройте ряд ответа с помощью их прогнозов MMSE и интервалов прогноза.
figure h1 = plot(Tbl.Time,Tbl.IGD,'ko-','LineWidth',2); hold on h2 = plot(Tbl.Time(idxf),yf,'k:','LineWidth',2); h3 = plot(Tbl.Time(idxf),ci,'r:','LineWidth',2); h = gca; px = Tbl.Time(idxf([1 end end 1])); py = h.YLim([1 1 2 2]); hf = fill(px,py,[0.9 0.9 0.9]); uistack(hf,"bottom"); legend([h1 h2 h3(1) hf],["Observation" "Forecast"... "95% Interval" "Forecast period"],'Location','NorthWest') title('IGD Rates and MMSE Forecasts') xlabel('Year') ylabel('IGD (%)') axis tight hold off
Прогнозы кажутся разумными несмотря на экстремальное наблюдение, происходящее в 2 001.
Предскажите ответы путем симуляции 100 путей из подходящей модели ARX (1). Затем агрегируйте случайные пути путем вычисления среднего значения и интервалов процентили на 97,5% и на 2,5% в каждом моменте времени в период прогноза. Подобно оценке прогноза MMSE simulate
требует преддемонстрационного ответа сгенерировать из подходящей модели ARX (1), и это требует внешних данных в период прогноза.
nsim = 100; rng(1); YMC = simulate(Mdl,fh,'NumPaths',nsim,... 'Y0',Tbl.IGD(idxest(end)),'X',X(idxf,:)); YMCbar = mean(YMC,2); YMCci = quantile(YMC',[0.025 0.975]);
Постройте ряд ответа с прогнозами Монте-Карло и 95% интервалов процентили.
figure h1 = plot(Tbl.Time,Tbl.IGD,'ko-','LineWidth',2); hold on h2 = plot(Tbl.Time(idxf),YMC,'Color',[0.7 0.7 0.7]); h3 = plot(Tbl.Time(idxf),YMCbar,'c:','LineWidth',3); h4 = plot(Tbl.Time(idxf),YMCci,'r:','LineWidth',3); h = gca; px = Tbl.Time(idxf([1 end end 1])); py = h.YLim([1 1 2 2]); hf = fill(px,py,[0.9 0.9 0.9]); uistack(hf,"bottom"); legend([h1 h2(1) h3 h4(1) hf],["Observation" "Monte Carlo path"... "Monte Carlo mean" "95% Interval" "Forecast period"],'Location','NorthWest') title('IGD Rates and Monte Carlo Forecasts') xlabel('Year') ylabel('IGD (%)') axis tight hold off
Прогнозы Монте-Карло и интервалы прогноза напоминают тех от прогнозирования MMSE.
[1] Helwege, J. и П. Клейман. "Понимая Совокупные Уровни По умолчанию Связей Высокой доходности". Текущие проблемы в Экономике и Финансах. Издание 2, № 6, 1996, стр 1-6.
[2] Loeffler, G. и П. Н. Пош. Credit Risk Modeling Using Excel и VBA. Западный Сассекс, Англия: финансы Вайли, 2007.
arima
| estimate
| forecast
| simulate