Làm cách nào để ước tính các tham số cho phân phối rút gọn của Zipf từ một mẫu dữ liệu?


10

Tôi có một vấn đề với tham số ước tính cho Zipf. Tình hình của tôi là như sau:

Tôi có một bộ mẫu (được đo từ một thử nghiệm tạo các cuộc gọi nên tuân theo phân phối Zipf). Tôi phải chứng minh rằng trình tạo này thực sự tạo ra các cuộc gọi với phân phối zipf. Tôi đã đọc Câu hỏi này Làm thế nào để tính hệ số luật của Zipf từ một tập hợp các tần số cao nhất? nhưng tôi đạt được kết quả xấu vì tôi sử dụng phân phối bị cắt ngắn. Ví dụ: nếu tôi đặt giá trị "s" thành "0,9" cho quá trình tạo, nếu tôi cố gắng ước tính giá trị "s" như đã viết trong Hỏi & Đáp được báo cáo, tôi nhận được "s" bằng 0,2 ca. Tôi nghĩ điều này là do thực tế là tôi sử dụng phân phối TRUNCATED (tôi phải giới hạn zipf với một điểm cắt ngắn, nó bị cắt ngắn).

Làm thế nào tôi có thể ước tính các tham số với phân phối zipf bị cắt ngắn?


để rõ ràng, chính xác những gì bạn đang cắt ngắn? Việc phân phối các giá trị hoặc chính biểu đồ Zipf? Bạn có biết điểm cắt ngắn? Việc cắt xén có phải là một tạo tác của dữ liệu hay là một tạo tác của việc xử lý dữ liệu (ví dụ: một số quyết định mà bạn hoặc người thí nghiệm đưa ra)? Bất kỳ chi tiết bổ sung sẽ hữu ích.
Đức hồng y

@ thẻ. (phần 1/2) Cảm ơn hồng y. Tôi sẽ cung cấp thêm chi tiết: Tôi có một trình tạo VoIP tạo các cuộc gọi theo Zipf (và phân phối khác) cho âm lượng trên mỗi người gọi. Tôi phải xác minh rằng trình tạo này thực sự tuân theo các bản phân phối này. Đối với Phân phối Zipf tôi cần xác định điểm cắt ngắn (do đó nó được biết đến và nó đề cập đến phân phối các giá trị) là số lượng cuộc gọi được tạo tối đa của người dùng và tham số tỷ lệ. Cụ thể trong trường hợp của tôi, giá trị này bằng 500, cho biết một người dùng có thể tạo tối đa 500 cuộc gọi.
Maurizio

(phần 2/2) Tham số khác cần đặt là tham số tỷ lệ cho Zipf xác định mức độ lây lan của phân phối (giá trị này trong trường hợp của tôi là 0,9). Tôi có tất cả các tham số (kích thước của mẫu, tần suất trên mỗi người dùng, v.v.) nhưng tôi phải xác minh rằng tập dữ liệu của tôi tuân theo phân phối zipf.
Maurizio

do đó, rõ ràng bạn đang tái chuẩn hóa phân phối bằng , vì đối với tôi, cái mà tôi nghĩ là "Zipf bị cắt ngắn", tham số tỷ lệ 0,9 là không thể . Nếu bạn có thể tạo ra nhiều dữ liệu này và bạn "chỉ" có 500 kết quả có thể xảy ra, tại sao bạn không sử dụng bài kiểm tra mức độ phù hợp chi bình phương? Vì phân phối của bạn có đuôi dài, bạn có thể cần một cỡ mẫu khá lớn. Nhưng, đó sẽ là một cách. Một phương pháp nhanh và bẩn khác là kiểm tra xem bạn có phân phối theo kinh nghiệm đúng cho các giá trị nhỏ của số lượng cuộc gọi hay không. i=1500i0.9
Đức hồng y

Câu trả lời:


14

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 độâ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=10621/(21)=1

Phân phối độ (trái) và Zipf (phải) âm mưu cho một mẫu iid từ phân phối Zipf.

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β^

α^=11β^.

@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à

Biểu đồ Zipf "bị cắt cụt" (bị cắt ở i = 500)

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ó .i30

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(OiEi)2Ei
OiiEi=npi=niα/j=1500jα

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

nhập mô tả hình ảnh ở đây

Đâ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 )

+1, câu trả lời tuyệt vời như bình thường. Bạn nên tự đề cử mình làm người điều hành, vẫn còn 1 giờ nữa :)
mpiktas

