Prelievo di campioni da una distribuzione normale multivariata soggetta a vincoli quadratici


Risposte:


12

La risoluzione formale di questo problema richiede innanzitutto una corretta definizione di a

" Nd(μ,Σ) distribuzione soggetta al vincolo che ||x||2=1 "

Il modo naturale è definire la distribuzione di base a . E per applicare questo condizionale al caso . Se utilizziamo coordinate polari , il giacobino della trasformazione è Pertanto la densità condizionale della distribuzione di| | X | | = ϱ ϱ = 1 x 1 = ϱ cos ( θ 1 )XNd(μ,Σ)||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)
θ = ( θ 1 , , θ d - 1 )
ϱd1i=1d2sin(θi)d1i
θ=(θ1,,θd1) dato è f ( θ | ϱ ) exp - 1ϱ
f(θ|ϱ)exp12{(x(θ,ϱ)μ)TΣ1(x(θ,ϱ)μ)}i=1d2sin(θi)d1i

Conclusione: questa densità differisce dalla semplice applicazione della densità normale a un punto sulla sfera unitaria a causa del Jacobiano.

Il secondo passo è considerare la densità target e progetta un algoritmo Monte Carlo a catena Monteov per esplorare lo spazio dei parametri . Il mio primo tentativo sarebbe quello di un campionatore di Gibbs, inizializzato nel punto sulla sfera più vicino a , cioèe procedendo un angolo alla volta in modo Metropolis-entro-Gibbs:[0,π]d-2×[0,2π]μμ

f(θ|ϱ=1)exp12{(x(θ,1)μ)TΣ1(x(θ,1)μ)}i=1d2sin(θi)d1i
[0,π]d2×[0,2π]μμ/||μ||
  1. Genera (dove vengono calcolate le somme modulo ) e accetta questo nuovo valore con probabilità elseπ f ( θ ( t + 1 ) 1 , θ ( t ) 2 , . . . | ϱ = 1 )θ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. Genera (dove vengono calcolate le somme modulo ) e accetta questo nuovo valore con probabilità altroθ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. Genera (dove vengono calcolate le somme modulo ) e accetta questo nuovo valore con 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)

Le scale , , , possono essere ridimensionate rispetto ai tassi di accettazione dei passaggi, verso un obiettivo ideale del .δ1δ2δd150%

Ecco un codice R per illustrare quanto sopra, con i valori predefiniti per e :ΣμΣ

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}
   }
}

-3

x E [ ( x - μ ) 2 ] ˜ = 1||x||22=1 non è strettamente possibile poiché è una variabile (continua) casuale. Se desideri che abbia una varianza di 1, ovvero (dove la tilde significa che stimiamo la varianza), allora dovrai richiedere che la sua varianza sia . Tuttavia, questa richiesta potrebbe essere in conflitto con . Cioè, per ottenere campioni con questa varianza è necessario che la diagonale di sia uguale a .x 1E[(xμ)2]=~1n(xμ)2=1n||xn||22=1n ΣΣ11nΣΣ1n

Per provare questa distribuzione in generale, è possibile generare normali standard iid e quindi moltiplicare per , la radice quadrata di , quindi aggiungere i mezzi . Σ μΣ0.5Σμ


Grazie per la risposta. Un modo in cui riesco a pensare che produrrà ciò che voglio (ma non è efficiente) è il campionamento del rifiuto . Quindi, non è impossibile farlo. Ma sto cercando un modo efficiente per farlo.
Sobi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.