Рабочий процесс для Ожидаемого недостатка (ES) Backtesting Du и Escanciano

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

Используйте 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

Безусловный тест 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)

Conditional DE Test Details

Условный тест 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             164939  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             188947  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   
Для просмотра документации необходимо авторизоваться на сайте