Як оцінити параметри для усіченого розподілу Zipf з вибірки даних?


10

У мене проблема з параметром оцінки для Zipf. Моя ситуація така:

У мене є вибірковий набір (вимірюється експериментом, який генерує дзвінки, які повинні слідувати розподілу Zipf). Я повинен продемонструвати, що цей генератор дійсно генерує дзвінки з розподілом zipf. Я вже читав це запитання і відповіді Як розрахувати коефіцієнт закону Зіпфа з набору верхніх частот? але я досягаю поганих результатів, тому що використовую усічений розподіл. Наприклад, якщо для процесу генерації я встановив значення "s" на "0,9", якщо я спробую оцінити значення "s", як було написано в повідомленні Q&A, я отримаю "s" рівним 0,2 ca. Я думаю, це пов’язано з тим, що я використовую TRUNCATED розподіл (я повинен обмежувати zipf точкою усікання, він є правильним усіченим).

Як я можу оцінити параметри з усіченим розподілом zipf?


щоб було зрозуміло, що саме ви маєте рацію? Розподіл значень чи сам сюжет Zipf? Ви знаєте точку укорочення? Чи усічення є артефактом даних або артефактом обробки даних (наприклад, якесь рішення, яке ви або експериментатор прийняли)? Будь-які додаткові дані будуть корисні.
кардинал

@cardinal. (частина 1/2) Дякую кардиналу. Я детальніше розповім: у мене є генератор VoIP, який генерує дзвінки за Zipf (та іншим розповсюдженням) за гучністю на кожного абонента. Я повинен переконатися, що цей генератор дійсно слідує цим розподілам. Для розподілу Zipf мені потрібно визначити точку обрізання (звідси вона відома і вона посилається на розподіл значень), яка є максимальною кількістю сформованого виклику користувачем та параметром масштабу. Зокрема, у моєму випадку це значення дорівнює 500, що означає, що один користувач може генерувати максимум 500 дзвінків.
Мауріціо

(частина 2/2) Іншим параметром, який потрібно встановити, є параметр масштабу для Zipf, який визначає поширення розподілу (у моєму випадку це значення 0,9). У мене є всі параметри (розмір вибірки, частота на користувача та ін.), Але я повинен переконатися, що мій набір даних відповідає розподілу zipf.
Мауріціо

тож ви, очевидно, перенормуєте розподіл на , оскільки для того, що я б вважав «усіченим Zipf», параметр масштабування 0,9 був би неможливим . Якщо ви можете генерувати безліч цих даних, а у вас "лише" 500 можливих результатів, чому б просто не використати тест на корисність чи-квадрат? Оскільки ваш розподіл має довгий хвіст, можливо, вам знадобиться досить великий розмір вибірки. Але це був би один спосіб. Ще одним швидким і брудним методом було б перевірити, чи отримуєте ви правильний емпіричний розподіл для малих значень кількості дзвінків. i=1500i0.9
кардинал

Відповіді:


14

Оновлення : 7 квітня 2011 р. Ця відповідь стає досить довгою і охоплює різні аспекти проблеми. Однак я досі протистояв, розбиваючи це на окремі відповіді.

Я внизу додав обговорення продуктивності Пірсона для цього прикладу.χ2


Брюс М. Хілл є автором, мабуть, "насіннєвої" статті про оцінку в контексті, подібному до Зіпфа. У середині 1970-х на цю тему він написав кілька робіт. Однак "Оцінювач пагорба" (як його зараз називають) по суті покладається на статистику максимального порядку вибірки, і, в залежності від виду усікання, який може привести вас до певних проблем.

Основний документ:

BM Hill, Простий загальний підхід до висновку про хвіст розподілу , Енн. Стат. , 1975.

Якщо ваші дані справді спочатку Zipf, а потім усічені, то приємна відповідність між розподілом ступеня і графіком Zipf може бути використана на вашу користь.

Зокрема, розподіл ступенів - це просто емпіричний розподіл на кількість разів, яку бачить кожна ціла відповідь,

di=#{j:Xj=i}n.

Якщо побудувати це проти на графіку журналу журналу, ми отримаємо лінійну тенденцію з нахилом, що відповідає коефіцієнту масштабування.i

З іншого боку, якщо ми побудуємо графік Zipf , де сортуємо вибірку від найбільшого до найменшого, а потім побудуємо значення проти їх рангів, ми отримаємо різну лінійну тенденцію з різним нахилом. Однак схили пов'язані між собою.

