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.