Eu estou olhando para gerar 450 pontos de dados em R. Existem três conjuntos distintos 150 de cada um distribuídos em uma banda circular com raios diferentes (em 1, 2,8 e 5).
Em particular, pretendo reproduzir o primeiro gráfico da p546 de Os elementos do aprendizado estatístico.
Ficaria muito grato por alguma assistência no código R que possa gerar esses dados.
Obrigado!
Respostas:
No caso de um círculo, basta gerar um ângulo uniforme, , em e depois fazer o raio, , o que for desejado. Se você deseja coordenadas cartesianas, em vez de polares, e .[ 0 , 2 π ) r x = r cos θ y = r sen θθ [ 0 , 2 π) r x = r cosθ y= r sinθ
Uma maneira realmente fácil de gerar pontos aleatórios a partir de uma distribuição uniforme de uma esfera d (uma hiperesfera em um espaço de dimensão arbitrária , com superfície de dimensão ), é gerar normais padrão multivariados e, em seguida, escala pela distância da origem:d X i ∼ N d + 1 ( 0 , I )d+ 1 d XEu∼ Nd+ 1( 0 , eu)
ondeé a norma euclidiana .| | . | |
Em R, vamos gerar na superfície de uma (2) esfera:
Aqui estão os dados de dois ângulos ligeiramente diferentes:
Você pode então escalar para qualquer outro raio que desejar.
Em dimensões baixas, existem maneiras mais rápidas, mas se o gerador normal de números aleatórios for razoavelmente rápido, será muito bom em dimensões mais altas.
Existem vários pacotes no CRAN para estatísticas circulares, incluindo
CircStats
ecircular
. Provavelmente existe algo no CRAN que gera distribuições uniformes nas n-esferas para n> 1, mas eu não sei.fonte