R

如何測試分佈是否遵循冪律?

  • July 22, 2014

我有關於有多少用戶發布多少問題的數據。例如,

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

這意味著 2 個用戶每個發布 100 個問題,9 個用戶每個發布 10 個問題,依此類推。那麼,如何確定UserCount, QuestionCount分佈是否遵循冪律?

我找到了powerlaw 包。但是,我只能通過一組數字來進行評估。(這個包中提供的例子是詞頻。)那麼我該如何使用這個包呢?還是我有什麼問題?我也有每個用戶的問題計數的數據,即[100, 100, 10, 10, 10 ... ]。如果我將這些數據傳遞給包,我會得到什麼?

根據 Clauset 等人的說法,這是您使用poweRlaw包測試冪律尾部的方式:

  1. 構造冪律分佈對象。在這種情況下,您的數據是離散的,因此請使用類的離散版本
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)

  1. 估計和指數冪律,並將它們分配給冪律對象
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

最後兩行可以改寫為一行

data_pl$xmin <- est

此外,此時,您可以看到 KS 統計信息:

est$KS

  1. KS 統計量告訴您冪律分佈與您的數據的擬合程度,但它不會告訴您數據從冪律中提取的可能性有多大。所以你還需要一個價值。這就是你的做法:
bs <- bootstrap_p(data_pl)
bs$p

這可能需要一些時間,所以去喝杯茶吧……

  1. 假設你得到一個值並且它大於 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以將冪律與這些備選方案進行比較。

引用自:https://stats.stackexchange.com/questions/108843

comments powered by Disqus