Regression für ein Modell der Form


22

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:

Auf der Log-Log-Skala aufgezeichnete Daten

(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:y=einxk

lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")

Modell mit Augen

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:

Passendes Modell

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:

Zufallszahlen generierte Ergebnisse

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 .


2
Warum nicht einfach Protokolle mit beiden Werten & num_replies & erstellen und ein lineares Standardmodell an sie anpassen?
gung - Wiedereinsetzung von Monica

3
Was ist dieser enorme Anstieg in Zahlen knapp unter 10000 Antworten?
Glen_b

3
Weder Zählungen noch logarithmische Zählungen weisen eine konstante Varianz auf (bei Zählungen nimmt die Varianz mit dem Mittelwert zu, bei logarithmischen Zählungen nimmt sie im Allgemeinen mit dem Mittelwert ab). Angesichts der Tatsache, dass beide Variablen Zählungen sind und viele ziemlich klein, würde ich mich zu einer Poisson-, Quasi-Poisson- oder negativen Binomial-GLM neigen, vielleicht mit einer Log-Verknüpfung. Wenn Sie die normale Regression verwenden müssen, müssen Sie sich zumindest mit dem Varianzproblem befassen. Eine andere Alternative besteht darin, eine Anscombe- oder Freeman-Tukey-Transformation der Zählwerte durchzuführen und ein nichtlineares Modell der kleinsten Quadrate anzupassen.
Glen_b

1
Dieser interessante Anstieg ist auf eine vom Menschen erzwungene "maximale Themenlänge" in mehreren Foren zurückzuführen.
Thenickdude

2
Fudge ist köstlich :) Noch prosaischer ist der Unterschied zwischen (num_replies + 1) und (num_posts_in_topic).
Thenickdude

Antworten:


22

Ihr Beispiel ist sehr gut, weil es auf wiederkehrende Probleme mit solchen Daten hinweist.

Zwei gebräuchliche Namen sind Potenzfunktion und Potenzgesetz. In der Biologie und in einigen anderen Bereichen wird häufig von Allometrie gesprochen, insbesondere dann, wenn Sie Größenmessungen in Beziehung setzen. In der Physik und einigen anderen Bereichen wird von Skalierungsgesetzen gesprochen.

Ich würde Monomial hier nicht als guten Begriff ansehen, da ich das mit ganzzahligen Potenzen verbinde. Aus dem gleichen Grund wird dies am besten nicht als Sonderfall eines Polynoms angesehen.

Probleme bei der Anpassung eines Potenzgesetzes an das Ende einer Verteilung wandeln sich in Probleme bei der Anpassung eines Potenzgesetzes an die Beziehung zwischen zwei verschiedenen Variablen.

Der einfachste Weg, ein Potenzgesetz anzupassen, besteht darin, Logarithmen beider Variablen zu verwenden und dann eine gerade Linie mit Hilfe der Regression anzupassen. Es gibt viele Einwände dagegen, wenn beide Variablen, wie allgemein üblich, fehlerbehaftet sind. Das Beispiel hier ist ein typischer Fall, da beide Variablen (und keine) als Antwort (abhängige Variable) betrachtet werden können. Dieses Argument führt zu einer symmetrischeren Anpassungsmethode.

Hinzu kommt immer die Frage nach Annahmen zur Fehlerstruktur. Auch hier ist das Beispiel ein typisches Beispiel, da Fehler eindeutig heteroskedastisch sind. Das deutet eher auf gewichtete Least-Squares hin.

Eine ausgezeichnete Bewertung ist http://www.ncbi.nlm.nih.gov/pubmed/16573844

Ein weiteres Problem ist, dass Menschen Potenzgesetze oft nur über einen bestimmten Bereich ihrer Daten identifizieren. Die Fragen werden dann sowohl wissenschaftlich als auch statistisch und gehen bis hinunter zu der Frage, ob das Erkennen von Machtgesetzen nur Wunschdenken oder ein modischer Hobby-Zeitvertreib ist. Ein Großteil der Diskussion findet unter den Überschriften fraktales und schuppenfreies Verhalten statt, wobei die damit verbundene Diskussion von Physik bis Metaphysik reicht. In Ihrem speziellen Beispiel scheint eine kleine Krümmung offensichtlich zu sein.

Enthusiasten für Machtgesetze sind von Skeptikern nicht immer gleichgestellt, weil die Enthusiasten mehr veröffentlichen als die Skeptiker. Ich würde vorschlagen, dass ein Streudiagramm auf logarithmischen Skalen, obwohl es sich um ein natürliches und ausgezeichnetes Diagramm handelt, von Restdiagrammen begleitet wird, um Abweichungen von der Potenzfunktionsform zu überprüfen.


2
Vielen Dank, das erklärt, warum ich so etwas nicht finden konnte, wo die Leute über "polynomiale Regression" diskutierten. Ich habe meine Frage mit den Ergebnissen der Anpassung dieses Modells aktualisiert!
Thenickdude

Wenn Sie nach einem etwas strengeren Ansatz für die Anpassung von Potenzgesetzen und Signifikanztests für das angepasste Modell suchen, möchten Sie wahrscheinlich dieses Dokument : arxiv.org/abs/0706.1062 und den zugehörigen Code: tuvalu.santafe.edu/ ~ Aaronc / Powerlaws
Martin O'Leary

2
Der oben zitierte Artikel bezieht sich auf Verteilungen, die Potenzgesetze sind, nicht auf Beziehungen zwischen Variablen, die Potenzgesetze sind. Der Titel dieser Frage passt besser zu letzterer; Das Beispiel dieser Frage passt besser zu ersteren.
Nick Cox

1

Wenn Sie annehmen, dass eine Potenz ein gutes Modell ist, können Sie sie log(y) ~ log(x)als Modell verwenden und eine lineare Regression anpassen, indem Sie Folgendes verwenden lm():

Versuche dies:

# Generate some data
set.seed(42)

x <- seq(1, 10, 1)

a = 10
b = 2
scatt <- rnorm(10, sd = 0.2)


dat <- data.frame(
  x = x,
  y = a*x^(-b) + scatt
)

Passen Sie ein Modell:

# Fit a model
model <- lm(log(y) ~ log(x) + 1, data = dat) 
summary(model)

pred <- data.frame(
  x = dat$x,
  p = exp(predict(model, dat))
)

Jetzt erstelle ein Grundstück:

# Create a plot
library(ggplot2)
ggplot() +
  geom_point(data = dat, aes(x=x, y=y)) +
  geom_line(data = pred, aes(x=x, y=p), col = "red")

Bildbeschreibung hier eingeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.