Як встановити набір даних до розподілу Парето в R?


22

Маємо, скажімо, такі дані:

8232302  684531  116857   89724   82267   75988   63871   
  23718    1696     436     439     248     235

Хочете простий спосіб пристосувати це (та кілька інших наборів даних) до дистрибутива Pareto. В ідеалі він виводить би відповідні теоретичні значення, а не ідеально параметри.



Що призначено під «узгодження теоретичних значень»? Очікування статистики замовлень з огляду на параметри? Або щось інше?
Glen_b -Встановіть Моніку

Відповіді:


33

Ну, якщо у вас є зразок з розподілу парето з параметрами m > 0 і α > 0 (де m - нижній граничний параметр, а α - параметр форми), ймовірність журналу цього зразка:X1,...,Xnm>0α>0mα

nlog(α)+nαlog(m)(α+1)i=1nlog(Xi)

це монотонно зростає в , тому максимізатор - найбільше значення, що відповідає спостережуваним даним. Оскільки параметр m визначає нижню межу опори для розподілу Парето, оптимальним єmm

m^=miniXi

що не залежить від . Далі, використовуючи звичайні підрахунки, MLE для α має задовольнятиαα

nα+nlog(m^)i=1nlog(Xi)=0

деяка проста алгебра говорить нам, що MLE єα

α^=ni=1nlog(Xi/m^)

У багатьох важливих сенсах (наприклад, оптимальна асимптотична ефективність завдяки досягненню нижньої межі Крамера-Рао) це найкращий спосіб пристосування даних до розподілу Парето. R нижче код обчислює MLE для заданого набору даних, X.

pareto.MLE <- function(X)
{
   n <- length(X)
   m <- min(X)
   a <- n/sum(log(X)-log(m))
   return( c(m,a) ) 
}

# example. 
library(VGAM)
set.seed(1)
z = rpareto(1000, 1, 5) 
pareto.MLE(z)
[1] 1.000014 5.065213

Edit: На основі коментарів по @cardinal і я нижче, ми можемо також відзначити , що альфа є зворотною вибірки середнього значення колоди ( X я / м ) «s, що трапиться мати експоненціальне розподіл. Тому, якщо ми маємо доступ до програмного забезпечення, яке може відповідати експоненціальному розподілу (що скоріше, оскільки це, мабуть, виникає у багатьох статистичних проблемах), то встановлення розподілу Парето може бути здійснено шляхом трансформації набору даних таким чином і підгонки його до експоненціального розподілу за трансформованою шкалою. α^log(Xi/m^)


3
(+1) Ми можемо написати речі трохи більш сугестивно, зазначивши, що розподілено експоненціально зі швидкістю α . Звідси і з інваріантності ОМПА при перетворенні укладає відразу , що & alpha ; = 1 / ˉ Y , де замінить т на т в останньому виразі. Це також натякає на те, як ми можемо використовувати стандартне програмне забезпечення для пристосування Pareto, навіть якщо явної опції немає. Yi=log(Xi/m)αα^=1/Y¯mm^
кардинал

α^log(Xi/m^)

2
Привіт, Макрос. Я намагався зробити те, що проблема оцінки параметрів Парето може бути (по суті) зведена до оцінки швидкості експоненціалу: Через перетворення вище ми можемо перетворити наші дані та проблеми в (можливо) більш знайомий і негайно витягнути відповідь (якщо припустити, що ми або наше програмне забезпечення вже знаємо, що робити зі зразком експоненцій).
кардинал

Як я можу виміряти помилку такого типу пристосування?
emanuele

@emanuele, приблизна дисперсія MLE - це обернена інформаційна матриця рибалки, яка вимагає від вас обчислити принаймні одну похідну від вірогідності журналу. Або ви можете скористатись певним перекомпонуванням завантаження для оцінки стандартної помилки.
Макрос

8

Ви можете використовувати fitdistфункцію, надану в fitdistrplusпакеті:

library(MASS)
library(fitdistrplus)
library(actuar)

# suppose data is in dataPar list
fp <- fitdist(dataPar, "pareto", start=list(shape = 1, scale = 500))
#the mle parameters will be stored in fp$estimate

Це повинно бути library(fitdistrplus)?
Шон

1
@Sean так, відповідно редагуючи відповідь
Кевін Л Кіс

Зауважте, що library(actuar)для цього потрібно заклик до .
jsta

Що в цьому випадку представляє fp $ оцінка ["форма"]? Це, можливо, орієнтовна альфа? Або бета-версія?
Альберт Гендрікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.