Come verificare se una distribuzione segue una legge di potere?


13

Ho dei dati su quanti utenti pubblicano quante domande. Per esempio,

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

Ciò significa che 2 utenti hanno pubblicato 100 domande ciascuno, 9 utenti hanno inviato 10 domande ciascuno e così via. Quindi, come posso determinare se la UserCount, QuestionCountdistribuzione segue una legge di potere?

Ho trovato il pacchetto poweRlaw . Tuttavia, posso solo passare un gruppo di numeri per fare la valutazione. (L'esempio fornito in questo pacchetto è la frequenza delle parole.) Quindi, come posso usare questo pacchetto? O ho qualcosa di sbagliato? Ho anche i dati del conteggio delle domande di ciascun utente, vale a dire [100, 100, 10, 10, 10 ... ]. Se passo questi dati al pacchetto, cosa riceverò?


1
Questo articolo fornisce una descrizione matematica su come testare le distribuzioni della legge di potenza e il codice R. Clauset et al. "Distribuzioni della legge di potere nei dati empirici".
Sycorax dice di reintegrare Monica il

Grazie. Tuttavia, non riesco a recuperare tutto il contenuto del documento. Voglio che alcuni approcci eseguano la convalida. Hai idea di "il significato di un singolo gruppo di dati passa al pacchetto"? Nell'esempio, il set di dati è la frequenza delle parole. Grazie ancora.
Giovedì

Siamo spiacenti, non ho familiarità con quel pacchetto.
Sycorax dice di reintegrare Monica il

Risposte:


8

Secondo Clauset et al., Ecco come testare la coda della legge del potere con il poweRlawpacchetto:

  1. Costruire l'oggetto di distribuzione della legge di potenza. In questo caso, i tuoi dati sono discreti, quindi usa la versione discreta della classe
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. Stimare e l'esponente αXmionα della legge del potere e assegnarli all'oggetto della legge del potere
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

le ultime due righe possono essere riscritte come un'unica riga

data_pl$xmin <- est

Inoltre, a questo punto, puoi vedere la statistica KS:

est$KS
  1. Le statistiche di KS indicano in che misura la distribuzione della legge del potere si adatta ai tuoi dati, ma non ti dice quanto è probabile che i tuoi dati siano tratti dalla legge del potere. Quindi hai anche bisogno di un valore . Ecco come lo fai:p
bs <- bootstrap_p(data_pl)
bs$p

Questo potrebbe richiedere del tempo, quindi vai a prendere una tazza di tè ...

  1. Supponendo che tu ottenga un valore ed è maggiore di 0,05 o qualunque sia il tuo livello significativo, devi comunque escludere la possibilità che nessun'altra distribuzione alternativa si adatti ai dati meglio della legge del potere. Il pacchetto implementa altre 3 alternative che puoi confrontare. Prendi log-normale per esempio: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)

Xmioncompare_distributionsXmioncompcomp$test_statisticdata_plcomp$p_two_side

Ripetere questa operazione con disexp, dispoisle classi di confrontare legge di potenza con queste alternative.


Per favore, @Clivele, puoi includere qualche esempio autonomo dei tuoi dati? Ho un problema a testare i miei dati, quindi apprezzerei un esempio in corso ... grazie, ho trovato il tuo post molto stimolante!
Maycca,

1
È possibile digitare il comando data("moby")e utilizzare mobyinvece che datanel mio esempio, come nell'introduzione
Zebra Propulsion Lab
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.