5 votos

Cómo generar un par de elipses en forma de Saturno en $\mathbb{R}^p$

Estoy tratando de generar multivariante de datos en forma de Saturno (larga historia).

Más formalmente;

  1. *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)$).
  2. 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 $\zeta$.

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 Saturn. 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

2voto

Ilya Puntos 226

Para un gran $p$ esférica rango $p$ Gaussiano en $\mathbb{R}^{p}$ se parece a la distribución uniforme sobre la superficie de la hypersphere $\mathbb{S}^{p-1}$ radio $\sigma\sqrt{p}$, mientras que un rango de $p-1$ esférica Gaussiana incrustado en $\mathbb{R}^{p}$ le dará los anillos de Saturno (los puntos se verá como en la hypersphere $\mathbb{S}^{p-2}$).

Así que yo creo que puede generar este tipo de datos de dibujo de dos Gaussianas esféricas $\mathcal{N}(0,\sigma_{p}^{2}I_{p})$ $\mathcal{N}(0,\sigma_{p-1}^{2}I_{p-1})$ haber $\sigma_{p}^{2}$ $\sigma_{p-1}^{2}$ para conseguir la separación desea.

La concentración en las normas es exponencialmente rápido w.r.t $p$, por lo que es probable que usted no tenga que tirar ningún punto si $p$ es lo suficientemente grande.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X