Loading [MathJax]/extensions/TeX/verb.js

5 votos

Cómo generar un par de elipses en forma de Saturno en Rp

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

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