В этом примере показано, как строить непараметрическое распределение вероятности к выборочным данным с помощью хвостов Парето, чтобы сглаживать распределение в хвостах.
Сгенерируйте выборочные данные, которые содержат больше выбросов, чем ожидалось от стандартного нормального распределения.
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.
fitdist
| paretotails
| ecdf