В этом примере показано, как подгонять данные хвоста к обобщенному распределению Парето путем оценки максимального правдоподобия.
Подгонка параметрического распределения к данным иногда приводит к модели, которая хорошо согласуется с данными в областях с высокой плотностью, но плохо в областях с низкой плотностью. Для унимодальных распределений, таких как нормальное или Стьюдентовское, эти области низкой плотности известны как «хвосты» распределения. Одна из причин, почему модель может плохо вписываться в хвосты, заключается в том, что по определению в хвостах меньше данных, на которых можно основывать выбор модели, и поэтому модели часто выбираются на основе их способности подгонять данные вблизи режима. Другой причиной может быть то, что распределение реальных данных часто сложнее, чем обычные параметрические модели.
Однако во многих приложениях главной проблемой является подгонка данных в хвосте. Обобщённое распределение Парето (GP) было разработано как распределение, которое может моделировать хвосты широкого разнообразия распределений, основываясь на теоретических аргументах. Один из подходов к аппроксимации распределения, который включает в себя GP, заключается в использовании непараметрической аппроксимации (например, эмпирической кумулятивной функции распределения) в областях, где существует много наблюдений, и подгонке GP к хвосту (ам) данных.
Обобщенный парето (GP) - это скошенное вправо распределение, параметризованное параметром формы k и параметром масштаба sigma. k также известен как параметр «хвостовой индекс» и может быть положительным, нулевым или отрицательным.
x = linspace(0,10,1000); plot(x,gppdf(x,-.4,1),'-', x,gppdf(x,0,1),'-', x,gppdf(x,2,1),'-'); xlabel('x / sigma'); ylabel('Probability density'); legend({'k < 0' 'k = 0' 'k > 0'});

Обратите внимание, что для k < 0 вероятность GP выше верхнего предела - (1/k). Для k > = 0 GP не имеет верхнего предела. Кроме того, GP часто используется в сочетании с третьим пороговым параметром, который смещает нижний предел от нуля. Нам не нужна здесь такая общность.
Распределение ГП является обобщением как экспоненциального распределения (k = 0), так и распределения Парето (k > 0). GP включает эти два распределения в большем семействе, так что возможен непрерывный диапазон форм.
Распределение ГП может быть определено конструктивно с точки зрения превышений. Начиная с вероятностного распределения, правый хвост которого падает до нуля, такого как нормаль, мы можем отсчитывать случайные значения независимо от этого распределения. Если мы фиксируем пороговое значение, выбрасываем все значения, которые ниже порогового значения, и вычитаем пороговое значение из значений, которые не выбрасываются, результат называется превышениями. Распределение превышений составляет приблизительно ГП. Аналогично, мы можем установить порог в левом хвосте распределения и игнорировать все значения выше этого порога. Порог должен быть достаточно далеко в хвосте исходного распределения, чтобы аппроксимация была разумной.
Исходное распределение определяет параметр k формы результирующего распределения GP. Распределения, хвосты которых выпадают как полином, например t Стьюдента, приводят к положительному параметру формы. Распределения, хвосты которых уменьшаются экспоненциально, например нормаль, соответствуют нулевому параметру формы. Распределения с конечными хвостами, такие как бета, соответствуют отрицательному параметру формы.
Реальные приложения для распределения ГП включают моделирование экстремальных показателей доходности фондовых рынков и моделирование экстремальных наводнений. В этом примере мы будем использовать смоделированные данные, созданные из распределения Стьюдента с 5 степенями свободы. Мы возьмем самые большие 5% из 2000 наблюдений из распределения t, а затем вычтем 95% квантиль, чтобы получить превышения.
rng(3,'twister');
x = trnd(5,2000,1);
q = quantile(x,.95);
y = x(x>q) - q;
n = numel(y)
n = 100
Распределение GP определяется для 0 < sigma и -Inf < k < Inf. Однако интерпретация результатов оценки максимального правдоподобия проблематична, когда k < -1/2. К счастью, эти случаи соответствуют подгонке хвостов из распределений, таких как бета или треугольные, и поэтому не будут представлять проблемы здесь.
paramEsts = gpfit(y); kHat = paramEsts(1) % Tail index parameter sigmaHat = paramEsts(2) % Scale parameter
kHat =
0.0987
sigmaHat =
0.7156
Как можно ожидать, поскольку смоделированные данные были сгенерированы с использованием распределения t, оценка k является положительной.
Чтобы визуально оценить, насколько хорошо подходит, мы построим масштабированную гистограмму данных хвоста, наложенную на функцию плотности ГП, которую мы оценили. Гистограмма масштабируется таким образом, что высота полосы умножает сумму ее ширины на 1.
bins = 0:.25:7; h = bar(bins,histc(y,bins)/(length(y)*.25),'histc'); h.FaceColor = [.9 .9 .9]; ygrid = linspace(0,1.1*max(y),100); line(ygrid,gppdf(ygrid,kHat,sigmaHat)); xlim([0,6]); xlabel('Exceedance'); ylabel('Probability Density');

