Regressione per un modello di forma ?


22

Ho un set di dati che è la statistica di un forum di discussione web. Sto esaminando la distribuzione del numero di risposte che un argomento dovrebbe avere. In particolare, ho creato un set di dati che contiene un elenco di conteggi delle risposte degli argomenti e quindi il conteggio degli argomenti con quel numero di risposte.

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

Se tracciamo il set di dati su un diagramma log-log, ottengo quella che è fondamentalmente una linea retta:

Dati tracciati su scala log-log

(Questa è una distribuzione Zipfian ). Wikipedia mi dice che le linee rette sui grafici dei log-log implicano una funzione che può essere modellata da un monomio della forma . E in effetti ho osservato una simile funzione:y=axk

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

Modello bulbo oculare

I miei bulbi oculari ovviamente non sono accurati come R. Quindi come posso fare in modo che R si adatti ai parametri di questo modello per me in modo più accurato? Ho provato la regressione polinomiale, ma non credo che R tenti di adattare l'esponente come parametro: qual è il nome corretto per il modello che desidero?

Modifica: grazie per le risposte a tutti. Come suggerito, ora ho inserito un modello lineare nei registri dei dati di input, usando questa ricetta:

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

Il risultato è questo, mostrando il modello in rosso:

Modello montato

Sembra una buona approssimazione per i miei scopi.

Se poi uso questo modello Zipfian (alpha = 1.703164) insieme a un generatore di numeri casuali per generare lo stesso numero totale di argomenti (1400930) del set di dati misurato originale contenuto (usando questo codice C che ho trovato sul web ), il risultato appare piace:

Risultati generati da numeri casuali

I punti misurati sono in nero, quelli generati casualmente in base al modello sono in rosso.

Penso che ciò dimostri che la semplice varianza creata generando casualmente questi 1400930 punti è una buona spiegazione per la forma del grafico originale.

Se sei interessato a giocare tu stesso con i dati grezzi, li ho pubblicati qui .


2
Perché non prendere semplicemente i registri di entrambi i conteggi e num_replies e adattarli a un modello lineare standard?
gung - Ripristina Monica

3
Cos'è quell'enorme picco nei conteggi appena sotto le 10000 risposte?
Glen_b

3
Né i conteggi né i conteggi dei registri hanno una varianza costante (per i conteggi, la varianza aumenterà con la media, per i conteggi dei registri generalmente diminuirà con la media). Dato che entrambe le variabili sono conteggi e molti conteggi sono piuttosto piccoli, propenderei per un GLM binomiale Poisson, quasi-Poisson o negativo, forse con un log-link. Se è necessario utilizzare la regressione ordinaria, almeno affrontare il problema della varianza. Un'altra alternativa è fare una trasformazione Anscombe o Freeman-Tukey dei conteggi e adattarsi a un modello dei minimi quadrati non lineari.
Glen_b

1
Quel picco interessante è dovuto alla "lunghezza massima dell'argomento" imposta dall'uomo in diversi forum.
thenickdude,

2
Fudge è delizioso :) Più prosaicamente, non c'è differenza tra (num_replies + 1) e (num_posts_in_topic).
thenickdude,

Risposte:


22

Il tuo esempio è molto valido perché evidenzia chiaramente i problemi ricorrenti con tali dati.

Due nomi comuni sono funzione di potere e legge di potere. In biologia e in alcuni altri campi, le persone parlano spesso di allometria, soprattutto quando si mettono in relazione misure di dimensioni. In fisica e in altri campi, le persone parlano di leggi di ridimensionamento.

Non considero il monomio un buon termine qui, poiché lo associo a poteri interi. Per lo stesso motivo, questo non è meglio considerato come un caso speciale di un polinomio.

I problemi di adattamento di una legge di potere alla coda di una distribuzione si trasformano in problemi di adattamento di una legge di potere alla relazione tra due diverse variabili.

Il modo più semplice per adattare una legge di potere è prendere i logaritmi di entrambe le variabili e quindi adattarsi a una linea retta usando la regressione. Ci sono molte obiezioni a questo ogni volta che entrambe le variabili sono soggette ad errore, come è comune. L'esempio qui è un esempio significativo in quanto entrambe le variabili (e nessuna delle due) potrebbero essere considerate come risposta (variabile dipendente). Tale argomento porta a un metodo di adattamento più simmetrico.

Inoltre, c'è sempre la questione delle ipotesi sulla struttura degli errori. Ancora una volta, l'esempio qui è un esempio in quanto gli errori sono chiaramente eteroscedastici. Ciò suggerisce qualcosa di più simile ai minimi quadrati ponderati.

Un'ottima recensione è http://www.ncbi.nlm.nih.gov/pubmed/16573844

Ancora un altro problema è che le persone spesso identificano le leggi sul potere solo su un certo intervallo di dati. Le domande diventano quindi scientifiche oltre che statistiche, arrivando fino a fondo se identificare le leggi del potere sia solo un pio desiderio o un passatempo dilettante alla moda. Gran parte della discussione si pone sotto le intestazioni del comportamento frattale e senza scale, con discussioni associate che vanno dalla fisica alla metafisica. Nel tuo esempio specifico, una piccola curvatura sembra evidente.

Gli appassionati di leggi sul potere non sono sempre eguagliati dagli scettici, perché gli appassionati pubblicano più degli scettici. Suggerirei che un diagramma a dispersione su scale logaritmiche, sebbene un diagramma naturale ed eccellente che sia essenziale, dovrebbe essere accompagnato da diagrammi residui di qualche tipo per verificare la partenza dalla forma della funzione di potere.


2
Grazie, questo spiega perché non sono riuscito a trovare nulla del genere in cui le persone discutevano di "regressione polinomiale". Ho aggiornato la mia domanda con i risultati del montaggio di quel modello!
thenickdude,

Se stai cercando un approccio leggermente più rigoroso all'adattamento delle leggi di potenza e test di significatività per il modello montato, probabilmente vorrai questo documento: arxiv.org/abs/0706.1062 e il codice di accompagnamento: tuvalu.santafe.edu/ ~ aaronc / powerlaws
Martin O'Leary

2
Il documento sopra citato riguarda le distribuzioni che sono leggi di potere, non relazioni tra variabili che sono leggi di potere. Il titolo di questa domanda si adatta meglio a quest'ultimo; l'esempio di questa domanda si adatta meglio al primo.
Nick Cox,

1

Se supponi che un potere sia un buon modello da adattare, puoi usare log(y) ~ log(x)come modello e adattare una regressione lineare usando lm():

Prova questo:

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

Adatta un modello:

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

Ora crea una trama:

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

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.