Wielowymiarowy rozkład normalny jest sferycznie symetryczny. Poszukiwany rozkład obcina promień ρ = | | X | | 2 poniżej o . Ponieważ to kryterium zależy tylko od długości X , skrócony rozkład pozostaje sferycznie symetryczny. Ponieważ ρ jest niezależne od sferycznego kąta X / | | X | | i ρXρ=||X||2aXρX/||X|| marozkład χ ( n ) , dlatego możesz wygenerować wartości z rozkładu obciętego w kilku prostych krokach:ρσχ(n)
Wygeneruj .X∼N(0,In)
Wygeneruj jako pierwiastek kwadratowy rozkładu χ 2 ( d ) obciętego w ( a / σ ) 2 .Pχ2(d)(a/σ)2
Niech .Y=σPX/||X||
W kroku 1 jest uzyskiwany jako sekwencja d niezależnych realizacji standardowej zmiennej normalnej.Xd
W etapie 2, jest łatwo wytwarzany przez odwracanie odwrotna dystrybuanta F - 1 o × 2 ( d ) rozkład: wygenerować jednorodną zmienna U obsługiwane w zakresie (kwantyli) pomiędzy F ( ( / Ď ) 2 ) i 1 i ustaw P = √PF−1χ2(d)UF((a/σ)2)1 .P=F(U)−−−−−√
Oto histogram takich niezależnych realizacji σ P dla σ = 3 w n = 11 wymiarów, skrócony poniżej przy a = 7 . Wygenerowanie zajęło około sekundy, co świadczy o wydajności algorytmu.105σPσ=3n=11a=7
Czerwona krzywa jest gęstością skróconego rozkładu skalowanego przez σ = 3 . Jego ścisłe dopasowanie do histogramu świadczy o ważności tej techniki.χ(11)σ=3
Aby uzyskać intuicję dotyczącą obcięcia, rozważ przypadek , σ = 1 in n = 2 wymiary. Oto wykres rozrzutu Y 2 w stosunku do Y 1 (dla 10 4 niezależnych realizacji). Wyraźnie pokazuje otwór w promieniu a :a=3σ=1n=2Y2Y1104a
Na koniec zauważ, że (1) komponenty muszą mieć identyczne rozkłady (ze względu na symetrię sferyczną) i (2), z wyjątkiem sytuacji, gdy a = 0 , ten wspólny rozkład nie jest normalny. W rzeczywistości, jak rośnie duża, szybki spadek (jednoczynnikowa) rozkładu normalnego powoduje, że większość prawdopodobieństwa sferycznie obcięty wielowymiarowa normalne klaster w pobliżu powierzchni z n - 1 -sphere (o promieniu A ). Dystrybucja krańcowa musi zatem być zbliżona do skalowanej symetrycznej wersji Beta ( ( n - 1 ) / 2 , ( n -Xia=0an−1a. rozkład skoncentrowany w przedziale ( - a , a ) . Jest to widoczne w poprzednim wykresie rozrzutu, w którym a = 3 σ jest już duży w dwóch wymiarach: punkty otaczają pierścień (sfera 2 - 1 ) o promieniu 3 σ((n−1)/2,(n−1)/2)(−a,a)a=3σ2−13σ
Oto histogramy krańcowych z symulacji rozkładu wielkości w 3 wymiarach z a = 10 , σ = 1 (dla których aproksymującego beta ( 1 , 1 ) Rozkład jest jednolita)1053a=10σ=1(1,1)
Ponieważ pierwsze marginesów procedury opisanej w pytaniu są normalne (z założenia), procedura ta nie może być poprawna.n−1
Poniższy R
kod wygenerował pierwszą cyfrę. Jest on zbudowany z równoległych etapów 1-3 do wytwarzania . Został zmodyfikowany w celu wytworzenia drugiego postać zmieniając zmiennych , , i i wydający polecenia działki poYa
d
n
sigma
plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")
y
został wygenerowany.
Generowanie jest modyfikowane w kodzie w celu uzyskania wyższej rozdzielczości numerycznej: kod faktycznie generuje 1 - U i używa go do obliczenia PU1−UP .
Tę samą technikę symulowania danych zgodnie z domniemanym algorytmem, podsumowania ich za pomocą histogramu i nałożenia histogramu można zastosować do przetestowania metody opisanej w pytaniu. Potwierdzi to, że metoda nie działa zgodnie z oczekiwaniami.
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)