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:
(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:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
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:
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:
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 .