В этом примере показан рабочий процесс для использования обратных тестов ожидаемого дефицита (ES) Du-Escanciano (DE) и показано фиксированное окно тестирования для одной модели DE с несколькими уровнями VaR.
Данные в ESBacktestDistributionData.mat файл содержит возвращаемые данные, данные VaR и ES и информацию о распределении для трех моделей: нормальной и t с 5 степенями свободы и t с 10 степенями свободы. Данные охватывают несколько лет с января 1996 года по июль 2003 года и включают в себя в общей сложности 1966 наблюдений.
В этом примере используется распределение t с 10 степенями свободы и фокусируется на годичных данных, чтобы показать разницу между методами критических значений для аппроксимации больших выборок и моделирования, поддерживаемых esbacktestbyde класс.
load ESBacktestDistributionData.mat TargetYear = 1998; % Change to test other calendar years Ind = year(Dates)==TargetYear; Dates = Dates(Ind); Returns = Returns(Ind); VaR = T10VaR(Ind,:); ES = T10ES(Ind,:); Mu = 0; % Always 0 in this data set Sigma = T10Scale(Ind);
Постройте график данных для уровня VaR 0.975.
% Plot data TargetVaRLevel = 0.975; VaRInd = VaRLevel==TargetVaRLevel; FailureInd = Returns<-VaR(:,VaRInd); bar(Dates,Returns) hold on plot(Dates,-VaR(:,VaRInd),Dates,-ES(:,VaRInd)) plot(Dates(FailureInd),Returns(FailureInd),'.') hold off legend('Returns','VaR','ES','Location','best') title(['Test Data, VaR Level ' num2str(TargetVaRLevel*100) '%']) ylabel('Returns') grid on

