Багатоваріантний нормальний розподіл сферично симетричний. Ви шукаєте розподілу усікає радіус нижче . Оскільки цей критерій залежить лише від довжини , усічений розподіл залишається сферично симетричним. Оскільки не залежить від сферичного кутаі мають розподіл , то , отже , може генерувати значення з усіченого розподілу всього за кілька простих кроків:ρ = | | X | | 2 a X ρ X / | | X | | ρXρ=||X||2aXρX/||X||χ ( n )ρσχ(n)
Створіть .X∼N(0,In)
Створіть як квадратний корінь розподілу усічений в .χ 2 ( d ) ( a / σ ) 2Pχ2(d)(a/σ)2
Нехай.Y=σPX/||X||
На етапі 1 отримують у вигляді послідовності незалежних реалізацій стандартної нормальної змінної.дXd
На етапі 2 легко створюється шляхом інвертування квантильної функції розподілу : генерувати однорідну змінну підтримувану в діапазоні (квантилів) між і і задаємо .F - 1 χ 2 ( d ) U F ( ( a / σ ) 2 ) 1 P = √PF−1χ2(d)UF((a/σ)2)1P=F(U)−−−−−√
Ось гістограма з таких незалежних реалізацій для в вимірах, усічена внизу при . Генерування зайняло близько однієї секунди, що підтверджує ефективність роботи алгоритму. σ P σ = 3 n = 11 a = 7105σPσ=3n=11a=7
Червона крива - це щільність усіченого розподілу, масштабована на . Її близька відповідність гістограмі свідчить про обгрунтованість цієї методики.σ = 3χ(11)σ=3
Щоб отримати інтуїцію для усікання, розглянемо випадок , у вимірах. Ось розсіювач проти (для незалежних реалізацій). На ній чітко видно отвір в радіусі :σ = 1 n = 2 Y 2 Y 1 10 4 aa=3σ=1n=2Y2Y1104a
Нарешті, зауважимо, що (1) компоненти повинні мати однакові розподіли (через сферичну симетрію) та (2), за винятком випадків, коли , що спільне розподіл не є нормальним. Справді, як виростає велика, швидке зниження (одновимірний) нормального розподілу викликає більшу частину ймовірності сферически усічений багатовимірне нормальне групуватися поблизу поверхні -сфери (радіуса ). Отже, граничний розподіл повинен наближати масштабований симетричний розподіл Beta зосереджений у інтервалі . Це видно в попередньому розсіювачі, деXia=0an−1a((n−1)/2,(n−1)/2)(−a,a)a=3σє вже великим у двох вимірах: точки обмежують кільце ( -сфера) радіусом .2−13σ
Ось гістограми граничних розподілів з імітації розміру в вимірах з , (для яких апроксимуючий розподіл Beta є рівномірним):1053a=10σ=1(1,1)
Оскільки перші поля, описані у питанні, є нормальними (за побудовою), ця процедура не може бути правильною.n−1
Наступний R
код генерував першу цифру. Він сконструйований так, щоб паралельні кроки 1-3 для генерації . Він був змінений , щоб генерувати другу цифру шляхом зміни змінних , , , і , а потім видачі команди ділянку після того, як був створений.Ya
d
n
sigma
plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")
y
Покоління змінюється в коді для більш високого чисельного рішення: код фактично виробляє і використовує для обчислення .U1−UP
Той самий прийом моделювання даних згідно з передбачуваним алгоритмом, узагальнення його за допомогою гістограми та накладення гістограми може бути використаний для перевірки методу, описаного у питанні. Це підтвердить, що метод працює не так, як очікувалося.
a <- 7 # Lower threshold
d <- 11 # Dimensions
n <- 1e5 # Sample size
sigma <- 3 # Original SD
#
# The algorithm.
#
set.seed(17)
u.max <- pchisq((a/sigma)^2, d, lower.tail=FALSE)
if (u.max == 0) stop("The threshold is too large.")
u <- runif(n, 0, u.max)
rho <- sigma * sqrt(qchisq(u, d, lower.tail=FALSE))
x <- matrix(rnorm(n*d, 0, 1), ncol=d)
y <- t(x * rho / apply(x, 1, function(y) sqrt(sum(y*y))))
#
# Draw histograms of the marginal distributions.
#
h <- function(z) {
s <- sd(z)
hist(z, freq=FALSE, ylim=c(0, 1/sqrt(2*pi*s^2)),
main="Marginal Histogram",
sub="Best Normal Fit Superimposed")
curve(dnorm(x, mean(z), s), add=TRUE, lwd=2, col="Red")
}
par(mfrow=c(1, min(d, 4)))
invisible(apply(y, 1, h))
#
# Draw a nice histogram of the distances.
#
#plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010") # For figure 2
rho.max <- min(qchisq(1 - 0.001*pchisq(a/sigma, d, lower.tail=FALSE), d)*sigma,
max(rho), na.rm=TRUE)
k <- ceiling(rho.max/a)
hist(rho, freq=FALSE, xlim=c(0, rho.max),
breaks=seq(0, max(rho)+a, by=a/ceiling(50/k)))
#
# Superimpose the theoretical distribution.
#
dchi <- function(x, d) {
exp((d-1)*log(x) + (1-d/2)*log(2) - x^2/2 - lgamma(d/2))
}
curve((x >= a)*dchi(x/sigma, d) / (1-pchisq((a/sigma)^2, d))/sigma, add=TRUE,
lwd=2, col="Red", n=257)