Pembaruan : 7 Apr 2011 Jawaban ini semakin panjang dan mencakup banyak aspek masalah yang dihadapi. Namun, saya telah menolak, sejauh ini, memecahnya menjadi jawaban yang terpisah.
Saya telah menambahkan di bagian paling bawah diskusi tentang kinerja Pearson's untuk contoh ini.χ2
Bruce M. Hill menulis, mungkin, makalah "seminal" tentang estimasi dalam konteks seperti Zipf. Dia menulis beberapa makalah pada pertengahan 1970 tentang topik itu. Namun, "penaksir Hill" (seperti yang sekarang disebut) pada dasarnya bergantung pada statistik urutan maksimal sampel dan, tergantung pada jenis pemotongan yang ada, yang dapat membuat Anda dalam beberapa masalah.
Makalah utama adalah:
BM Hill, Sebuah pendekatan umum sederhana untuk menarik kesimpulan tentang ekor suatu distribusi , Ann. Stat. , 1975.
Jika data Anda benar-benar awalnya Zipf dan kemudian dipotong, maka korespondensi yang bagus antara distribusi derajat dan plot Zipf dapat dimanfaatkan untuk keuntungan Anda.
Secara khusus, distribusi derajat hanyalah distribusi empiris dari berapa kali setiap respons bilangan terlihat,
dsaya= # { j : Xj= i }n.
Jika kita plot ini terhadap pada plot log-log, kita akan mendapatkan tren linier dengan kemiringan yang sesuai dengan koefisien penskalaan.saya
Di sisi lain, jika kita memplot plot Zipf , di mana kita mengurutkan sampel dari yang terbesar ke yang terkecil dan kemudian memplot nilai-nilai terhadap peringkat mereka, kita mendapatkan tren linier yang berbeda dengan kemiringan yang berbeda . Namun lereng terkait.
Jika adalah koefisien hukum skala untuk distribusi Zipf, maka kemiringan dalam plot pertama adalah dan kemiringan dalam plot kedua adalah . Di bawah ini adalah contoh plot untuk dan . Panel kiri adalah distribusi derajat dan kemiringan garis merah adalah . Sisi kanan adalah plot Zipf, dengan garis merah yang ditumpangkan memiliki kemiringan .- α - 1 / ( α - 1 ) α = 2 n = 10 6 - 2 - 1 / ( 2 - 1 ) = - 1α- α- 1 / ( α - 1 )α = 2n = 106- 2- 1 / ( 2 - 1 ) = - 1
Jadi, jika data Anda telah terpotong sehingga Anda tidak melihat nilai yang lebih besar dari beberapa ambang , tetapi data tersebut didistribusikan secara Zipf dan cukup besar, maka Anda dapat memperkirakan dari distribusi derajat . Pendekatan yang sangat sederhana adalah mencocokkan baris ke plot log-log dan menggunakan koefisien yang sesuai.τ αττα
Jika data Anda terpotong sehingga Anda tidak melihat nilai - nilai kecil (misalnya, cara banyak penyaringan dilakukan untuk set data web yang besar), maka Anda dapat menggunakan plot Zipf untuk memperkirakan kemiringan pada skala log-log dan kemudian " mundur "eksponen penskalaan. Katakanlah perkiraan kemiringan Anda dari plot Zipf adalah . Kemudian, satu perkiraan sederhana dari koefisien scaling-law adalah
a =1-1β^
α^= 1 - 1β^.
@csgillespie memberikan satu makalah baru yang ditulis bersama oleh Mark Newman di Michigan mengenai topik ini. Dia sepertinya menerbitkan banyak artikel serupa tentang ini. Di bawah ini adalah satu lagi bersama dengan beberapa referensi lain yang mungkin menarik. Newman terkadang tidak melakukan hal yang paling masuk akal secara statistik, jadi berhati-hatilah.
MEJ Newman, hukum Power, distribusi Pareto dan hukum Zipf , Fisika Kontemporer 46, 2005, hlm. 323-351.
M. Mitzenmacher, Sejarah Singkat Model Generatif untuk Hukum Daya dan Distribusi Lognormal , Matematika Internet. , vol. 1, tidak. 2, 2003, hlm. 226-251.
K. Knight, Sebuah modifikasi sederhana dari estimator Hill dengan aplikasi untuk ketahanan dan pengurangan bias , 2010.
Adendum :
R105
> 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)
Plot yang dihasilkan adalah
saya ≤ 30
Namun, dari sudut pandang praktis, plot semacam itu harus relatif menarik.
α = 2n = 300000xm a x= 500
χ2
X2= ∑i = 1500( Osaya- Esaya)2Esaya
HAIsayasayaEsaya= n halsaya= n i- α/ ∑500j = 1j- α
Kami juga akan menghitung statistik kedua yang dibentuk dengan terlebih dahulu menampar hitungan dalam nampan berukuran 40, seperti yang ditunjukkan dalam lembar kerja Maurizio (nampan terakhir hanya berisi jumlah dari dua puluh nilai hasil terpisah.
nhal
hal
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 )