Этот пример показывает рабочий процесс для использования ожидаемого недостатка (ES) Дю-Эсканкяно (DE) backtests и демонстрирует фиксированное тестовое окно для одной модели DE с несколькими уровнями VaR.
Данные в ESBacktestDistributionData.mat файл имеет, возвращается, VaR и данные о ES и информация о распределении для трех моделей: нормальный, и t с 5 степенями свободы и t с 10 степенями свободы. Диапазоны данных несколько лет с января 1996 до июля 2003 и включают в общей сложности 1 966 наблюдений.
Этот пример использует 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 backtesting классы 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) backtests для 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' метод критического значения.
Критическое значение подобно для 95%-го уровня VaR, но основанное на симуляции критическое значение намного больше для более высоких уровней VaR, особенно для 99% VaR. Автокорреляцией является 1 для любой выборки без отказов VaR. Поэтому тестовая статистическая величина равняется количеству наблюдений для любого сценария без отказов VaR. Для 99%-го уровня VaR сценарии без отказов 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