web-dev-qa-db-fra.com

Force R pour tracer l'histogramme sous forme de probabilité (fréquence relative)

J'ai de la difficulté à tracer un histogramme au format pdf (probabilité)

Je veux que la somme de toutes les pièces soit égale à une surface de un, ce qui facilitera la comparaison entre les jeux de données. Pour une raison quelconque, chaque fois que je spécifie les interruptions (la valeur par défaut de 4 ou autre est terrible), il ne veut plus tracer les tranches sous forme de probabilité mais plutôt les tracer sous forme de nombre de fréquences.

hist(data[,1], freq = FALSE, xlim = c(-1,1), breaks = 800)

Que devrais-je changer cette ligne? J'ai besoin d'une distribution de probabilité et d'un grand nombre de cases. (J'ai 6 millions de points de données)

Ceci est dans l'aide de R, mais je ne sais pas comment le remplacer: 

fréq logique; si TRUE, l'histogramme est une représentation de fréquences, la composante des comptes du résultat; si FAUX, probabilité les densités, la densité des composants, sont tracées (de sorte que l'histogramme ait une surface totale de un). La valeur par défaut est TRUE si et seulement si les pauses sont équidistante (et la probabilité n'est pas spécifiée).

Merci

modifier: détails

hmm donc mon intrigue va au-dessus de 1, ce qui est assez déroutant si c'est une probabilité. Je vois comment cela a à voir avec la largeur de la corbeille maintenant. Je veux plus ou moins faire que chaque poubelle vaille 1 point tout en ayant beaucoup de poubelles. En d'autres termes, aucune hauteur de bac ne doit être supérieure à 1,0 sauf si elle est directement à 1,0 et que tous les autres bacs ont une valeur de 0,0. À l'heure actuelle, j'ai une poubelle qui fait une bosse autour de 15,0

edit: hauteur par% points dans bin @ Dwin: Alors, comment puis-je tracer la probabilité? Je me rends compte que prendre l’intégrale me donnera quand même 1,0 à cause des unités sur l’axe des x, mais ce n’est pas ce que je veux. Supposons que j'ai 100 points et que 5 d’entre eux tombent dans la première corbeille, cette corbeille devrait alors être à une hauteur de 0,05. C'est ce que je veux. Est-ce que je me trompe et qu'il y a une autre façon de procéder? 

Je sais combien de points j'ai. Existe-t-il un moyen de diviser chaque nombre de cases dans l'histogramme de fréquence par ce nombre?

16
SwimBikeRun

Pour répondre à la demande de tracé des probabilités plutôt que des densités:

h <- hist(vec, breaks = 100, plot=FALSE)
h$counts=h$counts/sum(h$counts)
plot(h)
39
42-

Êtes-vous sûr? Cela fonctionne pour moi:

> vec <- rnorm(6000000)
> 
> h <- hist(vec, breaks = 800, freq = FALSE)
> sum(h$density)
[1] 100
> unique(zapsmall(diff(h$breaks)))
[1] 0.01

Multipliez les deux derniers résultats et vous obtenez une somme de densité de probabilité de 1. N'oubliez pas que la largeur de la corbeille est importante.

C'est avec

> sessionInfo()
R version 3.0.1 RC (2013-05-11 r62732)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.1
2
Gavin Simpson

Le nombre de pauses par défaut est autour de log2(N), où N est 6 millions dans votre cas, donc devrait être 22. Si vous ne voyez que 4 pauses, cela peut être dû au fait que votre appel contient xlim. Cela ne change pas l'histogramme sous-jacent, cela n'affecte que la partie de celui-ci qui est tracée. Si tu fais

h <- hist(data[,1], freq=FALSE, breaks=800)
sum(h$density * diff(h$breaks))

vous devriez obtenir un résultat de 1.


La densité de vos données est liée à ses unités de mesure; par conséquent, vous voulez vous assurer que "aucune hauteur de bac ne doit être supérieure à 1,0" est réellement significatif. Par exemple, supposons que nous ayons un tas de mesures en pieds. Nous traçons l'histogramme des mesures sous forme de densité. Nous convertissons ensuite toutes les mesures en pouces (en les multipliant par 12) et effectuons un autre histogramme de densité. La hauteur de la densité sera de 1/12ème de l'original même si les données sont essentiellement les mêmes. De même, vous pouvez créer des hauteurs de corbeille inférieures à 1 en multipliant tous vos nombres par 15.

La valeur 1.0 a-t-elle une signification?

2
Hong Ooi

J'ai observé cela, en histogramme densité = fréquence relative/largeur de bac correspondante

Exemple 1:

nums = c (10, 41, 10, 28, 22, 8, 31, 3, 9, 9)

h2 = hist (nums, plot = F)

rf2 = h2 $ compte/somme (h2 $ compte)

d2 = rf2/diff (h2 $ pauses)

densité de h2 $

[1] 0,06 0,00 0,02 0,01 0,01

d2

[1] 0,06 0,00 0,02 0,01 0,01

Exemple 2:

nums = c (10, 41, 10, 28, 22, 8, 31, 3, 9, 9)

h3 = hist (nums, parcelle = F, sauts = c (1,30,40,50))

rf3 = h3 $ comptes/somme (h3 $ comptes)

d3 = rf3/diff (h3 $ pauses)

densité h3 $

[1] 0,02758621 0,01000000 0,01000000

d3

[1] 0,02758621 0,01000000 0,01000000

0
Nagababu Tubati