Мы использовали довольно небольшую ширину бункера, так что в гистограмме много шума. Тем не менее, подогнанная плотность соответствует форме данных, и поэтому модель GP кажется хорошим выбором.
Мы также можем сравнить эмпирический CDF с установленным CDF.
[F,yi] = ecdf(y); plot(yi,gpcdf(yi,kHat,sigmaHat),'-'); hold on; stairs(yi,F,'r'); hold off; legend('Fitted Generalized Pareto CDF','Empirical CDF','location','southeast');

Чтобы количественно определить точность оценок, мы будем использовать стандартные ошибки, вычисленные из асимптотической ковариационной матрицы оценщиков максимального правдоподобия. Функция gplike вычисляет в качестве второго выхода численное приближение к этой ковариационной матрице. В качестве альтернативы мы могли бы позвонить gpfit с двумя выходными аргументами, и он бы вернул доверительные интервалы для параметров.
[nll,acov] = gplike(paramEsts, y); stdErr = sqrt(diag(acov))
stdErr =
0.1158
0.1093
Эти стандартные ошибки указывают на то, что относительная точность оценки для k немного ниже, чем для сигмы - её стандартная ошибка находится в порядке самой оценки. Параметры формы часто трудно оценить. Важно иметь в виду, что вычисление этих стандартных ошибок предполагало, что модель GP верна, и что у нас достаточно данных для асимптотического приближения к ковариационной матрице для хранения.
Интерпретация стандартных ошибок обычно предполагает, что, если одна и та же подгонка может быть повторена много раз для данных, полученных из одного и того же источника, оценки максимального правдоподобия параметров будут приблизительно следовать нормальному распределению. Например, доверительные интервалы часто основаны на этом предположении.
Однако это нормальное приближение может быть хорошим, а может и нет. Чтобы оценить, насколько это хорошо в этом примере, мы можем использовать моделирование начальной загрузки. Мы создадим 1000 наборов данных репликации путем повторной выборки из данных, подберем распределение GP для каждого и сохраним все оценки репликации.
replEsts = bootstrp(1000,@gpfit,y);
В качестве грубой проверки распределения выборки оценщиков параметров можно просмотреть гистограммы реплик начальной загрузки.
subplot(2,1,1); hist(replEsts(:,1)); title('Bootstrap estimates of k'); subplot(2,1,2); hist(replEsts(:,2)); title('Bootstrap estimates of sigma');

Гистограмма оценок начальной загрузки для k кажется лишь немного асимметричной, в то время как для оценок sigma определенно выглядит скошенной вправо. Обычным средством устранения этого перекоса является оценка параметра и его стандартной ошибки на логарифмической шкале, где нормальная аппроксимация может быть более разумной. График Q-Q является лучшим способом оценки нормальности, чем гистограмма, потому что ненормальность проявляется как точки, которые приблизительно не следуют за прямой линией. Давайте проверим, подходит ли преобразование журнала для sigma.
subplot(1,2,1); qqplot(replEsts(:,1)); title('Bootstrap estimates of k'); subplot(1,2,2); qqplot(log(replEsts(:,2))); title('Bootstrap estimates of log(sigma)');

Оценки начальной загрузки для k и log (sigma) оказываются приемлемо близкими к нормальности. График Q-Q для оценок сигмы, на незарегистрированной шкале, подтвердит перекос, который мы уже видели на гистограмме. Таким образом, было бы более разумно построить доверительный интервал для сигмы, сначала вычисляя один для логарифма (сигма) в предположении нормальности, а затем возведя в степень, чтобы преобразовать этот интервал обратно в исходный масштаб для сигмы.
На самом деле, это именно то, что функция gpfit делает за кадром.
[paramEsts,paramCI] = gpfit(y);
kHat kCI = paramCI(:,1)
kHat =
0.0987
kCI =
-0.1283
0.3258
sigmaHat sigmaCI = paramCI(:,2)
sigmaHat =
0.7156
sigmaCI =
0.5305
0.9654
Обратите внимание, что в то время как 95% доверительный интервал для k является симметричным относительно оценки максимального правдоподобия, доверительный интервал для sigma не является. Это потому, что он был создан путем преобразования симметричного CI для log (sigma).