Estoy buscando generar 450 puntos de datos en R. Hay tres conjuntos distintos 150 de cada uno distribuidos en una banda circular con diferentes radios (en 1, 2.8 y 5).
En particular, estoy buscando reproducir el primer gráfico en p546 de Los elementos del aprendizaje estadístico.
Estaría muy agradecido por alguna ayuda en el código R que podría generar estos datos.
¡Gracias!
Respuestas:
En el caso de un círculo, es suficiente generar un ángulo uniforme,θ , en [ 0 , 2 π) y luego hacer el radio, r , lo que se desee. Si quieres cartesiano, en lugar de coordenadas polares,x=rcosθ y y=rsinθ .
Una forma realmente fácil de generar puntos aleatorios a partir de una distribución uniforme, una esfera d (una hiperesfera en un espacio de dimensión arbitrariad+1 , con superficie de dimensión d ), es generar normales estándar multivariantes Xi∼Nd+1(0,I) , y luego escalar por su distancia desde el origen:
dónde||.|| es la norma euclidiana .
En R, generemos en la superficie de una esfera (2-):
Aquí están esos datos desde dos ángulos ligeramente diferentes:
Luego puede escalar a cualquier otro radio que desee.
En dimensiones bajas, hay formas más rápidas, pero si su generador normal de números aleatorios es razonablemente rápido, es bastante bueno en dimensiones más altas.
Hay varios paquetes en CRAN para estadísticas circulares, incluidos
CircStats
ycircular
. Probablemente haya algo en CRAN que genere distribuciones uniformes en n-esferas para n> 1, pero no lo sé.fuente