¿Tiene R un paquete para generar números aleatorios en espacio multidimensional? Por ejemplo, supongamos que quiero generar 1000 puntos dentro de un cuboide o una esfera.Generación de datos multidimensionales
Respuesta
También echa un vistazo al paquete de cópula. Esto generará datos dentro de un cubo/hipercubo con márgenes uniformes, pero con las estructuras de correlación que establezca. Las variables generadas se pueden transformar para representar otras formas, pero aún con relaciones que no sean independientes.
Si desea formas más complejas pero está satisfecho con uniforme e independiente de la forma, puede hacer un muestreo de rechazo: generar datos dentro de un cubo que contenga su forma, luego probar si los puntos están dentro de su forma, rechazarlos si no, entonces sigue haciendo esto hasta que haya suficientes puntos.
cuboides:
df <- data.frame(
x = runif(1000),
y = runif(1000),
z = runif(1000)
)
head(df)
x y z
1 0.7522104 0.579833314 0.7878651
2 0.2846864 0.520284731 0.8435828
3 0.2240340 0.001686003 0.2143208
4 0.4933712 0.250840233 0.4618258
5 0.6749785 0.298335804 0.4494820
6 0.7089414 0.141114804 0.3772317
Esfera:
df <- data.frame(
radius = runif(1000),
inclination = 2*pi*runif(1000),
azimuth = 2*pi*runif(1000)
)
head(df)
radius inclination azimuth
1 0.1233281 5.363530 1.747377
2 0.1872865 5.309806 4.933985
3 0.2371039 5.029894 6.160549
4 0.2438854 2.962975 2.862862
5 0.5300013 3.340892 1.647043
6 0.6972793 4.777056 2.381325
Nota: editado para incluir código para esfera
tengo algunas funciones para la selección hipercubo y n-esfera que generan tramas de datos con cartesiano coordina y garantiza una distribución uniforme a través del hipercubo o n-esfera para una cantidad arbitraria de dimensiones:
GenerateCubiclePoints <- function(nrPoints,nrDim,center=rep(0,nrDim),l=1){
x <- matrix(runif(nrPoints*nrDim,-1,1),ncol=nrDim)
x <- as.data.frame(
t(apply(x*(l/2),1,'+',center))
)
names(x) <- make.names(seq_len(nrDim))
x
}
es en un cubo/hipercubo de nrDim
dimensiones con un center
y l
la longitud de un lado.
Para un n-esfera con nrDim
dimensiones, se puede hacer algo similar, donde r
es el radio:
GenerateSpherePoints <- function(nrPoints,nrDim,center=rep(0,nrDim),r=1){
#generate the polar coordinates!
x <- matrix(runif(nrPoints*nrDim,-pi,pi),ncol=nrDim)
x[,nrDim] <- x[,nrDim]/2
#recalculate them to cartesians
sin.x <- sin(x)
cos.x <- cos(x)
cos.x[,nrDim] <- 1 # see the formula for n.spheres
y <- sapply(1:nrDim, function(i){
if(i==1){
cos.x[,1]
} else {
cos.x[,i]*apply(sin.x[,1:(i-1),drop=F],1,prod)
}
})*sqrt(runif(nrPoints,0,r^2))
y <- as.data.frame(
t(apply(y,1,'+',center))
)
names(y) <- make.names(seq_len(nrDim))
y
}
en 2 dimensiones, éstas dan:
De código :
T1 <- GenerateCubiclePoints(10000,2,c(4,3),5)
T2 <- GenerateSpherePoints(10000,2,c(-5,3),2)
op <- par(mfrow=c(1,2))
plot(T1)
plot(T2)
par(op)
@Richie: thx para el ajuste –
Muchas gracias por su ayuda y respuestas ... – Pradeep
@Pradeep - Si esto responde mejor a su pregunta, debe considerar aceptar esta respuesta en lugar de la que usted hizo. –
Hace un par de años, hice un paquete llamado geozoo. Está disponible en CRAN.
install.packages("geozoo")
library(geozoo)
Tiene muchas funciones diferentes para producir objetos en N dimensiones.
p = 4
n = 1000
# Cube with points on it's face.
# A 3D version would be a box with solid walls and a hollow interior.
cube.face(p)
# Hollow sphere
sphere.hollow(p, n)
# Solid cube
cube.solid.random(p, n)
cube.solid.grid(p, 10) # evenly spaced points
# Solid Sphere
sphere.solid.random(p, n)
sphere.solid.grid(p, 10) # evenly spaced points
Una de mis favoritas para ver animado es un cubo con puntos a lo largo de sus bordes, porque fue uno de los primeros objetos que he hecho. También te da una sensación de distancia entre vértices.
# Cube with points along it's edges.
cube.dotline(4)
Además, echa un vistazo a la página web: http://streaming.stat.iastate.edu/~dicook/geometric-data/. Contiene imágenes y conjuntos de datos descargables.
Espero que satisfaga sus necesidades!
- 1. gráfico de datos multidimensionales
- 2. ¿la mejor estructura de datos para datos multidimensionales?
- 3. CodeIgniter: Validar formulario con datos POST multidimensionales
- 4. Matlab - Análisis de PCA y reconstrucción de datos multidimensionales
- 5. Consulta eficiente de un árbol B + que contiene datos multidimensionales
- 6. cómo analizar datos multidimensionales JSON a través de Javascript
- 7. matrices multidimensionales de JavaScript
- 8. Generación automática de conjuntos de datos DBUnit
- 9. Estructuras de datos de última generación
- 10. estructuras de datos cíclicos inmutables Generación de
- 11. Usando numpy.argmax() en matrices multidimensionales
- 12. Arrays multidimensionales en Bash
- 13. array_map para matrices multidimensionales
- 14. Powershell matrices multidimensionales
- 15. PHP: Combinar matrices multidimensionales
- 16. array_diff() con matrices multidimensionales
- 17. PHP ordenar matrices multidimensionales
- 18. Arrays multidimensionales PostgreSQL en SQLAlchemy
- 19. eficiente System.arraycopy en matrices multidimensionales
- 20. PHP combina dos matrices multidimensionales
- 21. indexOf sintaxis para matrices multidimensionales?
- 22. Implantar y explotar matrices multidimensionales
- 23. Generación automática de scripts de cambio de base de datos
- 24. Generación de variables de interacción en marcos de datos R
- 25. C sintaxis extraña serie de matrices multidimensionales
- 26. iteración de matriz Awk para matrices multidimensionales
- 27. Arrays multidimensionales C++ de alto rendimiento
- 28. Implementación eficiente de matrices multidimensionales en Java?
- 29. ¿Clonación profunda de matrices multidimensionales en Java ...?
- 30. Generación de salida LaTeX desde el marco de datos R
No veo cómo podría usar las cópulas para generar puntos aleatorios en un espacio n-dimensional , obligado por ciertos límites. La cópula elipsoide, por ejemplo, no tiene una distribución uniforme en absoluto, se basa en la distribución normal multivariante (o t). Uno debe ser muy cuidadoso al usar este gran paquete, y saber que lo que sale es exactamente lo que uno cree que es. No lo usaría para este propósito. El muestreo de rechazo es una cuestión totalmente diferente, esa es una solución perfecta. –