18 votos

¿Cómo comprobar si una distribución sigue una ley de potencias?

Tengo datos sobre cuántos usuarios publican cuántas preguntas. Por ejemplo,

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

Esto significa que 2 usuarios enviaron 100 preguntas cada uno, 9 usuarios enviaron 10 preguntas cada uno, y así sucesivamente. Entonces, ¿cómo puedo determinar si el UserCount, QuestionCount sigue una ley de potencia?

Encontré el paquete energético . Sin embargo, sólo puedo pasar un grupo de números para hacer la evaluación. (El ejemplo proporcionado en este paquete es la frecuencia de palabras.) Entonces, ¿cómo puedo utilizar este paquete? ¿O tengo algún error? También tengo los datos del recuento de preguntas de cada usuario, es decir, [100, 100, 10, 10, 10 ... ] . Si paso estos datos al paquete, ¿qué obtendré?

12voto

darthrum Puntos 31

Según Clauset et al., así es como se comprueba la cola de la ley de potencia con poweRlaw paquete:

  1. Construir el objeto de distribución de la ley de potencia. En este caso, sus datos son discretos, así que utilice la versión discreta de la clase
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. Calcule el $x_{min}$ y el exponente $\alpha$ de la ley de potencias, y asignarlos al objeto ley de potencias
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

las dos últimas líneas pueden reescribirse como una sola línea

data_pl$xmin <- est

Además, en este punto, puede ver la estadística KS:

est$KS
  1. El estadístico KS indica hasta qué punto la distribución de ley de potencias se ajusta a los datos, pero no indica la probabilidad de que los datos procedan de una ley de potencias. Así que también necesita un $p$ valor. Así se hace:
bs <- bootstrap_p(data_pl)
bs$p

Esto podría llevar algún tiempo, así que vete a tomar una taza de té...

  1. Suponiendo que obtenga un $p$ y es mayor que 0,05 o cualquiera que sea su nivel de significación, aún debe excluir la posibilidad de que ninguna otra distribución alternativa se ajuste a los datos mejor que la ley de potencias. En poweRlaw implementa otras 3 alternativas con las que puedes comparar. Por ejemplo, log-normal:
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

Tenga en cuenta que el $x_{min}$ de la distribución log-normal se ajusta a la de la ley de potencia, porque compare_distributions requieren la función $x_{min}$ s sea la misma para ambas distribuciones. La dirección comp tiene dos campos interesantes: comp$test_statistic indica cuál se ajusta mejor, con número positivo significa data_pl es mejor, y negativo en caso contrario; comp$p_two_side es decir, cuán significativa es la diferencia.

Repita este paso con disexp , dispois clases para comparar la ley de la potencia con esas alternativas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X