exponenta event banner

Подбор непараметрического распределения с помощью Pareto Tails

В этом примере показано, как подогнать непараметрическое распределение вероятности к данным выборки, используя хвосты Парето, чтобы сгладить распределение в хвостах.

Шаг 1. Создать образец данных.

Создание образцов данных, содержащих больше отклонений, чем ожидалось из стандартного нормального распределения.

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

Шаг 2. Подбор вероятностных распределений к данным.

Подгоните нормальное распределение и распределение в масштабе местоположения к данным и постройте график для визуального сравнения.

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')

Figure contains an axes. The axes with title Probability Plot contains 3 objects of type line. These objects represent Normal, Data, t location-scale.

Оба распределения, по-видимому, достаточно хорошо подходят в центре, но ни нормальное распределение, ни распределение по шкале местоположения не очень хорошо подходят для хвостов.

Шаг 3. Создание эмпирического распределения.

Для лучшего вписывания используйте ecdf для генерации эмпирического cdf на основе данных выборки.

figure
ecdf(data)

Figure contains an axes. The axes contains an object of type stair.

Эмпирическое распределение обеспечивает идеальную посадку, но отклонения делают хвосты очень дискретными. Случайные выборки, генерируемые из этого распределения с использованием метода инверсии, могут включать в себя, например, значения около 4,33 и 9,25, но не значения между ними.

Шаг 4. Поместите дистрибутив с помощью хвостов Парето.

Использовать 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 или сгенерировать случайные числа из распределения.

Шаг 5. Вычислите и постройте график cdf.

Вычислите и постройте график cdf установленного paretotails распространение.

x = -4:0.01:10;
plot(x,cdf(pfit,x))

Figure contains an axes. The axes contains an object of type line.

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

См. также

| |

Связанные темы