Wie prüfe ich, ob eine Distribution einem Potenzgesetz folgt?

13

Ich habe Daten darüber, wie viele Benutzer wie viele Fragen posten. Beispielsweise,

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

Dies bedeutet, dass 2 Benutzer jeweils 100 Fragen, 9 Benutzer jeweils 10 Fragen usw. stellten. Wie kann ich also feststellen, ob die UserCount, QuestionCountVerteilung einem Potenzgesetz folgt?

Ich habe das poweRlaw-Paket gefunden . Für die Auswertung kann ich jedoch nur eine Zahlengruppe übergeben. (Das in diesem Paket bereitgestellte Beispiel ist die Worthäufigkeit.) Wie verwende ich dieses Paket? Oder habe ich etwas falsch gemacht? Ich habe auch die Daten der Fragezählung jedes Benutzers, dh [100, 100, 10, 10, 10 ... ]. Was bekomme ich, wenn ich diese Daten an das Paket weitergebe?

Dienstag
quelle
1
Dieser Artikel enthält eine mathematische Beschreibung zum Testen von Potenzgesetzverteilungen sowie den R-Code. Clauset et al. "Potenzgesetzverteilungen in empirischen Daten."
Sycorax sagt Reinstate Monica
Vielen Dank. Ich kann jedoch nicht den gesamten Inhalt der Zeitung einholen. Ich möchte einige Ansätze für die Validierung. Haben Sie eine Vorstellung von der Bedeutung einer einzelnen Gruppe von Daten, die an das Paket übergeben werden? Im Beispiel ist der Datensatz die Worthäufigkeit. Danke noch einmal.
Donnerstag,
Entschuldigung, ich kenne das Paket nicht.
Sycorax sagt Reinstate Monica

Antworten:

8

So testen Sie laut Clauset et al. Das Potenzgesetz tail with poweRlawpackage:

  1. Konstruieren Sie das Potenzgesetz-Verteilungsobjekt. In diesem Fall sind Ihre Daten diskret, verwenden Sie also die diskrete Version der Klasse
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. xminα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

Die letzten beiden Zeilen können als eine Zeile umgeschrieben werden

data_pl$xmin <- est

Außerdem sehen Sie an dieser Stelle die KS-Statistik:

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

Dies kann einige Zeit dauern, also nehmen Sie sich eine Tasse Tee ...

  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)

xmincompare_distributionsxmincompcomp$test_statisticdata_plcomp$p_two_side

Wiederholen Sie diesen Schritt mit disexp, dispoisKlassen Potenzgesetz mit diesen Alternativen zu vergleichen.

Zebra Propulsion Lab
quelle
Bitte @Clivele, können Sie ein eigenständiges Beispiel für Ihre Daten angeben? Ich habe ein Problem beim Testen meiner Daten, daher würde ich mich über ein laufendes Beispiel freuen. Vielen Dank, ich fand Ihren Beitrag sehr inspirierend!
Maycca
1
Sie können den Befehl eingeben data("moby")und mobyanstelle von datain meinem Beispiel verwenden, wie in der Einführung
Zebra Propulsion Lab,