Ich habe mehrere Abfragehäufigkeiten und muss den Koeffizienten des Zipf-Gesetzes schätzen. Dies sind die Spitzenfrequenzen:
26486
12053
5052
3033
2536
2391
1444
1220
1152
1039
Ich habe mehrere Abfragehäufigkeiten und muss den Koeffizienten des Zipf-Gesetzes schätzen. Dies sind die Spitzenfrequenzen:
26486
12053
5052
3033
2536
2391
1444
1220
1152
1039
Antworten:
Aktualisieren Ich habe den Code mit dem Maximum Likelihood Estimator gemäß dem @ whuber-Vorschlag aktualisiert. Das Minimieren der Differenzquadratsumme zwischen logarithmischen Wahrscheinlichkeiten und logarithmischen Häufigkeiten wäre ein statistisches Verfahren, wenn gezeigt werden könnte, dass es sich um eine Art M-Schätzer handelt. Leider fiel mir keiner ein, der die gleichen Ergebnisse liefern könnte.
Hier ist mein Versuch. Ich berechne Logarithmen der Frequenzen und versuche, sie an Logarithmen der theoretischen Wahrscheinlichkeiten anzupassen, die durch diese Formel gegeben sind . Das Endergebnis erscheint vernünftig. Hier ist mein Code in R.
Die beste quadratische Anpassung ist dann .s = 1,47
Die maximale Wahrscheinlichkeit in R kann mit der
mle
Funktion (ausstats4
Paket) ausgeführt werden, die Standardfehler hilfreich berechnet (wenn die korrekte negative maximale Wahrscheinlichkeitsfunktion angegeben wird):Hier ist das Diagramm der Anpassung in der Log-Log-Skala (erneut als @whuber vorgeschlagen):
Die rote Linie ist die Summe der Quadrate, die grüne Linie ist die maximale Wahrscheinlichkeit.
quelle
Bei jedem Schätzungsproblem liegen uns mehrere Probleme vor :
Schätzen Sie den Parameter.
Bewerten Sie die Qualität dieser Schätzung.
Erforschen Sie die Daten.
Bewerten Sie die Passform.
Für diejenigen, die statistische Methoden zum Verständnis und zur Kommunikation verwenden würden, sollte die erste Methode niemals ohne die anderen durchgeführt werden.
Somit ist die Log-Wahrscheinlichkeit für die Daten
In Anbetracht der Natur des Zipf-Gesetzes ist der richtige Weg, diese Anpassung grafisch darzustellen, ein Log-Log-Diagramm , in dem die Anpassung (per Definition) linear ist:
Um die Anpassungsgüte zu bewerten und die Daten zu untersuchen, sehen Sie sich die Residuen an (Daten / Anpassung, Log-Log-Achsen erneut):
Da die Residuen zufällig erscheinen, akzeptieren wir in einigen Anwendungen möglicherweise das Zipf-Gesetz (und unsere Schätzung des Parameters) als akzeptable, wenn auch grobe Beschreibung der Frequenzen . Diese Analyse zeigt jedoch, dass es ein Fehler wäre anzunehmen, dass diese Schätzung einen erklärenden oder vorhersagenden Wert für den hier untersuchten Datensatz hat.
quelle
Eine der probabilistischen Programmiersprachen wie PyMC3 macht diese Schätzung relativ einfach. Andere Sprachen sind Stan, der großartige Features und eine unterstützende Community hat.
Hier ist meine Python-Implementierung des auf die OP-Daten angepassten Modells (auch auf Github ):
Um eine grundlegende Stichprobendiagnose zu ermöglichen, können wir feststellen, dass sich die Stichprobe "gut vermischt" hat, da in der Kurve keine Struktur zu sehen ist:
Um den Code auszuführen, muss Python mit Theano- und PyMC3-Paketen installiert sein.
Vielen Dank an @ w-huber für seine großartige Antwort und seine Kommentare!
quelle
Hier ist mein Versuch, die Daten anzupassen, die Ergebnisse mit VGAM auszuwerten und zu untersuchen:
In unserem Fall lautet die Nullhypothese von Chi square, dass die Daten gemäß dem zipf-Gesetz verteilt werden. Daher stützen größere p-Werte die Behauptung, dass die Daten gemäß diesem Gesetz verteilt werden. Beachten Sie, dass selbst sehr große p-Werte kein Beweis sind, sondern nur ein Indikator.
quelle
Auch hier liefert die UWSE nur eine konsistente Schätzung - keine Konfidenzintervalle, und wir können einen gewissen Kompromiss bei der Genauigkeit feststellen. Die oben genannte Lösung von mpiktas ist auch eine Anwendung von UWSE - obwohl Programmierung erforderlich ist. Eine vollständige Erklärung des Schätzers finden Sie unter: https://paradsp.wordpress.com/ - ganz unten.
quelle
Meine Lösung soll zu den Antworten von mpiktas und whuber, die eine Implementierung in Python durchführen, komplementär sein. Unsere Frequenzen und Bereiche x sind:
Da unsere Funktion nicht in allen Bereichen definiert ist, müssen wir bei jeder Berechnung überprüfen, ob wir uns normalisieren. Im diskreten Fall besteht eine einfache Annäherung darin, durch die Summe aller y (x) zu dividieren. Auf diese Weise können wir verschiedene Parameter vergleichen.
Das Ergebnis ergibt eine Steigung von 1.450408 wie in den vorherigen Antworten.
quelle