Ich habe einen Datensatz, bei dem es sich um Statistiken aus einem Webdiskussionsforum handelt. Ich schaue auf die Verteilung der Anzahl der Antworten, die ein Thema haben soll. Insbesondere habe ich ein Dataset erstellt, das eine Liste der Themenantworten und anschließend die Anzahl der Themen mit dieser Anzahl von Antworten enthält.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Wenn ich den Datensatz in einem Log-Log-Plot zeichne, erhalte ich im Grunde genommen eine gerade Linie:
(Dies ist eine Zipfian-Distribution ). Wikipedia sagt mir, dass gerade Linien in Log-Log-Diagrammen eine Funktion implizieren, die durch ein Monom der Form modelliert werden kann . Und tatsächlich habe ich eine solche Funktion in Augenschein genommen:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Offensichtlich sind meine Augäpfel nicht so genau wie R. Wie kann ich also R dazu bringen, die Parameter dieses Modells für mich genauer anzupassen? Ich habe eine polynomielle Regression versucht, aber ich glaube nicht, dass R versucht, den Exponenten als Parameter anzupassen. Wie lautet der richtige Name für das gewünschte Modell?
Edit: Danke für die Antworten an alle. Wie vorgeschlagen, habe ich jetzt ein lineares Modell anhand der Protokolle der Eingabedaten angepasst und dabei folgendes Rezept verwendet:
data <- read.csv(file="result.txt")
# Avoid taking the log of zero:
data$num_replies = data$num_replies + 1
plot(data$num_replies, data$count, log="xy", cex=0.8)
# Fit just the first 100 points in the series:
model <- lm(log(data$count[1:100]) ~ log(data$num_replies[1:100]))
points(data$num_replies, round(exp(coef(model)[1] + coef(model)[2] * log(data$num_replies))),
col="red")
Das Ergebnis ist das folgende, wobei das Modell in Rot angezeigt wird:
Das scheint eine gute Annäherung für meine Zwecke zu sein.
Wenn ich dann dieses Zipfian-Modell (alpha = 1.703164) zusammen mit einem Zufallszahlengenerator verwende, um die gleiche Gesamtanzahl von Themen (1400930) wie der ursprüngliche gemessene Datensatz zu generieren (unter Verwendung des im Web gefundenen C-Codes ), sieht das Ergebnis so aus mögen:
Gemessene Punkte sind schwarz, zufällig erzeugte Punkte laut Modell rot.
Ich denke, dies zeigt, dass die einfache Varianz, die durch zufälliges Erzeugen dieser 1400930 Punkte erzeugt wird, eine gute Erklärung für die Form des ursprünglichen Graphen ist.
Wenn Sie daran interessiert sind, selbst mit den Rohdaten zu spielen, habe ich sie hier veröffentlicht .