Tengo un conjunto de datos que son estadísticas de un foro de discusión web. Estoy viendo la distribución de la cantidad de respuestas que se espera que tenga un tema. En particular, he creado un conjunto de datos que tiene una lista de conteos de respuestas de temas, y luego el conteo de temas que tienen ese número de respuestas.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Si trazo el conjunto de datos en un diagrama de log-log, obtengo lo que es básicamente una línea recta:
(Esta es una distribución Zipfian ). Wikipedia me dice que las líneas rectas en las gráficas log-log implican una función que puede ser modelada por un monomio de la forma . Y, de hecho, he analizado dicha función:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Mis globos oculares obviamente no son tan precisos como R. Entonces, ¿cómo puedo hacer que R se ajuste a los parámetros de este modelo para mí con mayor precisión? Intenté la regresión polinómica, pero no creo que R intente ajustar el exponente como parámetro: ¿cuál es el nombre apropiado para el modelo que quiero?
Editar: Gracias por las respuestas a todos. Como se sugirió, ahora he ajustado un modelo lineal contra los registros de los datos de entrada, usando esta receta:
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")
El resultado es este, mostrando el modelo en rojo:
Eso parece una buena aproximación para mis propósitos.
Si luego uso este modelo Zipfian (alfa = 1.703164) junto con un generador de números aleatorios para generar el mismo número total de temas (1400930) que contenía el conjunto de datos medido original (usando este código C que encontré en la web ), el resultado se ve me gusta:
Los puntos medidos están en negro, los generados aleatoriamente según el modelo están en rojo.
Creo que esto muestra que la varianza simple creada al generar aleatoriamente estos 1400930 puntos es una buena explicación para la forma del gráfico original.
Si está interesado en jugar con los datos sin procesar usted mismo, los he publicado aquí .