esbacktestbyde ОбъектСоздание esbacktestbyde объект для выполнения тестов DE. Обратите внимание, что данные VaR и ES не являются обязательными входными данными, поскольку тесты DE работают над «отображенными возвращениями» или «рангами» и выполняют сопоставление с помощью информации о распределении. Однако для удобства esbacktestbyde объект вычисляет данные VaR и ES внутри с использованием информации о распределении и сохраняет данные в VaRData и ESData свойства esbacktestbyde объект. Данные VaR и ES используются только для оценки коэффициентов серьезности, сообщаемых summary и не используются ни для одного из тестов DE.
По умолчанию при создании esbacktestbyde объект, прогон моделирования и критические значения на основе больших выборок и моделирования доступны немедленно. Несмотря на эффективность моделирования, при проверке соответствия аппроксимации большой выборки рассматриваемому размеру выборки и уровню VaR можно отключить моделирование для увеличения скорости обработки. Отключение моделирования при использовании esbacktestbyde для создания esbacktestbtde объект, задайте аргумент пара имя-значение 'Simulate' кому false.
rng('default'); % For reproducibility tic; ebtde = esbacktestbyde(Returns,"t",... 'DegreesOfFreedom',10,... 'Location',Mu,... 'Scale',Sigma,... 'VaRLevel',VaRLevel,... 'PortfolioID',"S&P",... 'VaRID',"t(10)"); toc;
Elapsed time is 0.203833 seconds.
disp(ebtde)
esbacktestbyde with properties:
PortfolioData: [261x1 double]
VaRData: [261x3 double]
ESData: [261x3 double]
Distribution: [1x1 struct]
PortfolioID: "S&P"
VaRID: ["t(10)" "t(10)" "t(10)"]
VaRLevel: [0.9500 0.9750 0.9900]
disp(ebtde.Distribution)
Name: "t"
DegreesOfFreedom: 10
Location: 0
Scale: [261x1 double]
Использовать summary вернуть базовый отчет об ожидаемом дефиците (ES) о сбоях и серьезности. Это то же самое summary вывод в качестве других классов обратного тестирования ES esbacktest и esbacktestbysim. Когда esbacktestbyde создается объект, данные VaR и ES вычисляются с использованием информации о распределении. Эта информация хранится в VaRData и ESData свойства. summary функция использует VaRData и ESData свойства для вычисления наблюдаемого коэффициента серьезности.
disp(summary(ebtde))
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing
___________ _______ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______
"S&P" "t(10)" 0.95 0.94253 1.3288 1.5295 261 15 13.05 1.1494 0
"S&P" "t(10)" 0.975 0.96935 1.2652 1.5269 261 8 6.525 1.2261 0
"S&P" "t(10)" 0.99 0.98467 1.2169 1.5786 261 4 2.61 1.5326 0
Использовать runtests провести все ожидаемые обратные тесты дефицита (ES) для esbacktestbyde объект. Метод критического значения по умолчанию: 'large-sample' или асимптотическое приближение.
disp(runtests(ebtde))
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE
___________ _______ ________ _____________ _______________
"S&P" "t(10)" 0.95 accept accept
"S&P" "t(10)" 0.975 accept accept
"S&P" "t(10)" 0.99 accept accept
Запустите тесты с помощью 'simulation' или критические значения конечных выборок.
disp(runtests(ebtde,'CriticalValueMethod','simulation'))
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE
___________ _______ ________ _____________ _______________
"S&P" "t(10)" 0.95 accept accept
"S&P" "t(10)" 0.975 accept accept
"S&P" "t(10)" 0.99 accept accept
runtests функция принимает аргумент пары имя-значение 'ShowDetails' который включает в себя дополнительные столбцы в выходных данных. В частности, этот вывод включает используемый метод критических значений, количество задержек и уровень достоверности теста.
disp(runtests(ebtde,'CriticalValueMethod','simulation','ShowDetails',true))
PortfolioID VaRID VaRLevel ConditionalDE UnconditionalDE CriticalValueMethod NumLags TestLevel
___________ _______ ________ _____________ _______________ ___________________ _______ _________
"S&P" "t(10)" 0.95 accept accept "simulation" 1 0.95
"S&P" "t(10)" 0.975 accept accept "simulation" 1 0.95
"S&P" "t(10)" 0.99 accept accept "simulation" 1 0.95
Безусловный тест DE оценивает серьезность нарушений на основе оценки наблюдаемой средней потери хвоста и определяет, согласуется ли серьезность с предположениями модели. Все тесты, поддерживаемые в связанных классах esbacktest и esbacktestbysim это также тесты на серьезность.
Для просмотра сведений о безусловном тесте DE используйте unconditionalDE функция. По умолчанию эта функция использует 'large-sample' метод критических значений.
disp(unconditionalDE(ebtde))
PortfolioID VaRID VaRLevel UnconditionalDE PValue TestStatistic LowerCI UpperCI Observations CriticalValueMethod MeanLS StdLS Scenarios TestLevel
___________ _______ ________ _______________ ________ _____________ _________ ________ ____________ ___________________ ______ _________ _________ _________
"S&P" "t(10)" 0.95 accept 0.31715 0.032842 0.0096343 0.040366 261 "large-sample" 0.025 0.0078398 NaN 0.95
"S&P" "t(10)" 0.975 accept 0.32497 0.018009 0.0015295 0.023471 261 "large-sample" 0.0125 0.0055973 NaN 0.95
"S&P" "t(10)" 0.99 accept 0.076391 0.011309 0 0.011978 261 "large-sample" 0.005 0.0035603 NaN 0.95
Сравнение результатов 'large-sample' для моделирования критических значений используйте аргумент пары имя-значение 'CriticalValueMethod'. В этом примере результаты обоих методов критических значений, включая доверительный интервал и p-значения, выглядят сходными.
disp(unconditionalDE(ebtde,'CriticalValueMethod','simulation'))
PortfolioID VaRID VaRLevel UnconditionalDE PValue TestStatistic LowerCI UpperCI Observations CriticalValueMethod MeanLS StdLS Scenarios TestLevel
___________ _______ ________ _______________ ______ _____________ _________ ________ ____________ ___________________ ______ _____ _________ _________
"S&P" "t(10)" 0.95 accept 0.326 0.032842 0.010859 0.041709 261 "simulation" NaN NaN 1000 0.95
"S&P" "t(10)" 0.975 accept 0.336 0.018009 0.0032446 0.024657 261 "simulation" NaN NaN 1000 0.95
"S&P" "t(10)" 0.99 accept 0.126 0.011309 0 0.013311 261 "simulation" NaN NaN 1000 0.95
Можно визуализировать 'simulation' и 'large-sample' распределения для оценки того, 'large-sample' аппроксимация достаточно точна для рассматриваемого размера выборки и уровня VaR. unconditionalDE функция возвращает 'simulated' тестовая статистика в качестве необязательного выходного сигнала.
В этом примере более высокие уровни VaR вызывают заметное несоответствие между 'large-sample' и 'simulation' распределения. Однако доверительные интервалы и значения p сопоставимы.
% Choose VaR level TargetVaRLevel = 0.975; VaRInd = VaRLevel==TargetVaRLevel; [~,s] = unconditionalDE(ebtde,'CriticalValueMethod','simulation'); histogram(s(VaRInd,:),'Normalization',"pdf") hold on t = unconditionalDE(ebtde,'CriticalValueMethod','large-sample'); Mu = t.MeanLS(VaRInd); Sigma = t.StdLS(VaRInd); MinValPlot = min(s(VaRInd,:))-0.001; MaxValPlot = max(s(VaRInd,:))+0.001; xLS = linspace(MinValPlot,MaxValPlot,101); pdfLS = normpdf(xLS,Mu,Sigma); plot(xLS,pdfLS) hold off legend({'Simulation','Large-Sample'}) Title = sprintf('UnconditionalDE Test Distribution\nVaR Level: %g%%, Sample Size = %d',VaRLevel(VaRInd)*100,t.Observations(VaRInd)); title(Title)

