Distribusi normal multivariat adalah simetris berbentuk bola. Distribusi yang Anda cari memotong radius di bawah pada . Karena kriteria ini hanya bergantung pada panjang , distribusi terpotong tetap simetris bulat. Karena tidak tergantung pada sudut bulatdan memiliki distribusi , karena itu Anda dapat menghasilkan nilai-nilai dari distribusi dipotong hanya dalam beberapa langkah sederhana:ρ = | | X | | 2 a X ρ X / | | X | | ρXρ=||X||2aXρX/||X||χ ( n )ρσχ(n)
Hasilkan .X∼N(0,In)
Hasilkan sebagai akar kuadrat dari a terpotong di .χ 2 ( d ) ( a / σ ) 2Pχ2(d)(a/σ)2
Biarkan.Y=σPX/||X||
Pada langkah 1, diperoleh sebagai urutan realisasi independen dari variabel normal standar.dXd
Pada langkah 2, adalah mudah dihasilkan dengan membalik fungsi kuantil dari Distribusi: menghasilkan variabel seragam didukung dalam kisaran (dari quantiles) antara dan dan set .PF−1χ2(d)UF((a/σ)2)1P=F(U)−−−−−√
Berikut adalah histogram realisasi independen seperti σ P untuk σ = 3 dalam n = 11 dimensi, terpotong di bawah pada a = 7 . Butuh sekitar satu detik untuk menghasilkan, membuktikan efisiensi algoritma.105σPσ=3n=11a=7
Kurva merah adalah kepadatan distribusi terpotong diskalakan dengan σ = 3 . Kecocokan yang dekat dengan histogram adalah bukti validitas teknik ini.χ(11)σ=3
Untuk mendapatkan intuisi untuk pemotongan, pertimbangkan case , σ = 1 in n = 2 dimensi. Berikut adalah sebar dari Y 2 terhadap Y 1 (untuk 10 4 realisasi independen). Ini jelas menunjukkan lubang di jari - jari a :a=3σ=1n=2Y2Y1104a
Akhirnya, perhatikan bahwa (1) komponen harus memiliki distribusi yang identik (karena simetri bola) dan (2) kecuali ketika a = 0 , distribusi umum tersebut tidak Normal. Bahkan, sebagai sebuah tumbuh besar, penurunan yang cepat dari (univariat) distribusi normal menyebabkan sebagian besar probabilitas multivariat berbentuk bola dipotong yang normal untuk cluster dekat permukaan n - 1 -sphere (jari-jari a ). Distribusi marginal karenanya harus mendekati Beta simetris berskala ( ( n - 1 ) / 2 , ( n -Xia=0an−1a distribusi terkonsentrasi dalam interval ( - a , a ) . Ini terlihat dalam sebar sebelumnya, di mana a = 3 σ sudah besar dalam dua dimensi: titik membatasi cincin (a 2 - 1- bola) dari jari-jari 3 σ .((n−1)/2,(n−1)/2)(−a,a)a=3σ2−13σ
Berikut adalah histogram distribusi marjinal dari simulasi ukuran dalam 3 dimensi dengan a = 10 , σ = 1 (untuk yang mendekati Beta ( 1 , 1 ) distribusi seragam):1053a=10σ=1(1,1)
Karena marjinal pertama dari prosedur yang dijelaskan dalam pertanyaan adalah normal (berdasarkan konstruksi), prosedur tersebut tidak dapat benar.n−1
R
Kode berikut menghasilkan angka pertama. Hal ini dibangun untuk langkah paralel 1-3 untuk menghasilkan . Hal ini dimodifikasi untuk menghasilkan angka kedua dengan mengubah variabel , , , dan kemudian mengeluarkan perintah plot setelah dihasilkan.Ya
d
n
sigma
plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")
y
Generasi dimodifikasi dalam kode untuk resolusi numerik yang lebih tinggi: kode benar-benar menghasilkan 1 - U dan menggunakan itu untuk menghitung P .U1−UP
Teknik yang sama dalam mensimulasikan data menurut algoritma yang diduga, meringkasnya dengan histogram, dan melapiskan histogram dapat digunakan untuk menguji metode yang dijelaskan dalam pertanyaan. Ini akan mengkonfirmasi bahwa metode tidak berfungsi seperti yang diharapkan.
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)