2015-12-29 5 views
3

Je suis en train d'écrire un simulateur de roulette et je me suis contenté du début. Je voulais dessiner des entiers de 0 à 36, donc j'ai utilisé runif(). J'ai remarqué que les 0 sont exceptionnels. Jetez un coup d'oeil:runif() n'est pas uniforme

n=1000000 
x=floor(runif(n,0,37)) 
hist(x,breaks=37) 

Histogram: floor(runif(n,0,37))

Pour enlever "0" je l'ai écrit:

n=1000000 
x=floor(runif(n,0,37)*100)/100 
hist(x,breaks=37) 

Ce qui m'a donné

Histogram: enter image description here

Et ma question est pourquoi il travaux?

+1

Non, ce n'est pas un problème avec runif. Essayez ceci à la place 'plot (densité (x))' le problème est avec où les pauses dans votre histogramme sont placées, et qu'il y a un problème de poteau au travail – Shape

+3

@Shape, poster comme réponse? (OP peut vouloir considérer 'sample (0: 36, size = 1e6, replace = TRUE)' ...) –

+0

Je sais que j'ai écrit une réponse à une autre question à propos de ça quelque part ... là, je l'ai trouvé! – joran

Répondre

4

Non, ce n'est pas un problème avec runif.

Essayez ceci: plot(density(x))

et vous voyez la distribution est lisse

le problème est avec où sont placés les pauses dans votre histogramme, et qu'il ya un problème de fencepost au travail. L'histogramme n'est pas le meilleur outil de visualisation pour cela, car les ruptures doivent s'aligner parfaitement.

+0

merci. Cela signifie donc que je peux supposer que 'floor (runif (n, 0,37))' me donne des entiers distribués uniformes, non? – wjagus

+0

Il devrait. Vous pouvez également regarder la table (x), si vous voulez regarder les chiffres réels. – Shape