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

Оба распределения, по-видимому, достаточно хорошо подходят в центре, но ни нормальное распределение, ни распределение по шкале местоположения не очень хорошо подходят для хвостов.
Для лучшего вписывания используйте 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 или ядра в центре образца и гладкие обобщенные распределения Парето (GPD) в хвостах. Использовать paretotails создать paretotails объект распределения вероятности. Можно получить доступ к информации о посадке и выполнить дальнейшие вычисления для объекта с помощью функций объекта paretotails объект. Например, можно вычислить cdf или сгенерировать случайные числа из распределения.
Вычислите и постройте график cdf установленного paretotails распространение.
x = -4:0.01:10; plot(x,cdf(pfit,x))

paretotails cdf точно соответствует данным, но является более гладким в хвостах, чем ecdf, сгенерированный на этапе 3.
ecdf | fitdist | paretotails