Eu tenho um conjunto de dados que é estatísticas de um fórum de discussão na web. Eu estou olhando para a distribuição do número de respostas que um tópico deve ter. Em particular, criei um conjunto de dados com uma lista de contagens de respostas de tópicos e, em seguida, a contagem de tópicos com esse número de respostas.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Se plotar o conjunto de dados em um gráfico de log-log, obtenho o que é basicamente uma linha reta:
(Esta é uma distribuição Zipfian ). A Wikipedia me diz que linhas retas nos gráficos de log-log implicam uma função que pode ser modelada por um monômio da forma . E, de fato, observei essa função:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Meus globos oculares obviamente não são tão precisos quanto R. Então, como posso fazer com que o R ajuste os parâmetros deste modelo para mim com mais precisão? Tentei regressão polinomial, mas não acho que R tente ajustar o expoente como parâmetro - qual é o nome adequado para o modelo que eu quero?
Edit: Obrigado pelas respostas a todos. Como sugerido, agora ajustei um modelo linear nos logs dos dados de entrada, usando esta receita:
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")
O resultado é este, mostrando o modelo em vermelho:
Parece uma boa aproximação para meus propósitos.
Se eu usar esse modelo Zipfian (alpha = 1.703164) junto com um gerador de números aleatórios para gerar o mesmo número total de tópicos (1400930) que o conjunto de dados medido original contido (usando este código C que encontrei na web ), o resultado será semelhante. gostar:
Os pontos medidos estão em preto, os gerados aleatoriamente de acordo com o modelo estão em vermelho.
Acho que isso mostra que a variação simples criada pela geração aleatória desses 1400930 pontos é uma boa explicação para a forma do gráfico original.
Se você estiver interessado em jogar com os dados brutos, eu os publiquei aqui .