Como testar se uma distribuição segue uma lei de energia?

13

Eu tenho dados sobre quantos usuários publicam quantas perguntas. Por exemplo,

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

Isso significa que 2 usuários postaram 100 perguntas, 9 usuários postaram 10 perguntas e assim por diante. Então, como posso determinar se a UserCount, QuestionCountdistribuição segue uma lei de energia?

Encontrei o pacote poweRlaw . No entanto, só posso passar um grupo de números para fazer a avaliação. (O exemplo fornecido neste pacote é a frequência das palavras.) Então, como eu uso este pacote? Ou tenho algo errado? Eu também tenho os dados da contagem de perguntas de cada usuário, ou seja [100, 100, 10, 10, 10 ... ],. Se eu passar esses dados para o pacote, o que receberei?

terça-feira
fonte
1
Este artigo fornece uma descrição matemática de como testar distribuições de leis de energia, bem como o código R. Clauset et al. "Distribuições de leis de potência em dados empíricos".
Sycorax diz Reinstate Monica
Obrigado. No entanto, não consigo recuperar todo o conteúdo do artigo. Eu quero algumas abordagens para fazer a validação. Você tem alguma idéia do 'significado de um único grupo de dados transmitidos para o pacote'? No exemplo, o conjunto de dados é a frequência das palavras. Obrigado novamente.
Quinta
Desculpe, não estou familiarizado com esse pacote.
Sycorax diz Restabelecer Monica

Respostas:

8

De acordo com Clauset et al., É assim que você testa a cauda da lei de energia com o poweRlawpacote:

  1. Construa o objeto de distribuição da lei de energia. Nesse caso, seus dados são discretos, portanto, use a versão discreta da classe
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. xmEunα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

as duas últimas linhas podem ser reescritas como uma linha

data_pl$xmin <- est

Além disso, neste ponto, você pode ver a estatística KS:

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

Isso pode levar algum tempo, então vá e pegue uma xícara de chá ...

  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)

xmEuncompare_distributionsxmEuncompcomp$test_statisticdata_plcomp$p_two_side

Repita este passo com disexp, dispoisaulas para comparar lei de potência com essas alternativas.

Zebra Propulsion Lab
fonte
@Clivele, você pode incluir algum exemplo independente de seus dados? Eu tenho um problema para testar meus dados, então eu apreciaria um exemplo em execução ... obrigado, achei sua postagem muito inspiradora!
Maycca
1
Você pode digitar o comando data("moby")e usar mobyem vez de datano meu exemplo, como na introdução
Zebra Propulsion Lab