paretotails

Кусочное распределение с хвостами Парето

Описание

Объект paretotails является кусочным распределением с обобщенными дистрибутивами Парето (GPDs) в хвостах.

Объект paretotails состоит из одного или двух GPDs в хвостах и другого распределения в центре. Можно задать тип распределения для центра при помощи аргумента cdffun paretotails, когда вы создаете объект. Допустимыми значениями является 'ecdf', 'kernel' и указатель на функцию.

paretotails соответствует распределению типа cdffun к наблюдениям (x) и находит квантили, соответствующие более низким и верхним интегральным вероятностям хвоста (pl и pu, соответственно). Затем paretotails соответствует двум GPDs к более низкому проценту 100*pl наблюдений и верхнему проценту 100*(1–pu) наблюдений, соответственно. Если x не имеет по крайней мере двух отличных наблюдений в хвосте, то paretotails не создает соответствующий сегмент хвоста.

Используйте объектные функции boundary, segment, upperparams и lowerparams, чтобы найти характеристики распределения. lowerparams и upperparams возвращают параметры GPDs в хвостах. boundary возвращает граничные точки между кусочными сегментами распределения, segment возвращает сегмент кусочного распределения, содержащего входные значения, и nsegments возвращает количество сегментов в объекте.

Используйте объектные функции cdf, icdf, pdf и random, чтобы оценить распределение. Эти функции хорошо подходят для связки и других симуляций Монте-Карло. pdf возвращает плотность GPD в хвостах и наклоне кумулятивной функции распределения (cdf) в центре. Эти функция плотности вероятности (PDF) значения в центре обычно являются не хорошими оценками базовой плотности исходных данных.

Создание

Создайте кусочный объект распределения с помощью paretotails.

Синтаксис

pd = paretotails(x,pl,pu)
pd = paretotails(x,pl,pu,cdffun)

Описание

пример

pd = paretotails(x,pl,pu) возвращает кусочный объект распределения pd, который состоит из эмпирического распределения в центре и обобщил дистрибутивы Парето в хвостах. Задайте контуры хвостов с помощью более низких и верхних интегральных вероятностей хвоста pl и pu, соответственно.

пример

pd = paretotails(x,pl,pu,cdffun) задает тип центрального сегмента распределения с помощью cdffun.

Входные параметры

развернуть все

Входные данные, заданные как числовой вектор.

Типы данных: double

Более низкая интегральная вероятность хвоста, заданная в виде числа в области значений [0,1]. Квантиль pl является контуром более низких наблюдений хвоста.

Если pl является 0, или x не имеет по крайней мере двух отличных наблюдений в более низком хвосте, то paretotails делит входные данные на x в две группы, центральный и верхний хвост. В этом случае подходящий кусочный объект распределения pd состоит из двух сегментов: эмпирическое распределение в центре и GPD в верхнем хвосте.

Пример: 0.1

Типы данных: single | double

Верхняя интегральная вероятность хвоста, заданная в виде числа в области значений [0,1]. Квантиль pu является контуром верхних наблюдений хвоста.

Если pu является 1, или x не имеет по крайней мере двух отличных наблюдений в верхнем хвосте, то paretotails делит входные данные на x в две группы, центр и более низкий хвост. В этом случае подходящий кусочный объект распределения pd состоит из двух сегментов: эмпирическое распределение в центре и GPD в более низком хвосте.

Пример: 0.9

Типы данных: single | double

Тип центрального сегмента распределения, заданного как 'ecdf', 'kernel' или указатель на функцию.

ЗначениеОписание
'ecdf'

Интерполированный эмпирический cdf.

paretotails использует значения в x как средние точки на вертикальных шагах эмпирического cdf и вычисляет оценки для точек между значениями в x линейной интерполяцией. Для получения дополнительной информации о том, как найти интерполированный эмпирический cdf, смотрите Кусочную Линейную Непараметрическую Оценку CDF.

'kernel'

Интерполированная оценка сглаживания ядра cdf.

paretotails использует функцию ksdensity, чтобы найти оценки cdf для 100 точек в области значений x и использует линейную интерполяцию, чтобы вычислить оценки для точек между 100 точками.

'kernel' эквивалентен определению указателя на функцию fun = @(x)ksdensity(x,'function','cdf');.

указатель на функцию

Интерполированные оценки с помощью заданной функции.

paretotails использует указатель на функцию формы [p,xi] = fun(x), который принимает вектор входных данных x и возвращает векторный p cdf значений и векторный xi точек оценки. Значения в xi должны быть отсортированы и отличные, но не должны равняться значениям в x. Функция paretotails вычисляет оценки cdf для точек между значениями в xi линейной интерполяцией.

paretotails использует cdffun, чтобы вычислить квантили, соответствующие pl и pu.

Пример: 'kernel'

Свойства

развернуть все

Это свойство доступно только для чтения.

Количество сегментов, включая центральный сегмент и сегменты хвоста в объекте paretotail, заданном как скаляр. NumSegments равняется 3, 2, или 1, если количество сегментов хвоста в объекте равняется 2, 1, или 0, соответственно.

Типы данных: double

Это свойство доступно только для чтения.

Более низкий хвост параметры GPD, соответствуйте к более низким экстремальным наблюдениям в x, заданном как числовой вектор. Первое значение является параметром формы, и второе значение является масштабным коэффициентом GPD.

Параметр положения более низкого хвоста GPD равен квантилю pl. Используйте функцию boundary, чтобы возвратить параметр положения. Например, запустите [p,q] = boundary(pd), где pd является объектом paretotails. q(1) является параметром положения.

