Phân phối chuẩn đa biến đối xứng hình cầu. Phân phối mà bạn tìm kiếm cắt ngắn bán kính bên dưới tại . Bởi vì tiêu chí này chỉ phụ thuộc vào độ dài của , phân phối bị cắt cụt vẫn đối xứng hình cầu. Vì độc lập với góc hình cầuvà có phân phối , do đó bạn có thể tạo các giá trị từ phân phối bị cắt chỉ bằng một vài bước đơn giản:ρ = | | X | | 2Xρ=||X||2XaXX / | | X | | ρρX/||X||χ ( n )ρσχ(n)
Tạo .X∼N(0,In)
Tạo là căn bậc hai của phân phối bị cắt ở .P( một / σ ) 2χ2(d)(a/σ)2
Đặt.Y=σPX/||X||
Trong bước 1, thu được dưới dạng một chuỗi các thực hiện độc lập của một biến thông thường tiêu chuẩn.dXd
Trong bước 2, dễ dàng được tạo bằng cách đảo ngược hàm lượng tử của phân phối : tạo một biến thống nhất được hỗ trợ trong phạm vi (của lượng tử) giữa và và đặt .F - 1 χ 2 ( d ) U FPF−1χ2(d)U1 P = √F((a/σ)2)1P=F(U)−−−−−√
Dưới đây là biểu đồ gồm nhận thức độc lập như vậy của cho trong nguyên, được cắt dưới đây tại . Phải mất khoảng một giây để tạo ra, chứng thực tính hiệu quả của thuật toán. σ P105σPσ=3một = 7n=11a=7
Đường cong màu đỏ là mật độ của phân phối bị cắt bớt được chia tỷ lệ theo . Sự phù hợp chặt chẽ của nó với biểu đồ là bằng chứng về tính hợp lệ của kỹ thuật này.σ = 3χ(11)σ=3
Để có được trực giác cho việc cắt ngắn, hãy xem xét trường hợp , trong nguyên. Đây là một biểu đồ phân tán của so với (cho hiện thực độc lập). Nó cho thấy rõ lỗ ở bán kính :σ = 1 n = 2 Y 2a=3σ=1n=2Y2Y1 một104a
Cuối cùng, lưu ý rằng (1) các thành phần phải có các phân phối giống hệt nhau (do tính đối xứng hình cầu) và (2) ngoại trừ khi , phân phối chung đó không bình thường. Trong thực tế, như phát triển lớn, sự sụt giảm nhanh chóng của (đơn biến) phân phối bình thường gây ra hầu hết các khả năng của đa biến hình cầu cắt ngắn bình thường chụm lại gần bề mặt của -sphere (bán kính ). Do đó, phân phối biên phải xấp xỉ phân phối Beta đối xứng tập trung trong khoảng . Điều này là rõ ràng trong biểu đồ phân tán trước, trong đó a = 0 a n - 1 a ( ( n - 1 ) / 2 , ( n - 1 ) / 2 ) ( - a , a ) a = 3 σ 2 - 1Xia=0an−1a((n−1)/2,(n−1)/2)(−a,a)a=3σđã lớn ở hai chiều: các điểm giới hạn một vòng (một không gian ) bán kính .2−13σ
Dưới đây là biểu đồ của các phân phối biên từ mô phỏng kích thước trong chiều với , (trong đó phân phối Beta gần đúng ):1053a=10σ=1(1,1)
Vì các lề đầu tiên của quy trình được mô tả trong câu hỏi là bình thường (bằng cách xây dựng), quy trình đó không thể chính xác.n−1
Đoạn R
mã sau tạo ra hình đầu tiên. Nó được xây dựng để bước song song 1-3 để tạo ra . Nó đã được sửa đổi để tạo ra các con số thứ hai bằng cách thay đổi biến , , , và rồi ban hành lệnh cốt truyện sau khi được tạo ra.Ya
d
n
sigma
plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")
y
Thế hệ của được sửa đổi trong mã cho độ phân giải cao hơn số: mã thực sự tạo và việc sử dụng đó để tính toán .U1−UP
Kỹ thuật mô phỏng dữ liệu tương tự theo một thuật toán giả định, tóm tắt nó bằng biểu đồ và áp dụng biểu đồ có thể được sử dụng để kiểm tra phương pháp được mô tả trong câu hỏi. Nó sẽ xác nhận rằng phương pháp không hoạt động như mong đợi.
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)