Prélèvement d'échantillons à partir d'une distribution normale multivariée soumise à des contraintes quadratiques

Réponses:

12

La résolution formelle de ce problème nécessite d'abord une définition correcte d'un

" Nd(μ,Σ) distribution soumise à la contrainte que ||x||2=1 "

La manière naturelle est de définir la distribution de conditionnellement à . Et pour appliquer cette condition au cas . Si nous utilisons des coordonnées polaires , le jacobien de la transformation est Donc la densité conditionnelle de la distribution 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) étant donné que est ϱ
f(θ|ϱ)exp12{(x(θ,ϱ)μ)TΣ1(x(θ,ϱ)μ)}i=1d2sin(θi)d1i

Conclusion: Cette densité diffère de l'application simple de la densité normale à un point sur la sphère unitaire en raison du jacobien.

La deuxième étape consiste à considérer la densité cible et concevoir un algorithme de Monte Carlo à chaîne de Markov pour explorer l'espace des paramètres . Ma première tentative serait un échantillonneur Gibbs, initialisé au point sur la sphère la plus proche de , c'est-à-dire, et en procédant un angle à la fois d'une manière Metropolis-within-Gibbs:

f(θ|ϱ=1)exp12{(x(θ,1)μ)TΣ1(x(θ,1)μ)}i=1d2sin(θi)d1i
[0,π]d2×[0,2π]μμ/||μ||
  1. Générer (où les sommes sont calculées modulo ) et acceptez cette nouvelle valeur avec probabilité 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. Générer (où les sommes sont calculées modulo ) et acceptez cette nouvelle valeur avec probabilité elseθ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. Générez (où les sommes sont calculées modulo ) et acceptez cette nouvelle valeur avec probabilité elseθ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)

Les échelles , , , peuvent être ajustées en fonction des taux d'acceptation des étapes, vers un objectif idéal de .δ1δ2δd150%

Voici un code R pour illustrer ce qui précède, avec des valeurs par défaut pour et :μΣ

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
la source
-3

||x||22=1 n'est pas strictement possible car est une variable aléatoire (continue). Si vous souhaitez qu'il ait une variance de 1, c'est-à-dire (où le tilde signifie que nous estimons la variance), vous devrez alors exiger que sa variance soit . Cependant, cette demande peut entrer en conflit avec . Autrement dit, pour obtenir des échantillons avec cette variance, vous avez besoin que la diagonale de soit égale à .xE[(xμ)2]=~1n(xμ)2=1n||xn||22=1n1nΣΣ1n

Pour échantillonner cette distribution en général, vous pouvez générer des normales standard iid, puis multiplier par , la racine carrée de , puis ajouter les moyennes .Σ0.5Σμ

yoki
la source
Merci pour votre réponse. Une façon dont je peux penser que cela produira ce que je veux (mais n'est pas efficace) est l' échantillonnage de rejet . Il n'est donc pas impossible de le faire. Mais je cherche un moyen efficace de le faire.
Sobi