Làm thế nào để kiểm tra xem một phân phối có tuân theo luật quyền lực không?


13

Tôi có dữ liệu về số lượng người dùng đăng bao nhiêu câu hỏi. Ví dụ,

[UserCount, QuestionCount] 
[2, 100] 
[9, 10] 
[3, 80] 
... ...

Điều này có nghĩa là 2 người dùng mỗi người đăng 100 câu hỏi, 9 người dùng mỗi người đăng 10 câu hỏi, v.v. Vì vậy, làm thế nào tôi có thể xác định xem UserCount, QuestionCountphân phối có tuân theo luật quyền lực không?

Tôi tìm thấy gói poweRlaw . Tuy nhiên, tôi chỉ có thể vượt qua một nhóm số để thực hiện đánh giá. (Ví dụ được cung cấp trong gói này là tần số từ.) Vậy làm cách nào để sử dụng gói này? Hay tôi có gì sai? Tôi cũng có dữ liệu về số lượng câu hỏi của mỗi người dùng, nghĩa là , [100, 100, 10, 10, 10 ... ]. Nếu tôi chuyển dữ liệu này vào gói, tôi sẽ nhận được gì?


1
Bài viết này cung cấp một mô tả toán học làm thế nào để kiểm tra các phân phối luật công suất, cũng như mã R. Clauset et al. "Phân phối luật điện trong dữ liệu thực nghiệm."
Sycorax nói Phục hồi lại

Cảm ơn. Tuy nhiên, tôi không thể bắt kịp tất cả nội dung trong bài báo. Tôi muốn một số cách tiếp cận để xác nhận. Bạn có ý tưởng nào về "ý nghĩa của một nhóm dữ liệu truyền đến gói" không? Trong ví dụ, tập dữ liệu là tần số từ. Cảm ơn một lần nữa.
Thứ ba

Xin lỗi, tôi không quen với gói đó.
Sycorax nói Phục hồi lại

Câu trả lời:


8

Theo Clauset và cộng sự, đây là cách bạn kiểm tra đuôi luật điện với poweRlawgói:

  1. Xây dựng các đối tượng phân phối quyền lực pháp luật. Trong trường hợp này, dữ liệu của bạn là rời rạc, vì vậy hãy sử dụng phiên bản riêng của lớp
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. xmTôinα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

hai dòng cuối cùng có thể được viết lại thành một dòng

data_pl$xmin <- est

Ngoài ra, tại thời điểm này, bạn có thể thấy thống kê của KS:

est$KS
  1. p
bs <- bootstrap_p(data_pl)
bs$p

Điều này có thể mất một chút thời gian, vì vậy hãy đi và lấy một tách trà ...

  1. ppoweRlaw
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

xmTôincompare_distributionsxmTôincompcomp$test_statisticdata_plcomp$p_two_side

Lặp lại bước này với disexp, dispoiscác lớp để so sánh luật công suất với các lựa chọn thay thế đó.


Xin vui lòng @Clivele, bạn có thể bao gồm một số ví dụ độc lập về dữ liệu của bạn không? Tôi có một vấn đề để kiểm tra dữ liệu của mình vì vậy tôi sẽ đánh giá cao một ví dụ đang chạy ... cảm ơn bạn, tôi đã thấy bài viết của bạn rất truyền cảm!
maycca

1
Bạn có thể nhập lệnh data("moby")và sử dụng mobythay vì datatrong ví dụ của tôi, như trong phần giới thiệu
Zebra Propuls Lab
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.