Этот пример показывает ожидаемый рабочий процесс тестирования дефицита (ES) с использованием esbacktestbysim
объект. Тесты, поддерживаемые в esbacktestbysim
объект требует в качестве входов не только тестовых данных (Portfolio
, VaR
, и ES
данные), а также информация о распределении тестируемой модели.
The esbacktestbysim
класс поддерживает пять тестов - условный, безусловный, квантиль, которые основаны на Acerbi-Szekely (2014) и minBiasAbsolute и minBiasRelative, которые основаны на Acerbi-Szekely (2017 ans 2019). Эти тесты используют распределительные допущения, чтобы симулировать сценарии возврата, предполагая, что распределительные допущения верны (нулевая гипотеза). Моделируемые сценарии находят распределение типичных значений для статистики теста и значимость тестов. esbacktestbysim
поддерживает нормальные и t распределения шкалы местоположения (с фиксированным количеством степеней свободы во всем тестовом окне).
Используйте 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
. The 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 был нарушен. The ObservedSeverity
(или наблюдаемый средний коэффициент тяжести) столбец представляет собой отношение потерь к VaR в течение дней, когда VaR нарушен. The 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 s
Name 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