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

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

Figure contains an axes. The axes with title Test Data, VaR Level 97.5% contains 4 objects of type bar, line. These objects represent Returns, VaR, ES.

Создайте 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

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

Figure contains an axes. The axes with title UnconditionalDE Test Distribution VaR Level: 97.5%, Sample Size = 261 contains 2 objects of type histogram, line. These objects represent Simulation, Large-Sample.

Детали условного испытания DE

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

Figure contains an axes. The axes with title ConditionalDE Test Distribution VaR Level: 97.5%, Sample Size = 261 contains 2 objects of type histogram, line. These objects represent Simulation, Large-Sample.

Поскольку условный тест 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   

См. также

| | |

Похожие темы