Extracción de muestras de una distribución normal multivariada sujeta a restricciones cuadráticas

Respuestas:

12

La resolución formal de este problema primero requiere una definición adecuada de un

" distribución sujeta a la restricción de que "Nd(μ,Σ)||x||2=1

La forma natural es definir la distribución de condicional en . Y para aplicar este condicional al caso . Si usamos coordenadas polares , el jacobiano de la transformación es Por lo tanto, la densidad condicional de la distribución deXNd(μ,Σ)||X||=ϱϱ=1

x1=ϱcos(θ1)θ1[0,π]x2=ϱsin(θ1)cos(θ2)θ2[0,π]xd1=ϱ(i=1d2sin(θi))cos(θd1)θd1[0,2π]xd=ϱi=1d1sin(θi)
ϱd1i=1d2sin(θi)d1i
θ=(θ1,,θd1) dado es ϱ
f(θ|ϱ)exp12{(x(θ,ϱ)μ)TΣ1(x(θ,ϱ)μ)}i=1d2sin(θi)d1i

Conclusión: Esta densidad difiere de simplemente aplicar la densidad Normal a un punto en la esfera de la unidad debido a la Jacobia.

El segundo paso es considerar la densidad objetivo y diseñe un algoritmo de Monte Carlo en cadena de Markov para explorar el espacio de parámetros . Mi primer intento sería en una muestra de Gibbs, inicializada en el punto de la esfera más cercana a , es decir,, y siguiendo un ángulo a la vez de una manera Metrópolis dentro de Gibbs:

f(θ|ϱ=1)exp12{(x(θ,1)μ)TΣ1(x(θ,1)μ)}i=1d2sin(θi)d1i
[0,π]d2×[0,2π]μμ/||μ||
  1. Generar (donde se calculan las sumas módulo ) y acepte este nuevo valor con probabilidad elseθ1(t+1)U([θ1(t)δ1,θ1(t)+δ1])π
    f(θ1(t+1),θ2(t),...|ϱ=1)f(θ1(t),θ2(t),...|ϱ=1)1
    θ1(t+1)=θ1(t)
  2. Generar (donde se calculan las sumas módulo ) y acepte este nuevo valor con probabilidad másθ2(t+1)U([θ2(t)δ2,θ2(t)+δ2])π
    f(θ1(t+1),θ2(t+1),θ3(t),...|ϱ=1)f(θ1(t+1),θ2(t),θ3(t),...|ϱ=1)1
    θ2(t+1)=θ2(t)
  3. Generar (donde las sumas se calculan módulo ) y acepta este nuevo valor con probabilidad másθd1(t+1)U([θd1(t)δd1,θd1(t)+δd1])2π
    f(θ1(t+1),θ2(t+1),...,θd1(t+1)|ϱ=1)f(θ1(t+1),θ2(t+1),...,θd1(t)|ϱ=1)1
    θd1(t+1)=θd1(t)

Las escalas , , , se pueden escalar contra las tasas de aceptación de los pasos, hacia un objetivo ideal del .δ1δ2δd150%

Aquí hay un código R para ilustrar lo anterior, con valores predeterminados para y :μΣ

library(mvtnorm)
d=4
target=function(the,mu=1:d,sigma=diag(1/(1:d))){
 carte=cos(the[1])
 for (i in 2:(d-1))
  carte=c(carte,prod(sin(the[1:(i-1)]))*cos(the[i]))
 carte=c(carte,prod(sin(the[1:(d-1)])))
 prod(sin(the)^((d-2):0))*dmvnorm(carte,mean=mu,sigma=sigma)}
#Gibbs
T=1e4
#starting point
mu=(1:d)
mup=mu/sqrt(sum(mu^2))
mut=acos(mup[1])
for (i in 2:(d-1))
  mut=c(mut,acos(mup[i]/prod(sin(mut))))
thes=matrix(mut,nrow=T,ncol=d-1,byrow=TRUE)
delta=rep(pi/2,d-1)     #scale
past=target(thes[1,])   #current target
for (t in 2:T){
 thes[t,]=thes[t-1,]
 for (j in 1:(d-1)){
   prop=thes[t,]
   prop[j]=prop[j]+runif(1,-delta[j],delta[j])
   prop[j]=prop[j]%%(2*pi-(j<d-1)*pi)
   prof=target(prop)
   if (runif(1)<prof/past){
     past=prof;thes[t,]=prop}
   }
}
Xi'an
fuente
-3

||x||22=1 no es estrictamente posible ya que es una variable aleatoria (continua). Si desea que tenga una varianza de 1, es decir, (donde la tilde significa que estimamos la varianza), entonces necesitaría requerir que su varianza sea . Sin embargo, esta demanda puede entrar en conflicto con . Es decir, para obtener muestras con esta varianza, necesita que la diagonal de sea ​​igual a .xE[(xμ)2]=~1n(xμ)2=1n||xn||22=1n1nΣΣ1n

Para muestrear esta distribución en general, puede generar iid normales normales y luego multiplicar por , la raíz cuadrada de , y luego agregar los medios .Σ0.5Σμ

yoki
fuente
Gracias por su respuesta. Una forma en que puedo pensar que producirá lo que quiero (pero no es eficiente) es el muestreo de rechazo . Entonces, no es imposible hacerlo. Pero estoy buscando una forma eficiente de hacerlo.
Sobi