@mpiktas, cảm ơn những lời khen và sự khích lệ. Tôi không chắc mình có thể biện minh cho việc đề cử bản thân với những ứng cử viên đã rất mạnh, những người có, đồng đều, tham gia rộng rãi hơn và lâu hơn tôi có.
Đức hồng y

@cardinal, đây là một số liên kết để thay thế cho công cụ ước tính của Hill: bài viết gốc của Paulauskas và các bài tiếp theo của VomsiulisGadeikis và Paulauskas . Công cụ ước tính này được cho là có tính chất tốt hơn so với Hill ban đầu.
mpiktas

@mpiktas, cảm ơn vì các liên kết. Có khá nhiều phiên bản "mới và cải tiến" của công cụ ước tính Hill. Hạn chế chính của cách tiếp cận ban đầu là nó yêu cầu lựa chọn "cắt" về nơi dừng trung bình. Tôi nghĩ rằng hầu hết điều đó đã được thực hiện bằng cách "đánh mắt", nó mở ra một tội danh chủ quan. Một trong những cuốn sách của Resnick về các bản phân phối dài đuôi thảo luận về điều này một cách chi tiết, nếu tôi nhớ lại. Tôi nghĩ đó là một trong những gần đây của anh ấy.
Đức hồng y

@cardinal, cảm ơn bạn rất nhiều, bạn rất tốt bụng và rất chi tiết! Ví dụ của bạn trong R rất hữu ích cho tôi, nhưng làm thế nào tôi có thể thực hiện kiểm tra chi bình phương chính thức trong trường hợp này? . Câu hỏi cho người điều hành: tôi có phải viết một câu hỏi khác như "cách thực hiện kiểm tra chi bình phương cho phân phối zipf bị cắt không?" hoặc tiếp tục trong Q & A này có thể cập nhật thẻ và tiêu đề?
Maurizio

5

Giấy

Clauset, A et al , Phân phối quyền lực trong dữ liệu thực nghiệm . 2009

chứa một mô tả rất hay về cách đi về các mô hình luật sức mạnh phù hợp. Các trang web liên quan có mẫu mã. Thật không may, nó không cung cấp mã cho các bản phân phối bị cắt ngắn, nhưng nó có thể cung cấp cho bạn một con trỏ.


Bên cạnh đó, bài viết thảo luận về thực tế rằng nhiều "bộ dữ liệu luật điện" có thể được mô hình hóa tốt như nhau (và trong một số trường hợp tốt hơn) với Nhật ký phân phối bình thường hoặc theo cấp số nhân!


Thật không may, bài báo này không nói gì về phân phối bị cắt .. Tôi đã tìm thấy một số gói trong R xử lý tham số ước tính Zipf theo cách đơn giản (zipfR, VGAM) nhưng phân phối bị cắt cần một "cách xử lý đặc biệt". Với câu cuối cùng của bạn, bạn có nghĩa là có thể mô hình hóa một bộ dữ liệu pháp luật với phân phối theo cấp số nhân và sau đó áp dụng một số quy trình tham số ước tính cho phân phối hàm mũ "cắt ngắn"? Tôi rất mới trong chủ đề này!
Maurizio

Trong bài báo, các tác giả phân tích lại các bộ dữ liệu khác nhau trong đó một luật sức mạnh đã được trang bị. Các tác giả chỉ ra rằng trong một số trường hợp, mô hình luật điện không phải là tuyệt vời và một phân phối thay thế sẽ tốt hơn.
csgillespie

2

Theo câu trả lời chi tiết của hồng y người dùng, tôi đã thực hiện bài kiểm tra chi bình phương trên bản phân phối zipf có thể đoán được của tôi. Kết quả kiểm tra chi bình phương được báo cáo trong bảng sau:

nhập mô tả hình ảnh ở đây

Trong đó StartIntervalEndInterval đại diện cho phạm vi cuộc gọi và Quan sát là số lượng người gọi tạo ra từ 0 đến 19 cuộc gọi, v.v. Thử nghiệm chi bình phương là tốt cho đến khi đạt được các cột cuối cùng, họ sẽ tăng số cuối cùng tính toán, nếu không cho đến thời điểm đó giá trị chi bình phương "một phần" được chấp nhận!

Với các thử nghiệm khác, kết quả là như nhau, cột cuối cùng (hoặc 2 cột cuối cùng) luôn tăng giá trị cuối cùng và tôi không biết tại sao và tôi không biết nếu (và làm thế nào) sử dụng thử nghiệm xác thực khác.

PS: để hoàn thiện, để tính toán các giá trị dự kiến ​​( Dự kiến ) tôi làm theo đề xuất của hồng y theo cách này:

nhập mô tả hình ảnh ở đây

