В этом примере показан ожидаемый поток операций обратного тестирования дефицита (ES) с использованием esbacktestbysim объект. Тесты, поддерживаемые в esbacktestbysim объект требует в качестве входных данных не только тестовые данные (Portfolio, VaR, и ES данные), а также информацию о распределении тестируемой модели.
esbacktestbysim класс поддерживает пять тестов - условные, безусловные, квантильные, которые основаны на Acerbi-Szekely (2014) и minBiasAbsolute и minBiasRelative, которые основаны на Acerbi-Szekely (2017 и 2019). Эти тесты используют допущения распределения для моделирования сценариев возврата, предполагая, что допущения распределения верны (нулевая гипотеза). Смоделированные сценарии определяют распределение типичных значений для статистики тестирования и значимость тестов. esbacktestbysim поддерживает нормальное распределение и распределение в масштабе местоположения (с фиксированным числом степеней свободы во всем окне теста).
Используйте ESBacktestBySimData.mat для загрузки данных в рабочую область. Этот пример работает с Returns числовой массив. Этот массив представляет доходность собственного капитала. Соответствующие данные VaR и доверительные уровни VaR находятся в VaR и VaRLevel. Ожидаемые данные о дефиците содержатся в ES.
load ESBacktestBySimDataИспользуйте plot функция для визуализации данных обратного тестирования ES. Этот тип визуализации является обычным первым шагом при выполнении анализа обратного тестирования ES. На этом графике отображаются данные возврата по данным VaR и ES.
VaRInd = 2; figure; plot(Dates,Returns,Dates,-VaR(:,VaRInd),Dates,-ES(:,VaRInd)) legend('Returns','VaR','ES') title(['Test Data, ' num2str(VaRLevel(VaRInd)*100) '% Confidence']) grid on

