Этот пример показывает рабочий процесс для использования ожидаемых бэктестов Du-Escanciano (DE) и демонстрирует фиксированное тестовое окно для одной модели DE с несколькими уровнями VaR.
Данные в ESBacktestDistributionData.mat
файл имеет возвраты, данные VaR и ES, и информацию о распределении для трех моделей: normal, и 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
свойства. The 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
The 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 под фактор. The 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'
распределения. The 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
function, the conditionalDE
test function отображает следующее сообщение:
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