Cập nhật : 7 tháng 4 năm 2011 Câu trả lời này đang trở nên khá dài và bao gồm nhiều khía cạnh của vấn đề. Tuy nhiên, cho đến nay, tôi đã chống lại, chia nó thành các câu trả lời riêng biệt.
Tôi đã thêm vào phần dưới cùng một cuộc thảo luận về hiệu suất của Pearson cho ví dụ này.χ2
Bruce M. Hill, tác giả, có lẽ, bài báo "tinh dịch" về ước tính trong bối cảnh giống như Zipf. Ông đã viết một số bài báo vào giữa những năm 1970 về chủ đề này. Tuy nhiên, "Công cụ ước tính Hill" (như bây giờ được gọi) về cơ bản phụ thuộc vào số liệu thống kê đơn hàng tối đa của mẫu và do đó, tùy thuộc vào loại cắt ngắn hiện tại, điều đó có thể khiến bạn gặp rắc rối.
Bài viết chính là:
BM Hill, Một cách tiếp cận chung đơn giản để suy luận về phần đuôi của một bản phân phối , Ann. Thống kê , 1975.
Nếu dữ liệu của bạn thực sự là Zipf ban đầu và sau đó bị cắt ngắn, thì một sự tương ứng tốt đẹp giữa phân phối độ và âm mưu Zipf có thể được khai thác theo lợi thế của bạn.
Cụ thể, phân phối độ chỉ đơn giản là phân phối theo kinh nghiệm về số lần mà mỗi phản hồi số nguyên được nhìn thấy,
di=#{j:Xj=i}n.
Nếu chúng ta vẽ biểu đồ này theo trên biểu đồ log-log, chúng ta sẽ có xu hướng tuyến tính với độ dốc tương ứng với hệ số tỷ lệ.i
Mặt khác, nếu chúng ta vẽ đồ thị Zipf , trong đó chúng ta sắp xếp mẫu từ lớn nhất đến nhỏ nhất và sau đó vẽ các giá trị theo thứ hạng của chúng, chúng ta sẽ có một xu hướng tuyến tính khác với độ dốc khác nhau . Tuy nhiên các sườn có liên quan.
Nếu là hệ số luật tỷ lệ cho phân phối Zipf, thì độ dốc trong ô thứ nhất là và độ dốc trong ô thứ hai là . Dưới đây là một ví dụ về biểu đồ cho và . Khung bên trái là phân bố độ và độ dốc của đường màu đỏ là . Phía bên tay phải là ô Zipf, với đường màu đỏ chồng lên nhau có độ dốc .- α - 1 / ( α - 1 ) α = 2 n = 10 6 - 2 - 1 / ( 2 - 1 ) = - 1α−α−1/(α−1)α=2n=106−2−1/(2−1)=−1
Vì vậy, nếu dữ liệu của bạn đã được cắt ngắn để bạn thấy không có giá trị lớn hơn so với một số ngưỡng , nhưng dữ liệu nếu không thì Zipf phân phối và là hợp lý lớn, sau đó bạn có thể ước từ phân phối độ . Một cách tiếp cận rất đơn giản là điều chỉnh một dòng cho biểu đồ log-log và sử dụng hệ số tương ứng.τ alphaττα
Nếu dữ liệu của bạn bị cắt ngắn để bạn không thấy các giá trị nhỏ (ví dụ: cách lọc nhiều lần cho các tập dữ liệu web lớn), thì bạn có thể sử dụng biểu đồ Zipf để ước tính độ dốc theo thang đo log-log và sau đó " trở ra "số mũ chia tỷ lệ. Giả sử ước tính độ dốc của bạn từ lô Zipf là . Sau đó, một ước tính đơn giản về hệ số tỷ lệ quy mô là
alpha =1-1β^
α^=1−1β^.
@csgillespie đã đưa ra một bài báo gần đây được đồng tác giả bởi Mark Newman tại Michigan liên quan đến chủ đề này. Ông dường như xuất bản rất nhiều bài viết tương tự về điều này. Dưới đây là một cái khác cùng với một vài tài liệu tham khảo khác có thể được quan tâm. Newman đôi khi không làm điều hợp lý nhất theo thống kê, vì vậy hãy thận trọng.
MEJ Newman, Luật sức mạnh, phân phối Pareto và luật của Zipf , Vật lý đương đại 46, 2005, tr.328-351.
M. Mitzenmacher, Lịch sử tóm tắt về các mô hình phát sinh cho Luật quyền lực và phân phối logic , toán học Internet. , tập 1, không 2, 2003, trang 226-251.
K. Knight, Một sửa đổi đơn giản của công cụ ước tính Hill với các ứng dụng để giảm độ mạnh và giảm độ lệch , 2010.
Phụ lục :
Dưới đây là một mô phỏng đơn giản trong để chứng minh những gì bạn có thể mong đợi nếu bạn lấy một mẫu có kích thước từ bản phân phối của bạn (như được mô tả trong nhận xét của bạn bên dưới câu hỏi ban đầu của bạn).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)
Cốt truyện kết quả là
Từ cốt truyện, chúng ta có thể thấy rằng lỗi tương đối của phân phối độ cho (hoặc hơn) là rất tốt. Bạn có thể thực hiện kiểm tra chi bình phương chính thức, nhưng điều này không nghiêm túc cho bạn biết rằng dữ liệu tuân theo phân phối được chỉ định trước. Nó chỉ cho bạn biết rằng bạn không có bằng chứng để kết luận rằng họ không có .i≤30
Tuy nhiên, từ quan điểm thực tế, một cốt truyện như vậy sẽ tương đối hấp dẫn.
Phụ lục 2 : Chúng ta hãy xem xét ví dụ mà Maurizio sử dụng trong các bình luận của mình dưới đây. Chúng tôi sẽ giả sử rằng và , với phân phối Zipf bị cắt ngắn có giá trị tối đa .n = 300α=2x m a x = 500n=300000xmax=500
Chúng tôi sẽ tính toán thống kê của Pearson theo hai cách. Cách tiêu chuẩn là thông qua thống kê
trong đó là số đếm quan sát của giá trị trong mẫu và .X 2 = 500 Σ i = 1 ( O i - E i ) 2χ2 OiiEi=npi=ni-α/∑ 500 j = 1 j-α
X2=∑i=1500(Oi−Ei)2Ei
OiiEi=npi=ni−α/∑500j=1j−α
Chúng tôi cũng sẽ tính toán một thống kê thứ hai được hình thành bằng cách xếp thứ nhất số đếm vào các thùng có kích thước 40, như được hiển thị trong bảng tính của Maurizio (thùng cuối cùng chỉ chứa tổng hai mươi giá trị kết quả riêng biệt.
Chúng ta hãy rút 5000 mẫu riêng biệt có kích thước từ phân phối này và tính giá trị bằng hai thống kê khác nhau này.pnp
Biểu đồ của các giá trị bên dưới và được xem là khá đồng đều. Tỷ lệ lỗi Loại I theo kinh nghiệm lần lượt là 0,0716 (phương pháp tiêu chuẩn, không được cung cấp) và 0,0502 (phương pháp binned) và không khác biệt đáng kể về mặt thống kê so với giá trị 0,05 mục tiêu cho cỡ mẫu 5000 mà chúng tôi đã chọn.p
Đây là mã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 )