Regresja dla modelu formy

22

Mam zestaw danych, który jest statystykami z internetowego forum dyskusyjnego. Patrzę na rozkład liczby odpowiedzi, których oczekuje się od tematu. W szczególności utworzyłem zestaw danych, który zawiera listę odpowiedzi na temat, a następnie liczbę tematów, które mają taką liczbę odpowiedzi.

"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726

Jeśli wykreślę zestaw danych na wykresie dziennika, otrzymam to, co w zasadzie jest linią prostą:

Dane wykreślane w skali log-log

(To jest dystrybucja Zipfian ). Wikipedia mówi mi, że proste linie na wykresach log-log implikują funkcję, którą można modelować za pomocą monomialu postaci . I faktycznie obserwowałem taką funkcję:y=zaxk

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

Model z oczkami

Moje oczy oczywiście nie są tak dokładne jak R. Więc jak mogę sprawić, by R dopasował dla mnie parametry tego modelu bardziej dokładnie? Próbowałem regresji wielomianowej, ale nie sądzę, że R próbuje dopasować wykładnik jako parametr - jaka jest właściwa nazwa dla modelu, który chcę?

Edycja: Dziękujemy za odpowiedzi wszystkim. Jak zasugerowałem, dopasowałem teraz model liniowy do dzienników danych wejściowych, używając tego przepisu:

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")

Wynik jest taki, pokazując model na czerwono:

Dopasowany model

To wydaje się być dobrym przybliżeniem dla moich celów.

Jeśli następnie użyję tego modelu Zipfian (alfa = 1,703164) wraz z generatorem liczb losowych do wygenerowania tej samej łącznej liczby tematów (1400930), co zawierał oryginalny zmierzony zestaw danych (używając tego kodu C, który znalazłem w Internecie ), wynik wygląda lubić:

Wyniki generowane losowo

Mierzone punkty są w kolorze czarnym, losowo generowane zgodnie z modelem są w kolorze czerwonym.

Myślę, że to pokazuje, że prosta wariancja utworzona przez losowe wygenerowanie tych 1400930 punktów jest dobrym wyjaśnieniem kształtu oryginalnego wykresu.

Jeśli jesteś zainteresowany samodzielną grą z surowymi danymi, opublikowałem je tutaj .

thenickdude
źródło
2
Dlaczego nie wziąć po prostu dzienników zliczeń i liczb i dopasować do nich standardowy model liniowy?
gung - Przywróć Monikę
3
Co to za ogromny skok w liczbie poniżej 10000 odpowiedzi?
Glen_b
3
Ani zliczenia, ani zliczenia logarytmiczne nie mają stałej wariancji (dla zliczeń wariancja wzrośnie ze średnią, dla zliczeń logarytmicznych ogólnie zmniejszy się ze średnią). Biorąc pod uwagę, że obie zmienne są zliczeniami, a wiele z nich jest dość małych, skłaniam się w kierunku Poissona, quasi-Poissona lub ujemnego dwumianowego GLM, być może z łączem logarytmicznym. Jeśli musisz użyć zwykłej regresji, przynajmniej poradzić sobie z problemem wariancji. Inną alternatywą jest wykonanie analizy Anscombe lub Freemana-Tukeya zliczeń i dopasowanie nieliniowego modelu najmniejszych kwadratów.
Glen_b
1
Ten interesujący skok wynika z wymuszonej przez człowieka „maksymalnej długości tematu” na kilku forach.
thenickdude
2
Krówka jest pyszna :) Prozaicznie, nie ma różnicy między (num_replies + 1) a (num_posts_in_topic).
thenickdude

Odpowiedzi:

22

Twój przykład jest bardzo dobry, ponieważ wyraźnie wskazuje na powtarzające się problemy z takimi danymi.

Dwie popularne nazwy to funkcja władzy i prawo mocy. W biologii i niektórych innych dziedzinach ludzie często mówią o allometrii, szczególnie gdy odnoszą się do pomiarów wielkości. W fizyce i niektórych innych dziedzinach ludzie mówią o prawach skalowania.

Nie uważałbym jednomianu za dobry termin, ponieważ kojarzę to z mocami całkowitymi. Z tego samego powodu nie jest to najlepiej traktowane jako szczególny przypadek wielomianu.

Problemy dopasowania prawa mocy do ogona rozkładu przekształcają się w problemy dopasowania prawa mocy do relacji między dwiema różnymi zmiennymi.

Najłatwiejszym sposobem dopasowania prawa potęgi jest pobranie logarytmów obu zmiennych, a następnie dopasowanie linii prostej za pomocą regresji. Jest wiele zastrzeżeń do tego, ilekroć obie zmienne są obarczone błędem, co jest powszechne. Przykładem tutaj jest przypadek, gdy obie zmienne (i żadna) mogą być uważane za odpowiedź (zmienna zależna). Argument ten prowadzi do bardziej symetrycznej metody dopasowania.

Ponadto zawsze pojawia się pytanie o założenia dotyczące struktury błędów. Ponownie, przykład tutaj jest przykładem, ponieważ błędy są wyraźnie heteroscedastyczne. To sugeruje coś więcej jak ważone najmniejsze kwadraty.

Doskonałą recenzją jest http://www.ncbi.nlm.nih.gov/pubmed/16573844

Jeszcze innym problemem jest to, że ludzie często identyfikują prawa energetyczne tylko w pewnym zakresie swoich danych. Pytania stają się następnie zarówno naukowe, jak i statystyczne, poczynając od tego, czy identyfikowanie praw władzy jest tylko pobożnym życzeniem czy modną rozrywką amatorską. Znaczna część dyskusji powstaje pod hasłem zachowania fraktalnego i pozbawionego skali, z towarzyszącą dyskusją, od fizyki po metafizykę. W twoim konkretnym przykładzie widoczna jest niewielka krzywizna.

Entuzjastom praw władzy nie zawsze towarzyszą sceptycy, ponieważ entuzjaści publikują więcej niż sceptycy. Sugerowałbym, że wykresowi punktowemu na skalach logarytmicznych, chociaż naturalny i doskonały wykres, który jest niezbędny, powinny towarzyszyć jakieś wykresy resztkowe w celu sprawdzenia odstępstw od postaci funkcji mocy.

Nick Cox
źródło
2
Dzięki, to wyjaśnia, dlaczego nie byłem w stanie znaleźć czegoś takiego, w którym ludzie dyskutowali o „regresji wielomianowej”. Zaktualizowałem moje pytanie o wyniki dopasowania tego modelu!
thenickdude
Jeśli szukasz nieco bardziej rygorystycznego podejścia do dopasowywania praw mocy i testów istotności dla dopasowanego modelu, prawdopodobnie potrzebujesz tego artykułu: arxiv.org/abs/0706.1062 i towarzyszącego mu kodu: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary
2
Artykuł cytowany powyżej dotyczy rozkładów, które są prawami mocy, a nie relacji między zmiennymi, które są prawami mocy. Tytuł tego pytania lepiej pasuje do tego drugiego; przykład tego pytania lepiej pasuje do pierwszego.
Nick Cox
1

Jeśli przyjmiesz, że moc jest dobrym modelem do dopasowania, możesz użyć jej log(y) ~ log(x)jako modelu i dopasować regresję liniową, używając lm():

Spróbuj tego:

# 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
)

Dopasuj model:

# 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))
)

Teraz stwórz wykres:

# 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")

wprowadź opis zdjęcia tutaj

Andrie
źródło