Этот пример показывает рабочий процесс для использования ожидаемого недостатка (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.135274 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