Я хотел бы эффективно рисовать образцы из условии, что .
Я хотел бы эффективно рисовать образцы из условии, что .
Формальное решение этой проблемы в первую очередь требует правильного определения
« условии ограничения || x || ^ 2 = 1 »
Естественным способом является определение распределения условного на . И применить это условие к случаю . Если мы используем полярные координаты , якобиан преобразования - Поэтому условная плотность распределения| | X | | = ϱ ϱ = 1 x 1 = ϱ cos ( θ 1 )ρd-1г-2ΠI=1грех(θя)d-1-яθ=(θ1,…,θd-1)
Вывод: эта плотность отличается от простого применения нормальной плотности к точке на единичной сфере из-за якобиана.
Второй шаг - рассмотреть целевую плотность и спроектируйте алгоритм Монте-Карло цепи Маркова, чтобы исследовать пространство параметров . Моя первая попытка была бы на сэмплере Гиббса, инициализированном в точке на сфере, ближайшей к , то естьи продолжая один угол за один раз способом Метрополиса в пределах Гиббса: [0,π] d - 2 ×[0,2π]μμ
Шкалы , , , можно масштабировать в соответствии с показателями , чтобы идеальной цели .
Вот код R, иллюстрирующий вышесказанное, со значениями по умолчанию для и :
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}
}
}
не является строго возможным, поскольку является (непрерывной) случайной величиной. Если вы хотите, чтобы оно имело дисперсию 1, т.е. (где тильда означает, что мы оцениваем дисперсию), тогда вам потребуется, чтобы ее дисперсия была . Однако это требование может противоречить . То есть, чтобы получить образцы с этой дисперсией, вам нужно, чтобы диагональ была равна .
Чтобы получить образец этого распределения в целом, вы можете сгенерировать iid стандартных нормалей, а затем умножить на , квадратный корень из , а затем добавить средства .