Якщо - коефіцієнт шкали масштабу для розподілу Зіпфа, то нахил на першому графіку дорівнює а нахил у другому графіку - . Нижче наведено приклад сюжету для та . Ліва панель - це ступінь розподілу, а нахил червоної лінії - . Права сторона - це ділянка Зіпфа, накладена червона лінія має нахил .- α - 1 / ( α - 1 ) α = 2 n = 10 6 - 2 - 1 / ( 2 - 1 ) = - 1αα1/(α1)α=2n=10621/(21)=1

Графіки розподілу (ліворуч) та Zipf (праворуч) для вибірки iid із розподілу Zipf.

Отже, якщо ваші дані були усічені так, що ви не бачите значень, що перевищують деякий поріг , але вони в іншому випадку розподілені Zipf і досить великі, то ви можете оцінити за розподілом ступеня . Дуже простий підхід полягає в тому, щоб прилаштувати лінію до графіку журналу журналу та використовувати відповідний коефіцієнт.τ αττα

Якщо ваші дані усічені таким чином, що ви не бачите невеликих значень (наприклад, так, як робиться велика фільтрація для великих наборів веб-даних), ви можете використовувати графік Zipf для оцінки схилу за шкалою журналу журналу, а потім " відступити "показник масштабування. Скажіть, ваша оцінка нахилу від ділянки Zipf - . Тоді, одна проста оцінка коефіцієнта масштабування - ; & alpha ; =1-1β^

α^=11β^.

@csgillespie дав одну нещодавню доповідь у співавторстві Марка Ньюмена в Мічигані щодо цієї теми. Він, схоже, публікує багато подібних статей з цього приводу. Нижче - ще одна разом з парою інших посилань, які можуть бути цікавими. Ньюмен часом статистично не робить найрозумнішого, тому будьте обережні.

MEJ Ньюмен, Закони про владу, розподіли Парето та закон Зіпфа , Сучасна фізика 46, 2005, с. 323-351.

М. Міценмахер, Коротка історія генеративних моделей закону про владу та лонормальних розподілів , Інтернет-математика. , т. 1, ні. 2, 2003. С. 226–251.

К. Найт, Проста модифікація оцінювача Хілла із застосуванням для надійності та зменшення упередженості , 2010.


Додаток :

Ось просте моделювання в щоб продемонструвати, що ви можете очікувати, якщо ви взяли зразок розміром з вашого розповсюдження (як описано у вашому коментарі під початковим запитанням).10 5R105

> x <- (1:500)^(-0.9)
> p <- x / sum(x)
> y <- sample(length(p), size=100000, repl=TRUE, prob=p)
> tab <- table(y)
> plot( 1:500, tab/sum(tab), log="xy", pch=20, 
        main="'Truncated' Zipf simulation (truncated at i=500)",
        xlab="Response", ylab="Probability" )
> lines(p, col="red", lwd=2)

Отриманий сюжет є

"Урізаний" ділянку Zipf (усічений у i = 500)

З сюжету ми бачимо, що відносна похибка розподілу градусів для (або близько того) дуже хороша. Ви можете зробити офіційний тест на квадратний чи, але це не суворо говорить про те, що дані слідують за попередньо визначеним розподілом. Це говорить лише про те, що у вас немає доказів, щоб зробити висновок, що вони не мають .i30

Але з практичної точки зору такий сюжет повинен бути відносно переконливим.


Додаток 2 : Розглянемо приклад, який Мауріціо використовує у своїх коментарях нижче. Будемо вважати, що і , з усіченим розподілом Zipf, що має максимальне значення .n = 300α=2х м а х = 500n=300000xmax=500

Ми обчислимо статистику Пірсона двома способами. Стандартний спосіб здійснюється через статистику де - це спостережувані підрахунки значення у вибірці та .X 2 = 500 i = 1 ( O i - E i ) 2χ2 OiiEi=npi=ni-α/ 500 j = 1 j-α

X2=i=1500(OiEi)2Ei
OiiEi=npi=niα/j=1500jα

