Этот пример показывает, как соответствовать непараметрическому распределению вероятностей к выборочным данным с помощью хвостов Парето, чтобы сглаживать распределение в хвостах.
Сгенерируйте выборочные данные, которые содержат больше выбросов, чем ожидалось от стандартного нормального распределения.
rng('default') % For reproducibility left_tail = -exprnd(1,10,1); right_tail = exprnd(5,10,1); center = randn(80,1); data = [left_tail;center;right_tail];
Данные содержат 80% значений от стандартного нормального распределения, 10% от экспоненциального распределения со средним значением 5, и 10% от экспоненциального распределения со средним значением-1. По сравнению со стандартным нормальным распределением экспоненциальные значения, более вероятно, будут выбросами, особенно в верхнем хвосте.
Соответствуйте нормальному распределению и t распределению шкалы местоположения к данным и графику для визуального сравнения.
probplot(data); p = fitdist(data,'tlocationscale'); h = probplot(gca,p); set(h,'color','r','linestyle','-'); title('Probability Plot') legend('Normal','Data','t location-scale','Location','SE')
Оба дистрибутива, кажется, соответствуют обоснованно хорошо в центре, но ни нормальное распределение, ни t распределение шкалы местоположения не соответствуют хвостам очень хорошо.
Чтобы получить лучшую подгонку, используйте ecdf
, чтобы сгенерировать эмпирический cdf на основе выборочных данных.
figure ecdf(data)
Эмпирическое распределение обеспечивает совершенную подгонку, но выбросы делают хвосты очень дискретными. Случайные выборки, сгенерированные от этого распределения с помощью метода инверсии, могут включать, например, значения около 4.33 и 9.25, но никакие промежуточные значения.
Используйте paretotails
, чтобы сгенерировать эмпирический cdf для средних 80% данных, и подгонка обобщила дистрибутивы Парето к более низким и верхним 10%.
pfit = paretotails(data,0.1,0.9)
pfit = Piecewise distribution with 3 segments -Inf < x < -1.24623 (0 < p < 0.1): lower tail, GPD(-0.334156,0.798745) -1.24623 < x < 1.48551 (0.1 < p < 0.9): interpolated empirical cdf 1.48551 < x < Inf (0.9 < p < 1): upper tail, GPD(1.23681,0.581868)
Чтобы получить лучшую подгонку, paretotails
соответствует распределению путем соединения ecdf или распределения ядра в центре выборки и сглаженных обобщенных дистрибутивов Парето (GPDs) в хвостах. Используйте paretotails
, чтобы создать объект распределения вероятностей paretotails
. Можно получить доступ к информации о подгонке и выполнить дальнейшие вычисления на объекте с помощью объектных функций объекта paretotails
. Например, можно оценить cdf или сгенерировать случайные числа от распределения.
Вычислите и постройте cdf подходящего распределения paretotails
.
x = -4:0.01:10; plot(x,cdf(pfit,x))
paretotails
cdf тесно соответствует данным, но более сглажен в хвостах, чем ecdf, сгенерированный на Шаге 3.
ecdf
| fitdist
| paretotails