Estoy tratando de generar multivariante de datos en forma de Saturno (larga historia).
Más formalmente;
- *cluster 1 es un rango-p Gaussiano con matriz de correlación R (donde cada fuera de la diagonal de la entrada de R es el mismo número en (0,1)).
- clúster 2 es un montón de puntos distribuidos en un host de hyper-plan de clasificación p-1, alrededor del ecuador de la categoría 1, que se encuentra más allá de una cierta distancia de mahalanobis wrt para cluster1 de decir ζ.
El rechazo de muestreo está bien, siempre y cuando la tasa de rechazo es pequeño: esta configuración tiene que ser generado muchas veces por n p grande de forma fiable.
Actualización: Por lo que he implementado Bob Durrant la solución:
x0<-matrix(rnorm(n*p),n,p)
b0<-matrix(rnorm(n*p),n,p)
b1<-qchisq(0.99,df=p);
b2<-sqrt(c(b1,b1*1.25))
b0<-b0/sqrt(rowSums(b0*b0))*runif(n,b2[1],b2[2])
plot(rbind(x0,x1))
mahalanobis(cbind(0,b0),colMeans(x0),var(x0))/(qchisq(0.99,df=p))
dando la imagen adjunta, los cuales se ven en efecto, como Saturno .
con los anillos situados al menos a @ qchisq(0.99,df=p) distancia desde el centro.
Ahora, sin embargo, quiero que mi saturno a ser en forma de elipse, es decir, tienen correlación de la estructura de R. El problema es que se me pre-multiplicar \verb+x0+\verb+cbind(0,x1)+R^{1/2}, los anillos no estamos en el ecuador :(
Update2:
Por ejemplo, las cosas ya se tuercen cuando puedo reemplazar la diagonal de la varianza de la estructura de arriba con algo más.
Por ejemplo:
library(MASS)
x0<-mvrnorm(n,rep(0,p),diag(rchisq(p,p),p))
b0<-mvrnorm(n,rep(0,p-1),diag(rchisq(p-1,p-1),p-1))
b1<-qchisq(0.99,df=p);
b2<-sqrt(c(b1,b1*1.25))
b0<-b0/sqrt(rowSums(b0*b0))*runif(n,b2[1],b2[2])
mahalanobis(cbind(0,b0),colMeans(x0),var(x0))/(qchisq(0.99,df=p))
la mayoría de las distancias son demasiado grandes (comparar con la salida a la misma llamada después de usar la diagonal de co-varianza de la matriz de arriba)!
Update3
delta<-0.9
p<-3
R<-matrix(runif(p^2,delta*0.99,delta),p,p)
#to avoid repeating eigen-values, i jitter a bit.
diag(R)<-1