Ми також обчислимо другу статистику, сформовану шляхом спочатку бінінгу рахунків у бункерах розміром 40, як показано у таблиці Мауріціо (останній бін містить лише суму двадцяти окремих значень результатів.

Візьмемо 5000 окремих вибірок розміром з цього розподілу та обчислимо -значення, використовуючи ці дві різні статистичні дані.рnp

Гістограми значень нижче і, як видно, є досить рівномірними. Емпіричні коефіцієнти помилок типу I становлять відповідно 0,0716 (стандартний, безкомбінатний метод) та 0,0502 (метод двоєдних), і статистично достовірно не відрізняються від цільового значення 0,05 для розміру вибірки 5000, який ми обрали.p

введіть тут опис зображення

Ось кодR

# Chi-square testing of the truncated Zipf.

a <- 2
n <- 300000
xmax <- 500

nreps <- 5000

zipf.chisq.test <- function(n, a=0.9, xmax=500, bin.size = 40)
{
  # Make the probability vector
  x <- (1:xmax)^(-a)
  p <- x / sum(x)

  # Do the sampling
  y <- sample(length(p), size=n, repl=TRUE, prob=p)

  # Use tabulate, NOT table!
  tab <- tabulate(y,xmax)

  # unbinned chi-square stat and p-value
  discrepancy <- (tab-n*p)^2/(n*p)
  chi.stat <- sum(discrepancy)
  p.val    <- pchisq(chi.stat, df=xmax-1, lower.tail = FALSE)

  # binned chi-square stat and p-value
  bins <- seq(bin.size,xmax,by=bin.size)
  if( bins[length(bins)] != xmax )
    bins <- c(bins, xmax)

  tab.bin  <- cumsum(tab)[bins]
  tab.bin <- c(tab.bin[1], diff(tab.bin))

  prob.bin <- cumsum(p)[bins] 
  prob.bin <- c(prob.bin[1], diff(prob.bin))

  disc.bin <- (tab.bin - n*prob.bin)^2/(n * prob.bin)
  chi.stat.bin <- sum(disc.bin)
  p.val.bin <- pchisq(chi.stat.bin, df=length(tab.bin)-1, lower.tail = FALSE)

  # Return the binned and unbineed p-values
  c(p.val, p.val.bin, chi.stat, chi.stat.bin)
}

set.seed( .Random.seed[2] )

all <- replicate(nreps, zipf.chisq.test(n, a, xmax))

par(mfrow=c(2,1))
hist( all[1,], breaks=20, col="darkgrey", border="white",
      main="Histogram of unbinned chi-square p-values", xlab="p-value")
hist( all[2,], breaks=20, col="darkgrey", border="white",
      main="Histogram of binned chi-square p-values", xlab="p-value" )

type.one.error <- rowMeans( all[1:2,] < 0.05 )

+1, чудова відповідь, як завжди. Ви повинні призначити себе модератором, залишається 1 година :)
mpiktas

@mpiktas, дякую за компліменти та заохочення. Я не впевнений, що міг би виправдати висунення себе з і без того дуже сильного списку кандидатів, які, однаково, брали участь більш широко та довше, ніж я.
кардинал

@cardinal, ось деякі посилання на Альтернативу оцінювача Хілла: оригінал стаття по Paulauskas і простеження за Vaiciulis і Gadeikis і Paulauskas . Цей оцінювач нібито мав кращі властивості, ніж оригінальний Хілл.
mpiktas

@mpiktas, дякую за посилання. Існує досить багато "нових і вдосконалених" версій програми оцінки. Основний недолік оригінального підходу полягає в тому, що він вимагає вибору "обрізання", де зупинити усереднення. Я думаю, що в основному це було зроблено шляхом "очного яблука", що відкриває перед зарядами суб'єктивності. Одна з книжок Ресніка про довгохвості дистрибуції це детально обговорює, якщо я пригадую. Я думаю, що це його останній.
кардинал

@cardinal, велике спасибі, ти дуже добрий і дуже детальний! Ваш приклад на R був дуже корисним для мене, але як я можу виконати формальний тест на квадратний чи в цьому випадку? (Я використовував тест-квадрат з іншими розподілами, такими як рівномірний, експоненціальний, нормальний, але у мене є багато сумнівів щодо zipf. Вибачте, але це мій перший підхід до цих тем). Питання модераторам: чи потрібно написати ще одне запитання на кшталт "як виконати тест чи-квадрат для усіченого розподілу zipf?" чи продовжити в цьому запитанні, можливо, оновлення тегів та заголовка?
Мауріціо

5

Папір, документ

Клаузет та ін. , Розподіл владних законів в емпіричних даних . 2009 рік

містить дуже хороший опис того, як слід підходити до відповідних моделей законів про владу. На пов'язаній веб-сторінці є зразки коду. На жаль, він не дає код для усічених дистрибутивів, але може дати вам вказівник.


Як осторонь, у статті йдеться про те, що багато "наборів даних про закон" можуть бути змодельовані однаково добре (а в деяких випадках і краще) за допомогою звичайних або експоненціальних розподілів Log!


