Відповіді:
Офіційне вирішення цієї проблеми спочатку вимагає правильного визначення а
" розподіл з обмеженням, що || x || ^ 2 = 1 "
Природним способом є визначення розподілу від . І застосувати це умовне до випадку . Якщо ми використовуємо полярні координати , Якобіаном перетворення є Тому умовна щільність розподілу
Висновок: Ця щільність відрізняється від простого нанесення Нормальної щільності до точки на одиничній сфері через якобійську.
Другий крок - розглянути цільову щільність та спроектуйте алгоритм Монте-Карло ланцюга Маркова для дослідження простору параметрів . Моя перша спроба була б у пробовідбірника Гіббса, ініціалізованого в точці на сфері, найближчій до , тобто, і протікаючи по одному куту за раз, таким чином, як Metropolis-in-Gibbs:
Терези , , , можна масштабувати відповідно до швидкості прийняття кроків до досягнення ідеальної мети .
Ось код 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, а потім помножити на квадратний корінь , а потім додати засоби .