R
如何測試分佈是否遵循冪律?
我有關於有多少用戶發布多少問題的數據。例如,
[UserCount, QuestionCount] [2, 100] [9, 10] [3, 80] ... ...
這意味著 2 個用戶每個發布 100 個問題,9 個用戶每個發布 10 個問題,依此類推。那麼,如何確定
UserCount, QuestionCount
分佈是否遵循冪律?我找到了powerlaw 包。但是,我只能通過一組數字來進行評估。(這個包中提供的例子是詞頻。)那麼我該如何使用這個包呢?還是我有什麼問題?我也有每個用戶的問題計數的數據,即
[100, 100, 10, 10, 10 ... ]
。如果我將這些數據傳遞給包,我會得到什麼?
根據 Clauset 等人的說法,這是您使用
poweRlaw
包測試冪律尾部的方式:
- 構造冪律分佈對象。在這種情況下,您的數據是離散的,因此請使用類的離散版本
data <- c(100, 100, 10, 10, 10 ...) data_pl <- displ$new(data)
- 估計和指數冪律,並將它們分配給冪律對象
est <- estimate_xmin(data_pl) data_pl$xmin <- est$xmin data_pl$pars <- est$pars
最後兩行可以改寫為一行
data_pl$xmin <- est
此外,此時,您可以看到 KS 統計信息:
est$KS
- KS 統計量告訴您冪律分佈與您的數據的擬合程度,但它不會告訴您數據從冪律中提取的可能性有多大。所以你還需要一個價值。這就是你的做法:
bs <- bootstrap_p(data_pl) bs$p
這可能需要一些時間,所以去喝杯茶吧……
- 假設你得到一個值並且它大於 0.05 或無論您的顯著水平是什麼,您仍然需要排除沒有其他替代分佈比冪律更適合數據的可能性。該
poweRlaw
軟件包實現了您可以比較的其他 3 個替代方案。以對數正常為例:data_alt <- dislnorm$new(data) data_alt$xmin <- est$xmin data_alt$pars <- estimate_pars(data_alt) comp <- compare_distributions(data_pl, data_alt)
請注意,對數正態分佈的分佈設置為冪律分佈,因為
compare_distributions
函數需要s 對於兩種分佈都相同。該對comp
像有兩個有趣的字段:comp$test_statistic
表示哪個更適合,正數表示data_pl
更好,否則為負數;comp$p_two_side
表示差異有多大。
disexp
對,類重複此步驟,dispois
以將冪律與這些備選方案進行比較。