अद्यतन : covers अप्रैल २०११ यह उत्तर काफी लंबा हो रहा है और हाथ में समस्या के कई पहलुओं को शामिल करता है। हालाँकि, मैंने अब तक अलग-अलग उत्तरों में इसे तोड़ते हुए विरोध किया है।
मैं पियर्सन की के प्रदर्शन के सबसे निचले भाग में एक चर्चा में शामिल कर लिया है इस उदाहरण के लिए।χ2
ब्रूस एम। हिल ने लिखा, शायद, जिपफ जैसे संदर्भ में अनुमान पर "सेमिनल" पेपर। उन्होंने विषय पर 1970 के मध्य में कई पत्र लिखे। हालांकि, "हिल अनुमानक" (जैसा कि अब कहा जाता है) अनिवार्य रूप से नमूना के अधिकतम क्रम के आंकड़ों पर निर्भर करता है और इसलिए, वर्तमान में छंटनी के प्रकार पर निर्भर करता है, जो आपको कुछ परेशानी में डाल सकता है।
मुख्य कागज है:
बीएम हिल, एक वितरण की पूंछ के बारे में एक साधारण सामान्य दृष्टिकोण , एन। स्टेट। , 1975।
यदि आपका डेटा सही मायने में शुरू में ज़िपफ है और फिर ट्रंक किया गया है, तो डिग्री वितरण और ज़िपफ प्लॉट के बीच एक अच्छा पत्राचार आपके लाभ के लिए दोहन किया जा सकता है।
विशेष रूप से, डिग्री वितरण केवल प्रत्येक पूर्णांक प्रतिक्रिया को देखे जाने की संख्या का अनुभवजन्य वितरण है,
di=#{j:Xj= i }n।
अगर हम के खिलाफ इस साजिश एक लॉग-लॉग भूखंड पर, हम एक ढलान स्केलिंग गुणांक के लिए इसी के साथ एक रैखिक रुझान मिल जाएगा।मैं
दूसरी ओर, अगर हम जिपफ प्लॉट की साजिश करते हैं , जहां हम नमूने को सबसे बड़े से सबसे छोटे तक छांटते हैं और फिर उनके रैंकों के खिलाफ मूल्यों की साजिश करते हैं, तो हमें एक अलग ढलान के साथ एक अलग रैखिक प्रवृत्ति मिलती है । हालांकि ढलान संबंधित हैं।
यदि जिपफ वितरण के लिए स्केलिंग-कानून गुणांक है, तो पहले भूखंड में ढलान है - α और दूसरे भूखंड में ढलान है - 1 / ( α - 1 ) । नीचे α = 2 और n = 10 6 के लिए एक उदाहरण प्लॉट है । बाएं हाथ का फलक डिग्री वितरण है और लाल रेखा का ढलान है - 2 । दाएँ हाथ की ओर, Zipf साजिश है की एक ढलान होने आरोपित लाल रेखा के साथ - 1 / ( 2 - 1 ) = -α- α- 1 / ( α - 1 )α = 2n = 106- २ ।- 1 / ( 2 - 1 ) = - 1
इसलिए, यदि आपका डेटा तो छोटा कर दिया गया है कि आप कोई मान कुछ सीमा से बड़ा देखने , लेकिन डेटा अन्यथा Zipf-वितरित कर रहे हैं और τ यथोचित बड़ी है, तो आप अनुमान लगा सकते हैं α से डिग्री वितरण । लॉग-लॉग प्लॉट के लिए एक लाइन को फिट करने और संबंधित गुणांक का उपयोग करने के लिए एक बहुत ही सरल दृष्टिकोण है।ττα
यदि आपके डेटा को छोटा कर दिया जाता है ताकि आपको छोटे मान दिखाई न दें (जैसे, बड़े वेब डेटा सेटों के लिए बहुत अधिक फ़िल्टरिंग किया जाता है), तो आप लॉग-लॉग स्केल पर ढलान का अनुमान लगाने के लिए Zipf प्लॉट का उपयोग कर सकते हैं और फिर " वापस बाहर स्केलिंग घातांक। कहो Zipf साजिश से ढलान के अपने अनुमान है β । फिर, स्केलिंग जी गुणांक में से एक सरल अनुमान है
α = 1 - 1β^
α^= 1 - 1β^।
@csgillespie ने इस विषय के बारे में एक हालिया पेपर मार्क न्यूमैन द्वारा मिशिगन में सह-लेखक को दिया। वह इस पर बहुत सारे समान लेख प्रकाशित करता है। नीचे कुछ अन्य संदर्भों के साथ एक और है जो ब्याज की हो सकती है। न्यूमैन कभी-कभी सांख्यिकीय रूप से सबसे समझदार काम नहीं करता है, इसलिए सतर्क रहें।
एमईजे न्यूमैन, पावर कानून, पेरेटो डिस्ट्रीब्यूशन और जिपफ का कानून , समकालीन भौतिकी 46, 2005, पीपी। 323-351।
एम। मिटज़ेनमाकर, पावर लॉ और लॉगनॉर्मल डिस्ट्रीब्यूशन , इंटरनेट मैथ के लिए जनरेटिव मॉडल्स का संक्षिप्त इतिहास । , वॉल्यूम। 1, नहीं। 2, 2003, पीपी। 226-251।
के। नाइट, मजबूती और पूर्वाग्रह में कमी , 2010 के अनुप्रयोगों के साथ पहाड़ी अनुमानक का एक सरल संशोधन ।
परिशिष्ट :
आर105
> 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
फिर भी, एक व्यावहारिक दृष्टिकोण से, इस तरह के एक भूखंड को अपेक्षाकृत सम्मोहक होना चाहिए।
α = 2n = 300000एक्समी ए एक्स= 500 रु
χ2
एक्स2= ∑मैं = १500( ओ)मैं- ईमैं)2इमैं
हेमैंमैंइमैं= एन पीमैं= n i- α/ ∑500ज = १जे- α
हम साइज़ 40 के डब्बे में सबसे पहले काउंट्स को गिनकर बनाए गए दूसरे स्टेटिस्टिक की गणना करेंगे, जैसा कि मॉरीज़ियो की स्प्रेडशीट में दिखाया गया है (अंतिम बिन में केवल बीस अलग-अलग परिणाम मानों का योग होता है।
nपी
पी
आर
# 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 )