Tengo un conjunto de datos que son estadísticas de un foro de discusión de la web. Estoy buscando la distribución del número de respuestas que se espera que tenga un tema. En particular, he creado un conjunto de datos que tiene una lista de recuentos de respuestas de temas, y luego el recuento 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 gráfico logarítmico, obtengo lo que es básicamente una línea recta:
(Este es un Distribución zipfiana ). Wikipedia me dice que las líneas rectas en los gráficos logarítmicos implican una función que puede ser modelada por un monomio de la forma $y = ax^k$ . Y de hecho he ojeado tal función:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Mis ojos, obviamente, no son tan precisos como R. Entonces, ¿cómo puedo conseguir que R ajuste los parámetros de este modelo para mí con mayor precisión? Probé con la regresión polinómica, pero no creo que R intente ajustar el exponente como un parámetro - ¿cuál es el nombre apropiado para el modelo que quiero?
Edición: Gracias a todos por las respuestas. Como se sugirió, ahora he ajustado un modelo lineal contra los registros de los datos de entrada, utilizando 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:
Parece una buena aproximación para mis propósitos.
Si luego utilizo este modelo Zipfiano (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 originalmente (utilizando este código C que encontré en la web ), el resultado es el siguiente:
Los puntos medidos están en negro, los generados aleatoriamente según el modelo están en rojo.
Creo que esto demuestra que la simple varianza creada al generar aleatoriamente estos 1400930 puntos es una buena explicación de la forma del gráfico original.
Si estás interesado en jugar con los datos en bruto por ti mismo, tengo lo publicó aquí .