Условный тест DE оценивает, имеются ли доказательства автокорреляции в потерях хвоста.
Хотя имена совпадают, условный тест DE и условный тест поддерживаются в esbacktestbysim являются качественно другими испытаниями. Условный тест Acerbi-Szekely поддерживается в esbacktestbysim проверяет серьезность ES при условии, что модель пройдет тест VaR. Условный тест Acerbi-Szekely является тестом серьезности, сопоставимым с тестами, поддерживаемыми в esbacktest, esbacktestbysim, и unconditionalDE тест.
Однако условный тест DE в esbacktestbyde является тестом на независимость между периодами времени.
Для просмотра подробной информации о результатах условного теста DE используйте conditionalDE функция. По умолчанию эта функция использует 'large-sample' метод критических значений и тесты для одного запаздывания (корреляция с предыдущим периодом времени).
disp(conditionalDE(ebtde))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ _______ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 accept 0.45361 0.5616 3.8415 0.046387 261 "large-sample" 1 NaN 0.95
"S&P" "t(10)" 0.975 accept 0.54189 0.37205 3.8415 0.037755 261 "large-sample" 1 NaN 0.95
"S&P" "t(10)" 0.99 accept 0.87949 0.022989 3.8415 -0.0093851 261 "large-sample" 1 NaN 0.95
Результаты 'large-sample' метод критических значений, в частности имитационные критические значения и p-значения, существенно отличаются от результатов 'simulation' метод критических значений.
Критическое значение аналогично для уровня VaR 95%, но основанное на моделировании критическое значение намного больше для более высоких уровней VaR, особенно для VaR 99%. Автокорреляция 1 для любого образца без отказов VaR. Поэтому статистика теста равняется количеству наблюдений для любого сценария без отказов VaR. Для уровня VaR 99% сценарии без отказов VaR подобны; следовательно, существует точка массы при количестве наблюдений, которая проявляется как длинный, тяжелый хвост в моделируемом распределении тестовой статистики.
disp(conditionalDE(ebtde,'CriticalValueMethod','simulation'))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ ______ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 accept 0.257 0.5616 3.6876 0.046387 261 "simulation" 1 1000 0.95
"S&P" "t(10)" 0.975 accept 0.141 0.37205 5.3504 0.037755 261 "simulation" 1 1000 0.95
"S&P" "t(10)" 0.99 accept 0.502 0.022989 261 -0.0093851 261 "simulation" 1 1000 0.95
Вы можете визуально сравнить 'large-sample' и 'simulation' распределения. conditionalDE функция также возвращает смоделированную статистику теста в качестве необязательного вывода.
Обратите внимание, что хвостовая часть распределения становится тяжелее по мере увеличения уровня VaR.
% Choose VaR level TargetVaRLevel = 0.975; VaRInd = VaRLevel==TargetVaRLevel; [t,s] = conditionalDE(ebtde,'CriticalValueMethod','simulation'); xLS = 0:0.01:20; pdfLS = chi2pdf(xLS,t.NumLags(1)); histogram(s(VaRInd,:),'Normalization',"pdf") hold on plot(xLS,pdfLS) hold off ylim([0 0.01]) legend({'Simulation','Large-Sample'}) Title = sprintf('ConditionalDE Test Distribution\nVaR Level: %g%%, Sample Size = %d',VaRLevel(VaRInd)*100,t.Observations(VaRInd)); title(Title)

