ปรับปรุง : 7 เม.ย. 2554 คำตอบนี้ใช้เวลานานและครอบคลุมปัญหาหลายด้านในมือ อย่างไรก็ตามฉันได้ต่อต้านจนถึงตอนนี้แบ่งมันออกเป็นคำตอบที่แยกจากกัน
ฉันได้เพิ่มการสนทนาเกี่ยวกับประสิทธิภาพของ Pearson's สำหรับตัวอย่างนี้χ2
บรูซเอ็มฮิลล์ประพันธ์บางทีอาจเป็นกระดาษ "น้ำเชื้อ" เกี่ยวกับการประมาณค่าในบริบทแบบ Zipf เขาเขียนบทความหลายฉบับในช่วงกลางทศวรรษ 1970 ในหัวข้อ อย่างไรก็ตาม "ตัวประมาณค่าฮิลล์" (ตามที่เรียกกันในขณะนี้) ส่วนใหญ่จะขึ้นอยู่กับสถิติการสั่งซื้อสูงสุดของตัวอย่างและดังนั้นขึ้นอยู่กับประเภทของการตัดทอนปัจจุบันที่อาจทำให้คุณมีปัญหาบางอย่าง
กระดาษหลักคือ:
BM ฮิลล์, วิธีการทั่วไปที่ง่ายในการอนุมานเกี่ยวกับหางของการจัดจำหน่าย , แอน สถิติ พ.ศ. 2518
หากข้อมูลของคุณแท้จริงแล้วเริ่มต้นจาก Zipf และถูกตัดทอนแล้วการโต้ตอบที่ดีระหว่างการกระจายระดับและพล็อต Zipfสามารถถูกควบคุมเพื่อประโยชน์ของคุณ
โดยเฉพาะการแจกแจงระดับคือการแจกแจงเชิงประจักษ์จำนวนครั้งที่เห็นการตอบสนองจำนวนเต็มแต่ละตัว
dผม= # { j : XJ= i }n.
ถ้าเราพล็อตเรื่องนี้กับบนพล็อตการบันทึกล็อกเราจะได้เทรนด์เชิงเส้นที่มีความชันที่สอดคล้องกับค่าสเกลผม
ในทางกลับกันถ้าเราพล็อตพล็อตZipfซึ่งเราจัดเรียงตัวอย่างจากมากไปหาน้อยที่สุดและจากนั้นพล็อตค่าเทียบกับอันดับของพวกเขาเราจะได้รับแนวโน้มเชิงเส้นที่แตกต่างกันกับความชันที่แตกต่างกัน อย่างไรก็ตามเนินลาดนั้นเกี่ยวข้องกัน
ถ้าเป็นค่าสัมประสิทธิ์การปรับกฎหมายสำหรับการกระจาย Zipf แล้วความลาดชันในพล็อตแรกเป็น- αและความลาดชันในพล็อตที่สองคือ- 1 / ( α - 1 ) ด้านล่างนี้เป็นพล็อตตัวอย่างสำหรับα = 2และn = 10 6 บานหน้าต่างด้านซ้ายมือคือการกระจายการศึกษาระดับปริญญาและความลาดชันของเส้นสีแดงคือ- 2 ด้านขวามือคือพล็อต Zipf โดยมีเส้นสีแดงซ้อนทับมีความชัน- 1 / ( 2 - 1 ) = -α- α- 1 / ( α - 1 )α = 2n = 106- 2 .- 1 / ( 2 - 1 ) = - 1
ττα
β^
α^= 1 - 1β^.
@csgillespie มอบบทความล่าสุดหนึ่งฉบับร่วมเขียนโดย Mark Newman ที่ Michigan เกี่ยวกับหัวข้อนี้ ดูเหมือนว่าเขาจะตีพิมพ์บทความที่คล้ายกันจำนวนมากในเรื่องนี้ ด้านล่างนี้เป็นอีกหนึ่งแหล่งที่มาพร้อมกับคู่อ้างอิงอื่น ๆ ที่อาจเป็นที่สนใจ นิวแมนบางครั้งก็ไม่ทำสิ่งที่สมเหตุสมผลที่สุดในเชิงสถิติดังนั้นควรระมัดระวัง
MEJ Newman, กฎหมายพลังงาน, การแจกแจงพาเรโตและกฎของ Zipf , ฟิสิกส์ร่วมสมัย 46, 2005, pp. 323-351
M. Mitzenmacher ประวัติโดยย่อของแบบจำลองทั่วไปสำหรับกฎกำลังไฟฟ้าและการแจกแจงล็อกนอร์มอล , คณิตศาสตร์อินเทอร์เน็ต ฉบับ 1 หมายเลข 2, 2003, pp. 226-251
เค. อัศวินการเปลี่ยนแปลงแบบง่าย ๆ ของตัวประมาณค่าฮิลล์ด้วยแอพพลิเคชั่นเพื่อความทนทานและการลดอคติปี 2010
ภาคผนวก :
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)
พล็อตที่เกิดขึ้นคือ
ฉัน≤ 30
ถึงกระนั้นจากมุมมองเชิงปฏิบัติพล็อตดังกล่าวควรจะค่อนข้างน่าสนใจ
α = 2n = 300000xm a x= 500
χ2
X2= ∑i = 1500( ตผม- Eผม)2Eผม
OผมผมEผม= n หน้าผม= nฉัน-α/ ∑500j = 1J- α
นอกจากนี้เรายังจะคำนวณสถิติที่สองที่เกิดขึ้นจากการนับจำนวนครั้งแรกในถังขยะขนาด 40 ดังที่แสดงในสเปรดชีตของ Maurizio (ถังสุดท้ายจะมีผลรวมยี่สิบค่าผลลัพธ์แยกต่างหากเท่านั้น
nพี
พี
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 )