Trong đó X_i được sử dụng để tính toán : x <- (1:n)^-S, P_i để tính toán p <- x / sum(x)và cuối cùng là E_i (Số nr người dùng dự kiến ​​cho mỗi nr cuộc gọi) được lấy bởiP_i * Total_Caller_Observed

và với Mức độ tự do = 13, lòng tốt của Chi-Square luôn từ chối các Hyphoteis mà bộ mẫu tuân theo Phân phối Zipf vì Thống kê kiểm tra (64,14 trong trường hợp này) lớn hơn so với báo cáo trong các bảng chi bình phương, "demerit" cho cột cuối cùng. Kết quả đồ họa được báo cáo ở đây: nhập mô tả hình ảnh ở đây

mặc dù điểm cắt được đặt thành 500, giá trị tối đa thu được là 294. Tôi nghĩ rằng "độ phân tán" cuối cùng là nguyên nhân của sự thất bại của phép thử chi bình phương.

CẬP NHẬT !!

Tôi cố gắng thực hiện kiểm tra chi bình phương trên một mẫu dữ liệu zipf có thể giả định được tạo bằng mã R được báo cáo trong câu trả lời ở trên.

> x <- (1:500)^(-2)
> p <- x / sum(x)
> y <- sample(length(p), size=300000, repl=TRUE, prob=p)
> tab <- table(y)
> length(tab)
[1] 438
> plot( 1:438, 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 liên quan như sau: nhập mô tả hình ảnh ở đây

Các kết quả kiểm tra chi bình phương được báo cáo trong hình sau: nhập mô tả hình ảnh ở đây

và thống kê kiểm tra chi bình phương (44,57) là quá cao để xác nhận với Mức độ Tự do đã chọn. Ngoài ra trong trường hợp này, sự "phân tán" dữ liệu cuối cùng là nguyên nhân của giá trị chi bình phương cao. Nhưng có một quy trình để xác thực phân phối zipf này (bất kể trình tạo "sai" của tôi, tôi muốn tập trung vào mẫu dữ liệu R) ???


@Maurizio, vì một số lý do, tôi đã bỏ lỡ bài đăng này cho đến bây giờ. Có cách nào bạn có thể chỉnh sửa nó và thêm một cốt truyện tương tự như cốt truyện cuối cùng trong bài viết của tôi, nhưng sử dụng dữ liệu quan sát của bạn? Điều đó có thể giúp chẩn đoán vấn đề. Tôi nghĩ rằng tôi đã thấy một câu hỏi khác của bạn khi bạn gặp khó khăn trong việc tạo ra một bản phân phối thống nhất, vì vậy có lẽ điều đó cũng được chuyển sang các phân tích này. (?) Trân trọng.
Đức Hồng Y

@cardinal, mình cập nhật kết quả! Bạn nghĩ sao? Câu hỏi về phân phối đồng phục là một điều khác mà tôi phải xác định theo cách tốt hơn và tôi sẽ thực hiện ngay hôm nay hoặc ngày mai;)
Maurizio

@Maurizio, những thứ này được tạo ngẫu nhiên? Là tham số tỷ lệ của bạn như trước? Tôi đã sử dụng cỡ mẫu là 8454 và điểm cắt là 500 và tạo ra 10000 mẫu như vậy. Trong số 10000 này, giá trị quan sát tối đa trong mẫu là 500 cho 9658 thử nghiệm, 499 cho 324 thử nghiệm, 498 cho 16 thử nghiệm và 497 cho 2 thử nghiệm. Dựa trên điều này, tôi nghĩ rằng một cái gì đó vẫn còn sai với quy trình thế hệ của bạn. Trừ khi bạn sử dụng một tham số tỷ lệ khác nhau. S=0.9
Đức Hồng Y

@Maurizio, để giải thích các kết quả tôi đã đăng, hãy xem xét rằng . Vì vậy, trong cỡ mẫu , số lượng kết quả dự kiến ​​có giá trị 500 là . Xác suất nhìn thấy ít nhất một kết quả như vậy là . Lưu ý mức độ phù hợp với mô phỏng ở trên. n = 8454 8454 4.05 10 - 43,43 1 - ( 1 - 0,000405 ) 84540,9675p=P(Xi=500)4.05×104n=845484544.051043.431(10.000405)84540.9675
Đức Hồng Y

@cardinal, tôi cũng nghĩ rằng có một cái gì đó "sai" trong quy trình tạo (mục tiêu của tôi là xác thực rằng trình tạo này thực sự tuân theo phân phối Zipf). Tôi phải nói chuyện với các nhà thiết kế của dự án trong những ngày này.
Maurizio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.