Типы данных: single | double

Это свойство доступно только для чтения.

Верхний хвост параметры GPD, соответствуйте к верхним экстремальным наблюдениям в x, заданном как числовой вектор. Первое значение является параметром формы, и второе значение является масштабным коэффициентом GPD.

Параметр положения верхнего хвоста GPD равен квантилю pu. Используйте функцию boundary, чтобы возвратить параметр положения. Например, запустите [p,q] = boundary(pd), где pd является объектом paretotails. q(2) является параметром положения.

Типы данных: single | double

Функции объекта

boundaryКусочные контуры распределения
cdfКумулятивная функция распределения
icdfОбратная кумулятивная функция распределения
lowerparamsПонизьте параметры хвоста Парето
nsegmentsКоличество сегментов в кусочном распределении
pdfФункция плотности вероятности
randomСлучайные числа
segmentКусочные сегменты распределения, содержащие входные значения
upperparamsВерхние параметры хвоста Парето

Примеры

свернуть все

Сгенерируйте набор выборочных данных и соответствуйте кусочному распределению хвостами Парето к данным. Задайте эмпирическое распределение для центра при помощи paretotails с его настройками по умолчанию.

Сгенерируйте набор выборочных данных, содержащий 100 случайных чисел от t распределения с 3 степенями свободы.

rng('default');  % For reproducibility
t = trnd(3,100,1);

Создайте объект paretotails путем подбора кривой кусочному распределению к t. Задайте контуры хвостов с помощью более низких и верхних интегральных вероятностей хвоста так, чтобы подходящий объект состоял из эмпирического распределения для средних 80% набора данных и GPDs для более низких и верхних 10% набора данных.

pd = paretotails(t,0.1,0.9)
pd = 
Piecewise distribution with 3 segments
      -Inf < x < -1.84875    (0 < p < 0.1): lower tail, GPD(0.183032,1.00347)
   -1.84875 < x < 2.07662  (0.1 < p < 0.9): interpolated empirical cdf
        2.07662 < x < Inf    (0.9 < p < 1): upper tail, GPD(0.333239,1.19705)

Каждая строка отображения объекта показывает сводные данные каждого сегмента, включая параметры GPD (форма и масштабные коэффициенты) и граничные значения в квантилях и интегральных вероятностях. Используйте объектные функции boundary, lowerparams и upperparams, чтобы возвратить эти значения.

Можно использовать функцию nsegments, чтобы возвратить количество сегментов и функции segment, чтобы возвратить сегмент, который содержит входные значения.

Можно также использовать функции распределения cdf, icdf, pdf и random, чтобы оценить распределение и сгенерировать случайные выборки.

Постройте cdf t распределения и cdf объекта paretotails на той же фигуре.

x = linspace(-5,5);
plot(x,tcdf(x,3),'r--')
hold on
plot(x,cdf(pd,x),'b-')

Найдите граничные точки между сегментами объекта paretotails при помощи boundary и отметьте точки на фигуре.

[p,q] = boundary(pd);
plot(q,p,'bo')
legend('t Distribution','Pareto Tails Object','Boundary Points','Location','best')
hold off

Сгенерируйте набор выборочных данных и соответствуйте кусочному распределению хвостами Парето к данным. Соответствуйте центральному сегменту при помощи paretotails с указателем на функцию.

Сгенерируйте набор выборочных данных, содержащий 20% выбросов.

rng('default');  % For reproducibility
left_tail = -exprnd(1,100,1);
right_tail = exprnd(5,100,1);
center = randn(800,1);
x = [left_tail;center;right_tail];

Задайте указатель на функцию с помощью ksdensity, чтобы задать значение не по умолчанию пропускной способности.

myfun1 = @(x)ksdensity(x,'Bandwidth',.1,'Function','cdf');

Создайте объект paretotails путем подбора кривой кусочному распределению заданным средством оценки сглаживания ядра к x. Задайте контуры хвостов с помощью более низких и верхних интегральных вероятностей хвоста так, чтобы подходящий объект состоял из средства оценки ядра для средних 80% набора данных и GPDs для более низких и верхних 10% набора данных.

pd1 = paretotails(x,0.1,0.9,myfun1)
pd1 = 
Piecewise distribution with 3 segments
      -Inf < x < -1.35204    (0 < p < 0.1): lower tail, GPD(0.0104112,0.54947)
   -1.35204 < x < 1.80824  (0.1 < p < 0.9): function: @(x)ksdensity(x,'Bandwidth',.1,'Function','cdf')
        1.80824 < x < Inf    (0.9 < p < 1): upper tail, GPD(0.227542,3.10586)

Можно также использовать параметрическое распределение для центрального сегмента. Задайте функцию, которая соответствует нормальному распределению к данным и возвращает cdf значения, и передайте указатель на функцию, когда вы создаете объект paretotails.

pd2 = paretotails(x,0.1,0.9,@myfun2)
pd2 = 
Piecewise distribution with 3 segments
      -Inf < x < -2.70875    (0 < p < 0.1): lower tail, GPD(-0.358104,0.831855)
   -2.70875 < x < 3.52195  (0.1 < p < 0.9): function: myfun2
        3.52195 < x < Inf    (0.9 < p < 1): upper tail, GPD(-0.0661815,5.04694)

function [p,xi] = myfun2(x)
    pd = fitdist(x,'Normal');
    xi = linspace(min(x),max(x),length(x)*2);
    p = cdf(pd,xi);
end

Представленный в R2007a