esbacktestbysim объект.Создание esbacktestbysim объект с использованием esbacktestbysim. Distribution используется для моделирования результатов для оценки значимости тестов. Моделирование для оценки значимости выполняется по умолчанию при создании esbacktestbysim объект. Поэтому результаты теста доступны при создании объекта. Можно задать необязательный входной аргумент пары имя-значение 'Simulate' кому false во избежание моделирования, в этом случае можно использовать simulate перед запросом результатов теста.
rng('default'); % for reproducibility IDs = ["t(dof) 95%","t(dof) 97.5%","t(dof) 99%"]; IDs = strrep(IDs,"dof",num2str(DoF)); ebts = esbacktestbysim(Returns,VaR,ES,Distribution,... 'DegreesOfFreedom',DoF,... 'Location',Mu,... 'Scale',Sigma,... 'PortfolioID',"S&P",... 'VaRID',IDs,... 'VaRLevel',VaRLevel); disp(ebts)
esbacktestbysim with properties:
PortfolioData: [1966x1 double]
VaRData: [1966x3 double]
ESData: [1966x3 double]
Distribution: [1x1 struct]
PortfolioID: "S&P"
VaRID: ["t(10) 95%" "t(10) 97.5%" "t(10) 99%"]
VaRLevel: [0.9500 0.9750 0.9900]
disp(ebts.Distribution) % distribution information stored in the 'Distribution' property Name: "t"
DegreesOfFreedom: 10
Location: 0
Scale: [1966x1 double]
Сводный отчет ES предоставляет информацию о серьезности нарушений, то есть о том, насколько велика потеря по сравнению с VaR в дни, когда VaR был нарушен. ObservedSeverity (или наблюдаемый средний коэффициент серьезности) - отношение потерь к VaR в течение дней, когда VaR нарушается. ExpectedSeverity (или ожидаемый средний коэффициент серьезности) показывает среднее отношение ES к VaR в дни нарушения VaR.
S = summary(ebts); disp(S)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing
___________ _____________ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______
"S&P" "t(10) 95%" 0.95 0.94812 1.3288 1.4515 1966 102 98.3 1.0376 0
"S&P" "t(10) 97.5%" 0.975 0.97202 1.2652 1.4134 1966 55 49.15 1.119 0
"S&P" "t(10) 99%" 0.99 0.98627 1.2169 1.3947 1966 27 19.66 1.3733 0
Выполните все тесты и создайте отчет только для результатов принятия или отклонения.
t = runtests(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional Unconditional Quantile MinBiasAbsolute MinBiasRelative
___________ _____________ ________ ___________ _____________ ________ _______________ _______________
"S&P" "t(10) 95%" 0.95 reject accept reject accept reject
"S&P" "t(10) 97.5%" 0.975 reject reject reject reject reject
"S&P" "t(10) 99%" 0.99 reject reject reject reject reject
Выполните индивидуальный тест для условного теста (также известного как первый тест Acerbi-Szekely). Второй выход (s) содержит смоделированные значения статистики теста, предполагая, что допущения распределения верны. Каждая строка s выходные данные соответствуют VaRID в соответствующей строке t выход. Эти смоделированные статистические данные используются для определения значимости тестов.
[t,s] = conditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Conditional ConditionalOnly PValue TestStatistic CriticalValue VaRTest VaRTestResult VaRTestPValue Observations Scenarios TestLevel
___________ _____________ ________ ___________ _______________ ______ _____________ _____________ _______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 reject reject 0 -0.092302 -0.043941 "pof" accept 0.70347 1966 1000 0.95
"S&P" "t(10) 97.5%" 0.975 reject reject 0.001 -0.11714 -0.052575 "pof" accept 0.40682 1966 1000 0.95
"S&P" "t(10) 99%" 0.99 reject reject 0.003 -0.14608 -0.085433 "pof" accept 0.11536 1966 1000 0.95
whos sName Size Bytes Class Attributes s 3x1000 24000 double
Визуализация значимости условного теста с использованием гистограмм для отображения распределения типичных значений (результаты моделирования). В гистограммах звездочка показывает значение статистики теста, наблюдаемой для фактических результатов. Это визуализация автономного условного теста. Конечный результат условного теста также зависит от предварительного теста VaR, как показано в выходных данных условного теста.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Conditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end

Выполните индивидуальный тест для безусловного теста (также известного как второй тест Acerbi-Szekely).
[t,s] = unconditional(ebts); disp(t)
PortfolioID VaRID VaRLevel Unconditional PValue TestStatistic CriticalValue Observations Scenarios TestLevel
___________ _____________ ________ _____________ ______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 accept 0.093 -0.13342 -0.16252 1966 1000 0.95
"S&P" "t(10) 97.5%" 0.975 reject 0.031 -0.25011 -0.2268 1966 1000 0.95
"S&P" "t(10) 99%" 0.99 reject 0.008 -0.57396 -0.38264 1966 1000 0.95
Визуализация значимости безусловного теста с использованием гистограмм для отображения распределения типичных значений (результаты моделирования). В гистограммах звездочка показывает значение статистики теста, наблюдаемой для фактических результатов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Unconditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end

Выполните индивидуальный тест для квантового теста (также известного как третий тест Acerbi-Szekely).
[t,s] = quantile(ebts); disp(t)
PortfolioID VaRID VaRLevel Quantile PValue TestStatistic CriticalValue Observations Scenarios TestLevel
___________ _____________ ________ ________ ______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 reject 0.002 -0.10602 -0.055798 1966 1000 0.95
"S&P" "t(10) 97.5%" 0.975 reject 0 -0.15697 -0.073513 1966 1000 0.95
"S&P" "t(10) 99%" 0.99 reject 0 -0.26561 -0.10117 1966 1000 0.95
Визуализация значимости квантового теста с использованием гистограмм для отображения распределения типичных значений (результаты моделирования). В гистограммах звездочка показывает значение статистики теста, наблюдаемой для фактических результатов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('Quantile: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end

Выполните индивидуальный тест для теста minBiasAbsolute.
[t,s] = minBiasAbsolute(ebts); disp(t)
PortfolioID VaRID VaRLevel MinBiasAbsolute PValue TestStatistic CriticalValue Observations Scenarios TestLevel
___________ _____________ ________ _______________ ______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 accept 0.062 -0.0014247 -0.0015578 1966 1000 0.95
"S&P" "t(10) 97.5%" 0.975 reject 0.029 -0.0026674 -0.0023251 1966 1000 0.95
"S&P" "t(10) 99%" 0.99 reject 0.005 -0.0060982 -0.0039004 1966 1000 0.95
Визуализация значимости теста minBiasAbsolute с использованием гистограмм для отображения распределения типичных значений (результаты моделирования). В гистограммах звездочка показывает значение статистики теста, наблюдаемой для фактических результатов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('minBiasAbsolute: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end

Выполните индивидуальный тест для теста minBiasRelative.
[t,s] = minBiasRelative(ebts); disp(t)
PortfolioID VaRID VaRLevel MinBiasRelative PValue TestStatistic CriticalValue Observations Scenarios TestLevel
___________ _____________ ________ _______________ ______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 reject 0.003 -0.10509 -0.056072 1966 1000 0.95
"S&P" "t(10) 97.5%" 0.975 reject 0 -0.15603 -0.073324 1966 1000 0.95
"S&P" "t(10) 99%" 0.99 reject 0 -0.26716 -0.104 1966 1000 0.95
Визуализация значимости теста minBiasRelative с использованием гистограмм для отображения распределения типичных значений (результаты моделирования). В гистограммах звездочка показывает значение статистики теста, наблюдаемой для фактических результатов.
NumVaRs = height(t); figure; for VaRInd = 1:NumVaRs subplot(NumVaRs,1,VaRInd) histogram(s(VaRInd,:)); hold on; plot(t.TestStatistic(VaRInd),0,'*'); hold off; Title = sprintf('minBiasRelative: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd)); title(Title) end

Снова запустите моделирование с использованием 5000 сценариев для создания нового набора результатов тестирования. Если начальные результаты теста для одного из тестов являются пограничными, использование моделирования большего размера может помочь уточнить результаты теста.
ebts = simulate(ebts,'NumScenarios',5000); t = unconditional(ebts); % new results for unconditional test disp(t)
PortfolioID VaRID VaRLevel Unconditional PValue TestStatistic CriticalValue Observations Scenarios TestLevel
___________ _____________ ________ _____________ ______ _____________ _____________ ____________ _________ _________
"S&P" "t(10) 95%" 0.95 accept 0.0984 -0.13342 -0.17216 1966 5000 0.95
"S&P" "t(10) 97.5%" 0.975 reject 0.0456 -0.25011 -0.24251 1966 5000 0.95
"S&P" "t(10) 99%" 0.99 reject 0.0104 -0.57396 -0.40089 1966 5000 0.95
conditional | minBiasAbsolute | minBiasRelative | quantile | runtests | simulate | summary | unconditional