Je cherche à générer 450 points de données en R. Il y a trois ensembles distincts 150 chacun répartis dans une bande circulaire avec des rayons différents (à 1, 2,8 et 5).
En particulier, je cherche à reproduire le premier graphique à la p546 de The Elements of Statistical Learning.
Je serais très reconnaissant pour une aide dans le code R qui pourrait générer ces données.
Merci!
Réponses:
Dans le cas d'un cercle, il suffit de générer un angle uniforme,θ , sur [0,2π) puis faites le rayon, r , tout ce qui est souhaité. Si vous voulez des coordonnées cartésiennes plutôt que polaires,x=rcosθ et y=rsinθ .
Un moyen vraiment simple de générer des points aléatoires à partir d'une distribution uniforme d'une sphère d (une hypersphère dans un espace de dimension arbitraired+1 , avec surface de dimension d ), consiste à générer des normales standard multivariées Xi∼Nd+1(0,I) , puis l'échelle en fonction de leur distance par rapport à l'origine:
où||.|| est la norme euclidienne .
En R, générons à la surface d'une (2-) sphère:
Voici ces données sous deux angles légèrement différents:
Vous pouvez ensuite vous adapter à n'importe quel autre rayon que vous souhaitez.
Dans les petites dimensions, il existe des moyens plus rapides, mais si votre générateur de nombres aléatoires normal est raisonnablement rapide, il est assez bon dans les dimensions supérieures.
Il existe plusieurs packages sur CRAN pour les statistiques circulaires, y compris
CircStats
etcircular
. Il y a probablement quelque chose sur CRAN qui génère des distributions uniformes sur n-sphères pour n> 1, mais je ne le sais pas.la source