Comment tester si une distribution suit une loi de puissance?


13

J'ai des données sur le nombre d'utilisateurs qui publient le nombre de questions. Par exemple,

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

Cela signifie que 2 utilisateurs ont chacun posté 100 questions, 9 utilisateurs ont chacun posté 10 questions, etc. Alors, comment puis-je déterminer si la UserCount, QuestionCountdistribution suit une loi de puissance?

J'ai trouvé le package poweRlaw . Cependant, je ne peux transmettre qu'un seul groupe de chiffres pour faire l'évaluation. (L'exemple fourni dans ce package est la fréquence des mots.) Alors, comment utiliser ce package? Ou ai-je quelque chose de mal? J'ai également les données du nombre de questions de chaque utilisateur, c'est-à-dire [100, 100, 10, 10, 10 ... ]. Si je transmets ces données au package, qu'obtiendrai-je?


1
Cet article fournit une description mathématique comment tester les distributions de loi de puissance, ainsi que le code R. Clauset et al. "Power Law Distributions in Empirical Data."
Sycorax dit Réintégrer Monica le

Merci. Cependant, je ne peux pas rattraper tout le contenu du journal. Je veux quelques approches pour faire la validation. Avez-vous une idée de «la signification d'un seul groupe de données à transmettre au package»? Dans l'exemple, l'ensemble de données correspond aux fréquences des mots. Merci encore.
jeudi

Désolé, je ne connais pas ce package.
Sycorax dit Réintégrer Monica

Réponses:


8

Selon Clauset et al., Voici comment vous testez la queue de la loi de puissance avec le poweRlawpackage:

  1. Construisez l'objet de distribution de loi de puissance. Dans ce cas, vos données sont discrètes, utilisez donc la version discrète de la classe
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. Xmjenα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

les deux dernières lignes peuvent être réécrites en une seule ligne

data_pl$xmin <- est

De plus, à ce stade, vous pouvez voir la statistique KS:

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

Cela pourrait prendre un certain temps, alors allez prendre une tasse de thé ...

  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)

Xmjencompare_distributionsXmjencompcomp$test_statisticdata_plcomp$p_two_side

Répétez cette étape avec disexp, dispoisclasses pour comparer la loi de puissance avec ces alternatives.


S'il vous plaît @Clivele, pouvez-vous inclure un exemple autonome de vos données? J'ai un problème pour tester mes données donc j'apprécierais un exemple courant ... merci, j'ai trouvé votre article très inspirant!
Maycca

1
Vous pouvez taper la commande data("moby")et utiliser à la mobyplace de datadans mon exemple, comme dans l'introduction
Zebra Propulsion Lab
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.