Оновлення : 7 квітня 2011 р. Ця відповідь стає досить довгою і охоплює різні аспекти проблеми. Однак я досі протистояв, розбиваючи це на окремі відповіді.
Я внизу додав обговорення продуктивності Пірсона для цього прикладу.χ2
Брюс М. Хілл є автором, мабуть, "насіннєвої" статті про оцінку в контексті, подібному до Зіпфа. У середині 1970-х на цю тему він написав кілька робіт. Однак "Оцінювач пагорба" (як його зараз називають) по суті покладається на статистику максимального порядку вибірки, і, в залежності від виду усікання, який може привести вас до певних проблем.
Основний документ:
BM Hill, Простий загальний підхід до висновку про хвіст розподілу , Енн. Стат. , 1975.
Якщо ваші дані справді спочатку Zipf, а потім усічені, то приємна відповідність між розподілом ступеня і графіком Zipf може бути використана на вашу користь.
Зокрема, розподіл ступенів - це просто емпіричний розподіл на кількість разів, яку бачить кожна ціла відповідь,
гi= # { j : Xj= i }н.
Якщо побудувати це проти на графіку журналу журналу, ми отримаємо лінійну тенденцію з нахилом, що відповідає коефіцієнту масштабування.i
З іншого боку, якщо ми побудуємо графік Zipf , де сортуємо вибірку від найбільшого до найменшого, а потім побудуємо значення проти їх рангів, ми отримаємо різну лінійну тенденцію з різним нахилом. Однак схили пов'язані між собою.
Якщо - коефіцієнт шкали масштабу для розподілу Зіпфа, то нахил на першому графіку дорівнює а нахил у другому графіку - . Нижче наведено приклад сюжету для та . Ліва панель - це ступінь розподілу, а нахил червоної лінії - . Права сторона - це ділянка Зіпфа, накладена червона лінія має нахил .- α - 1 / ( α - 1 ) α = 2 n = 10 6 - 2 - 1 / ( 2 - 1 ) = - 1α- α- 1 / ( α - 1 )α = 2n = 106- 2- 1 / ( 2 - 1 ) = - 1
Отже, якщо ваші дані були усічені так, що ви не бачите значень, що перевищують деякий поріг , але вони в іншому випадку розподілені Zipf і досить великі, то ви можете оцінити за розподілом ступеня . Дуже простий підхід полягає в тому, щоб прилаштувати лінію до графіку журналу журналу та використовувати відповідний коефіцієнт.τ αττα
Якщо ваші дані усічені таким чином, що ви не бачите невеликих значень (наприклад, так, як робиться велика фільтрація для великих наборів веб-даних), ви можете використовувати графік Zipf для оцінки схилу за шкалою журналу журналу, а потім " відступити "показник масштабування. Скажіть, ваша оцінка нахилу від ділянки Zipf - . Тоді, одна проста оцінка коефіцієнта масштабування -
; & alpha ; =1-1β^
α^= 1 - 1β^.
@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)
Отриманий сюжет є
З сюжету ми бачимо, що відносна похибка розподілу градусів для (або близько того) дуже хороша. Ви можете зробити офіційний тест на квадратний чи, але це не суворо говорить про те, що дані слідують за попередньо визначеним розподілом. Це говорить лише про те, що у вас немає доказів, щоб зробити висновок, що вони не мають .i ≤ 30
Але з практичної точки зору такий сюжет повинен бути відносно переконливим.
Додаток 2 : Розглянемо приклад, який Мауріціо використовує у своїх коментарях нижче. Будемо вважати, що і , з усіченим розподілом Zipf, що має максимальне значення .n = 300α = 2х м а х = 500n = 300000хм а х= 500
Ми обчислимо статистику Пірсона двома способами. Стандартний спосіб здійснюється через статистику
де - це спостережувані підрахунки значення у вибірці та .X 2 = 500 ∑ i = 1 ( O i - E i ) 2χ2 OiiEi=npi=ni-α/∑ 500 j = 1 j-α
Х2= ∑i = 1500( Оi- Еi)2Еi
OiiEi=npi=ni−α/∑500j=1j−α
Ми також обчислимо другу статистику, сформовану шляхом спочатку бінінгу рахунків у бункерах розміром 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 )