¿Cómo probar si una distribución sigue una ley de poder?


13

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 publicaron 100 preguntas cada uno, 9 usuarios publicaron 10 preguntas y así sucesivamente. Entonces, ¿cómo puedo determinar si la UserCount, QuestionCountdistribución sigue una ley de poder?

Encontré el paquete poweRlaw . Sin embargo, solo 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 uso este paquete? ¿O tengo algo mal? También tengo los datos de recuento pregunta de cada usuario, es decir, [100, 100, 10, 10, 10 ... ]. Si paso estos datos al paquete, ¿qué obtendré?


1
Este artículo proporciona una descripción matemática de cómo evaluar las distribuciones de la ley de potencia, así como el código R. Clauset y col. "Distribuciones de leyes de poder en datos empíricos".
Sycorax dice Reinstate Monica

Gracias. Sin embargo, no puedo ponerme al día con todo el contenido del documento. Quiero algunos enfoques para hacer la validación. ¿Tiene alguna idea de 'el significado de un solo grupo de datos que pasan al paquete'? En el ejemplo, el conjunto de datos son las frecuencias de palabras. Gracias de nuevo.
jueves

Lo siento, no estoy familiarizado con ese paquete.
Sycorax dice Reinstate Monica

Respuestas:


8

Según Clauset et al., Así es como se prueba la cola de la ley de potencia con el poweRlawpaquete:

  1. Construir el objeto de distribución de la ley de poder. En este caso, sus datos son discretos, así que use la versión discreta de la clase
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. Xmetroyonorteα
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. pag
bs <- bootstrap_p(data_pl)
bs$p

Esto podría tomar algo de tiempo, así que ve y toma una taza de té ...

  1. pagpoweRlaw
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

Xmetroyonortecompare_distributionsXmetroyonortecompcomp$test_statisticdata_plcomp$p_two_side

Repita este paso con disexp, dispoisclases de comparar la ley de potencia con esas alternativas.


Por favor, @Clivele, ¿puede incluir algún ejemplo independiente de sus datos? Tengo un problema para probar mis datos, así que agradecería un ejemplo en ejecución ... ¡Gracias, he encontrado su publicación muy inspiradora!
maycca

1
Podría escribir el comando data("moby")y usarlo en mobylugar de dataen mi ejemplo, como en la introducción
Zebra Propulsion Lab
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.