J'ai besoin d'analyser certaines données sur les sessions Internet pour une ligne DSL. Je voulais jeter un coup d'œil à la manière dont les durées de session sont distribuées. Je pensais qu'un moyen simple de faire cela serait de commencer par faire une parcelle de la densité de probabilité de la durée de toutes les sessions.
J'ai chargé les données dans R et utilisées la fonction Je suis nouveau à r et ce type d'analyse. C'était ce que j'ai trouvé à travers Google. J'ai eu un complot mais j'ai été laissé avec quelques questions. Est-ce la bonne fonction de faire ce que j'essaie de faire ou existe-t-il quelque chose d'autre? P> Dans l'intrigue, j'ai trouvé que l'échelle de l'axe des Y ... 1.5. Je ne comprends pas comment ça peut être 1,5, ne devrait-il pas être de 0 ... 1? P> En outre, j'aimerais avoir une courbe plus douce. Étant donné que le jeu de données est vraiment grandes les lignes sont vraiment déchiquetées. Il serait plus agréable de les avoir lissé lorsque je présente cela. Comment allais-je faire ça? P> p> densité () code>. Donc, c'était quelque chose comme ça p>
3 Réponses :
Vous devez jouer avec le paramètre Bandwith ( Quant à l'appel que vous utilisez, oui, c'est correct, Maintenant, est une courbe de densité la meilleure chose à utiliser dans votre cas? Peut-être, peut-être pas ... cela dépend vraiment du type d'analyse que vous souhaitez faire. Probablement en utilisant BW CODE>) pour modifier la finesse de la courbe. Généralement, R fait un bon travail et donne automatiquement une courbe agréable et lisse, mais peut-être que ce n'est pas le cas pour votre jeu de données spécifique. P>
type = "l" code> n'est pas nécessaire, c'est la valeur par défaut utilisée pour tracer des objets de densité. La zone sous la courbe (c'est-à-dire l'intégrale de -inf à + INF de votre fonction de densité) sera = 1. P>
hist code> sera suffisant et peut-être de plus en plus informatif, car vous pouvez sélectionner des bacs de durée spécifiques (voir
? Hist code> pour plus d'informations). P>
Merci d'avoir un look, mais je ne comprends toujours pas pourquoi l'axe de densité serait supérieur à 1.
Comme je l'ai dit, c'est la zone sous la courbe (qui est la somme (DX * Y)) qui est = 1. La valeur réelle de l'axe Y varie en fonction de la bande passante. Les valeurs de bande passante plus petite généreront des valeurs Y plus élevées. Essayez de tracer la densité (RNorm (1000), 0,2) code> et
densité (RNorm (1000), 2) code> pour voir la différence.
L'HIST a l'air rakewed relatif à la densité. Est-ce à cause de l'hypothèse d'un noyau normal avec une variable de poisson distinguée?
@DAVID: Je ne suis pas sûr de savoir comment r signifie que R calcule les estimations de la densité. Cela pourrait aussi être un problème de la binning de l'histogramme, je suppose, mais je laisse la réponse à une personne plus compétente que moi.
Comme Nico dit, vous devez consulter hist code>, mais vous pouvez également combiner les deux. Ensuite, vous pouvez appeler la densité avec
lignes code> à la place.
Exemple:
> density(duration)
Call:
density.default(x = duration)
Data: duration (500 obs.); Bandwidth 'bw' = 0.7752
x y
Min. : 0.6745 Min. :1.160e-05
1st Qu.: 7.0872 1st Qu.:1.038e-03
Median :13.5000 Median :1.932e-02
Mean :13.5000 Mean :3.895e-02
3rd Qu.:19.9128 3rd Qu.:7.521e-02
Max. :26.3255 Max. :1.164e-01
J'allais ajouter cela comme un commentaire à la réponse précédente, mais c'est trop grand. La fausseté apparente est due à la manière dont les valeurs sont cassées dans un histogramme. C'est souvent une erreur d'utiliser des histogrammes pour des données discrètes. Voir ci-dessous ...
set.seed(1001) tmpf <- function() { duration <- rpois(500, 10) # For duration data I assume Poisson distributed hist(duration, probability = TRUE, # In stead of frequency breaks = "FD", # For more breaks than the default col = "darkslategray4", border = "seashell3", main="",ann=FALSE,axes=FALSE,xlim=c(0,25),ylim=c(0,0.15)) box() lines(density(duration), # Add the kernel density estimate col = "firebrick2", lwd = 3) par(new=TRUE) plot(table(factor(duration,levels=0:25))/length(duration), xlim=c(0,25),ylim=c(0,0.15),col=4,ann=FALSE,axes=FALSE) } par(mfrow=c(3,3),mar=rep(0,4)) replicate(9,tmpf())
Oui, c'est vrai, les bacs seront toujours de part et d'autre de l'entier (droit = vrai contre droit = faux). J'utilise surtout cela pour la visualisation préalable des données, peu de préjudice. Mais cela pourrait facilement être corrigé avec un simple -0,5 à la densité ...
@eyjo: Cela suppose que vous utilisez des pauses entière, mais que vous n'êtes pas limité à ce que
Vous avez mal interprété la densité. La densité de x peut être considérée comme une valeur proportionnelle à b> la chance de dessiner de la population un nombre couché à proximité de X. Maintenant, par définition, l'intégration de la fonction de densité est égale à 1. Cela ne signifie pas que la valeur maximale de la fonction de densité doit être 1, elle peut facilement être plus grande. En fait, pour une distribution F avec DF = (1,1), la valeur maximale de la densité (à 0) est même à l'infini.
@Joris Oui, je me rends compte que je ne l'ai pas interprété correctement. Plutôt simpliste, j'ai supposé que depuis sa répartition de probabilité, il serait inférieur à 1 :).
@Jorismeys, lorsque la zone totale sous la courbe est de 1, comment PDF peut-elle être supérieure à 1? Si le PDF va au-delà de 1, est probablement que la distribution n'est pas normale et qu'elle doit être normalisée?
@karthiks parce que par exemple un rectangle avec une hauteur de 10 et une largeur de 0,01 a une superficie de 0,1 tandis que la valeur y (d'où le PDF) serait 10. Pour la zone, vous devez prendre en compte les axes X et Y, et non seulement l'axe des y.