J'ai un ensemble de données qui est des statistiques provenant d'un forum de discussion Web. J'examine la distribution du nombre de réponses qu'un sujet devrait avoir. En particulier, j'ai créé un ensemble de données qui contient une liste de nombres de réponses de sujets, puis le nombre de sujets qui ont ce nombre de réponses.
"num_replies","count"
0,627568
1,156371
2,151670
3,79094
4,59473
5,39895
6,30947
7,23329
8,18726
Si je trace l'ensemble de données sur un tracé log-log, j'obtiens ce qui est essentiellement une ligne droite:
(Il s'agit d'une distribution Zipfian ). Wikipedia me dit que les lignes droites sur les parcelles log-log impliquent une fonction qui peut être modélisée par un monôme de la forme . Et en fait, j'ai regardé une telle fonction:
lines(data$num_replies, 480000 * data$num_replies ^ -1.62, col="green")
Mes globes oculaires ne sont évidemment pas aussi précis que R. Alors, comment puis-je faire en sorte que R s'adapte plus précisément aux paramètres de ce modèle? J'ai essayé la régression polynomiale, mais je ne pense pas que R essaie d'ajuster l'exposant comme paramètre - quel est le nom propre du modèle que je veux?
Edit: Merci pour les réponses à tous. Comme suggéré, j'ai maintenant ajusté un modèle linéaire par rapport aux journaux des données d'entrée, en utilisant cette recette:
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")
Le résultat est le suivant, montrant le modèle en rouge:
Cela ressemble à une bonne approximation pour mes besoins.
Si j'utilise ensuite ce modèle Zipfian (alpha = 1.703164) avec un générateur de nombres aléatoires pour générer le même nombre total de sujets (1400930) que l'ensemble de données mesuré d'origine contenu (en utilisant ce code C que j'ai trouvé sur le Web ), le résultat semble comme:
Les points mesurés sont en noir, ceux générés aléatoirement selon le modèle sont en rouge.
Je pense que cela montre que la simple variance créée en générant aléatoirement ces 1400930 points est une bonne explication de la forme du graphique d'origine.
Si vous êtes intéressé à jouer vous-même avec les données brutes, je les ai publiées ici .