Так как условный тест DE основан на автокорреляциях, можно запустить тест на различное количество лагов.
Запуск условного теста DE для 2 отстает. При уровне VaR 99% 'large-sample' метод критических значений отклоняет модель, но 'simulation' метод критических значений не отклоняет модель с p-значением, близким к 10%. Это показывает, что 'simulation' распределение и 'large-sample' аппроксимация может привести к различным результатам в зависимости от размера выборки и уровня VaR.
disp(conditionalDE(ebtde,'NumLags',2,'CriticalValueMethod','large-sample'))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ __________ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 reject 0.015812 8.294 5.9915 0.17212 261 "large-sample" 2 NaN 0.95
"S&P" "t(10)" 0.975 reject 0.00045758 15.379 5.9915 0.23979 261 "large-sample" 2 NaN 0.95
"S&P" "t(10)" 0.99 reject 2.5771e-07 30.343 5.9915 0.34083 261 "large-sample" 2 NaN 0.95
disp(conditionalDE(ebtde,'NumLags',2,'CriticalValueMethod','simulation'))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ ______ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 reject 0.03 8.294 6.1397 0.17212 261 "simulation" 2 1000 0.95
"S&P" "t(10)" 0.975 reject 0.019 15.379 9.3364 0.23979 261 "simulation" 2 1000 0.95
"S&P" "t(10)" 0.99 accept 0.098 30.343 522 0.34083 261 "simulation" 2 1000 0.95
simulateЕсли значение p близко к границе отклонения, можно запустить новое моделирование, чтобы запросить дополнительные сценарии для уменьшения ошибки моделирования.
Можно также запустить новое моделирование, чтобы запросить большее количество задержек. По умолчанию создание esbacktestbyde объект приводит к запуску моделирования таким образом, что результаты теста моделирования становятся доступными немедленно. Однако во избежание дополнительного хранения только 5 моделируют задержки. Если вы запрашиваете больше, чем 5 отстает от simulate функция, conditionalDE функция тестирования выводит следующее сообщение:
No simulation results available for the number of lags requested. Call 'simulate' with the desired number of lags.
Сначала необходимо запустить новое моделирование с помощью esbacktestbyde и укажите количество лагов, используемых для этого моделирования. Отображение размера esbacktestbyde объект до и после нового моделирования иллюстрирует, как моделирование с большими задержками увеличивает объем данных, хранящихся в esbacktestbyde объект, поскольку более моделируемая статистика тестирования сохраняется с большим количеством лагов.
% See bytes before new simulation, 5 lags stored whos ebtde
Name Size Bytes Class Attributes ebtde 1x1 164883 esbacktestbyde
% Simulate 6 lags rng('default'); % for reproducibility ebtde = simulate(ebtde,'NumLags',6); % See bytes after new simulation, 6 lags stored whos ebtde
Name Size Bytes Class Attributes ebtde 1x1 188891 esbacktestbyde
После запуска нового моделирования с помощью esbacktestbyde что увеличивает количество лагов до 6, результаты испытаний для conditionalDE доступны для 'simulation' способ с использованием 6 отстает.
disp(conditionalDE(ebtde,'NumLags',6,'CriticalValueMethod','simulation'))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ ______ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 accept 0.136 9.5173 16.412 -0.022881 261 "simulation" 6 1000 0.95
"S&P" "t(10)" 0.975 accept 0.086 15.854 21.299 -0.021864 261 "simulation" 6 1000 0.95
"S&P" "t(10)" 0.99 accept 0.128 30.438 1566 -0.0096211 261 "simulation" 6 1000 0.95
В качестве альтернативы, conditionalDE результаты тестирования всегда доступны для 'large-sample' метод для любого количества лагов.
disp(conditionalDE(ebtde,'NumLags',10,'CriticalValueMethod','large-sample'))
PortfolioID VaRID VaRLevel ConditionalDE PValue TestStatistic CriticalValue AutoCorrelation Observations CriticalValueMethod NumLags Scenarios TestLevel
___________ _______ ________ _____________ __________ _____________ _____________ _______________ ____________ ___________________ _______ _________ _________
"S&P" "t(10)" 0.95 reject 0.018711 21.361 18.307 0.15415 261 "large-sample" 10 NaN 0.95
"S&P" "t(10)" 0.975 accept 0.088587 16.406 18.307 0.027955 261 "large-sample" 10 NaN 0.95
"S&P" "t(10)" 0.99 reject 0.00070234 30.526 18.307 -0.0092432 261 "large-sample" 10 NaN 0.95
esbacktest | esbacktestbyde | esbacktestbysim | varbacktest