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 .
la source
Réponses:
Votre exemple est très bon car il indique clairement des problèmes récurrents avec de telles données.
Deux noms communs sont la fonction de puissance et la loi de puissance. En biologie et dans certains autres domaines, les gens parlent souvent d'allométrie, surtout lorsque vous reliez des mesures de taille. En physique et dans d'autres domaines, les gens parlent de lois d'échelle.
Je ne considérerais pas monôme comme un bon terme ici, car j'associe cela à des puissances entières. Pour la même raison, il n'est pas préférable de le considérer comme un cas particulier d'un polynôme.
Les problèmes d'adaptation d'une loi de puissance à la queue d'une distribution se transforment en problèmes d'adaptation d'une loi de puissance à la relation entre deux variables différentes.
La façon la plus simple d'adapter une loi de puissance est de prendre les logarithmes des deux variables, puis d'ajuster une droite en utilisant la régression. Il y a de nombreuses objections à cela chaque fois que les deux variables sont sujettes à erreur, comme cela est courant. L'exemple ici est un cas d'espèce car les deux variables (et aucune) peuvent être considérées comme réponse (variable dépendante). Cet argument conduit à une méthode d'ajustement plus symétrique.
De plus, il y a toujours la question des hypothèses sur la structure des erreurs. Encore une fois, l'exemple ici est un cas d'espèce, car les erreurs sont clairement hétéroscédastiques. Cela suggère quelque chose de plus comme les moindres carrés pondérés.
Un excellent examen est http://www.ncbi.nlm.nih.gov/pubmed/16573844
Encore un autre problème est que les gens n'identifient souvent les lois de puissance que sur une certaine plage de leurs données. Les questions deviennent alors scientifiques aussi bien que statistiques, allant jusqu'à déterminer si l'identification des lois du pouvoir n'est qu'un vœu pieux ou un passe-temps amateur à la mode. Une grande partie de la discussion se déroule sous les titres de comportement fractal et sans échelle, avec une discussion associée allant de la physique à la métaphysique. Dans votre exemple spécifique, une petite courbure semble évidente.
Les amateurs de lois sur le pouvoir ne sont pas toujours égalés par les sceptiques, car les passionnés publient plus que les sceptiques. Je suggérerais qu'un diagramme de dispersion sur des échelles logarithmiques, bien qu'un tracé naturel et excellent qui est essentiel, devrait être accompagné de diagrammes résiduels d'une sorte pour vérifier les écarts par rapport à la forme de la fonction de puissance.
la source
Si vous supposez qu'une puissance est un bon modèle pour s'adapter, vous pouvez l'utiliser
log(y) ~ log(x)
comme modèle et ajuster une régression linéaire en utilisantlm()
:Essaye ça:
Adapter un modèle:
Créez maintenant un tracé:
la source