На жаль, цей документ нічого не говорить про усічений розподіл. Я знайшов деякі пакети в R, які просто розглядають параметр оцінки Zipf (zipfR, VGAM), але усічений розподіл потребує "спеціального лікування". Своє останнє речення ви мали на увазі, що можна моделювати набір даних про енергетичний закон із, наприклад, експоненціальним розподілом, а потім застосувати деякий процес оцінки параметрів для "усіченого" експоненціального розподілу? Я дуже новачок у цій темі!
Мауріціо

У статті автори повторно аналізують різні набори даних, де встановлено закон про владу. Автори зазначають, що в ряді випадків модель закону про владу не така велика, і альтернативне розподіл було б краще.
csgillespie

2

Після детальної відповіді кардинала користувача я провів тест-квадрат на моєму імовірно усіченому розподілі zipf. Результати тестування чи-квадрата повідомляються у наступній таблиці:

введіть тут опис зображення

Якщо StartInterval і EndInterval представляють, наприклад, діапазон викликів, а спостережуване - це кількість абонентів, що генерують від 0 до 19 дзвінків і т. Д.. обчислення, інакше до цього моменту "часткове" значення чи-квадрата було прийнятним!

З іншими тестами результат той самий, останній стовпець (або останні два стовпчики) завжди збільшує остаточне значення, і я не знаю, чому я не знаю, чи (і як) використовувати інший тест перевірки.

PS: для повноти, щоб обчислити очікувані значення ( Очікувані ), я виконую пропозицію кардинала таким чином:

введіть тут опис зображення

де X_i «s використовуються для розрахунку: x <- (1:n)^-S, то P_i » S , щоб обчислити p <- x / sum(x)і , нарешті, e_i (очікуваний Н.Р. користувачів для кожного пг викликів) виходитьP_i * Total_Caller_Observed

а зі ступенем свободи = 13 добро Chi-Square завжди відкидає гіфотез, що набір зразків слідує за розподілом Zipf, оскільки Тестова статистика (64,14 в даному випадку) більша за ту, що повідомляється в таблицях хі-квадратів, "демеріт" для останнього стовпця. Графічний результат повідомляється тут: введіть тут опис зображення

хоча точка усікання встановлена ​​на 500, максимальне значення отримує 294. Я думаю, що остаточна "дисперсія" є причиною невдачі тесту чи-квадрата.

ОНОВЛЕННЯ !!

Я намагаюсь виконати тест-квадрат-чи на передбачуваному зразку даних zipf, сформованому з кодом R, повідомленим у відповіді вище.

> x <- (1:500)^(-2)
> p <- x / sum(x)
> y <- sample(length(p), size=300000, repl=TRUE, prob=p)
> tab <- table(y)
> length(tab)
[1] 438
> plot( 1:438, tab/sum(tab), log="xy", pch=20, 
        main="'Truncated' Zipf simulation (truncated at i=500)",
        xlab="Response", ylab="Probability" )
> lines(p, col="red", lwd=2)

Пов'язаний сюжет такий: введіть тут опис зображення

Результати тестування в квадратичній формі подаються на наступному малюнку: введіть тут опис зображення

а статистика тесту чі-квадрата (44,57) занадто висока для перевірки з обраним ступенем свободи. Також у цьому випадку остаточна "дисперсність" даних є причиною високого значення квадратного чи. Але є процедура перевірки цього розподілу zipf (незалежно від мого "неправильного" генератора, я хочу зосередитись на вибірці даних R) ???


@Maurizio, чомусь я пропустив цю посаду до цих пір. Чи все-таки ви можете відредагувати його і додати сюжет, подібний до останнього в моєму дописі, але використовуючи ваші спостережувані дані? Це може допомогти діагностувати проблему. Я думаю, що я побачив ще одне ваше питання, де у вас виникли проблеми з рівномірним розподілом, тому, можливо, це переходить і до цих аналізів. (?) З повагою
кардинал

@cardinal, я оновив результати! Як ти гадаєш? Питання про рівномірний розподіл - це ще одна річ, яку я повинен уточнити кращим чином, і я це зроблю сьогодні чи завтра;)
Maurizio

S=0.9

p=P(Xi=500)4.05×104n=845484544.051043.431(10.000405)84540.9675. Зауважте, наскільки тісно це відповідає симуляції, наведеному вище.
кардинал

@cardinal, я також думаю, що в процедурі генерації є щось "неправильне" (моя мета - перевірити, що цей генератор дійсно слідує за розподілом Zipf). Я маю поговорити з дизайнерами проекту в ці дні.
Мауріціо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.