การกระจายตัวแบบหลายตัวแปรปกติของนั้นสมมาตรเป็นทรงกลม มีการกระจายของคุณขอตัดทอนรัศมีด้านล่างที่ เนื่องจากเกณฑ์นี้ขึ้นอยู่กับความยาวของเท่านั้นการกระจายที่ถูกตัดทอนจึงยังคงสมมาตรเป็นทรงกลม เนื่องจากเป็นอิสระจากมุมทรงกลมและมีการกระจายคุณจึงสามารถสร้างค่าจากการกระจายตัดทอนในเพียงไม่กี่ขั้นตอนง่ายๆ:Xρ=||X||2aXρX/||X||ρσχ(n)
สร้าง_n)X∼N(0,In)
สร้างเป็นรากของการกระจายตัดทอนที่ 2Pχ2(d)(a/σ)2
ให้.Y=σPX/||X||
ในขั้นตอนที่ 1จะได้รับเป็นลำดับของเข้าใจอิสระของตัวแปรปกติมาตรฐานXd
ในขั้นตอนที่ 2,ถูกสร้างขึ้นอย่างง่ายดายโดยการกลับฟังก์ชัน quantileของการ : สร้างตัวแปรชุดสนับสนุนในช่วง (ของควอไทล์) ระหว่างและและชุด(U)}PF−1χ2(d)UF((a/σ)2)1P=F(U)−−−−−√
นี่คือ histogram ของความเข้าใจอิสระดังกล่าวของสำหรับในมิติตัดทอนไว้ด้านล่างใน 7 ใช้เวลาประมาณหนึ่งวินาทีในการสร้างซึ่งยืนยันถึงประสิทธิภาพของอัลกอริทึม105σPσ=3n=11a=7
เส้นโค้งสีแดงคือความหนาแน่นของที่ถูกตัดทอนการกระจายปรับขนาดโดย 3 การจับคู่อย่างใกล้ชิดกับฮิสโตแกรมเป็นหลักฐานของความถูกต้องของเทคนิคนี้χ(11)σ=3
เพื่อให้ได้สัญชาตญาณสำหรับการตัดให้พิจารณากรณี ,ในมิติ นี่คือรูปแบบกระจายของเทียบกับ (สำหรับการรับรู้อิสระ ) มันแสดงให้เห็นชัดเจนว่าหลุมที่รัศมี :a=3σ=1n=2Y2Y1104a
สุดท้ายโปรดทราบว่า (1) ส่วนประกอบต้องมีการแจกแจงที่เหมือนกัน (เนื่องจากสมมาตรทรงกลม) และ (2) ยกเว้นเมื่อการกระจายทั่วไปนั้นไม่ปกติ ในความเป็นจริงเติบโตขนาดใหญ่ลดลงอย่างรวดเร็วของ (univariate) การกระจายปกติเป็นสาเหตุส่วนใหญ่ของความน่าจะเป็นของการตัดทอนทรงกลมหลายตัวแปรปกติคลัสเตอร์ใกล้พื้นผิวของ -sphere (รัศมี) การกระจายร่อแร่ต้องดังนั้นประมาณปรับขนาดเบต้าสมมาตรการกระจายความเข้มข้นในช่วงเวลาเป็น) สิ่งนี้ปรากฏชัดใน scatterplot หน้าที่แล้วโดยที่Xia=0an−1a((n−1)/2,(n−1)/2)(−a,a)a=3σมีขนาดใหญ่อยู่แล้วในสองมิติ: จุดบรรยายแหวน (ก -sphere) รัศมี32−13σ
นี่คือฮิสโทแกรมของการแจกแจงส่วนขอบจากการจำลองขนาดในมิติด้วย , (ซึ่งการกระจายBetaโดยประมาณมีความสม่ำเสมอ):1053a=10σ=1(1,1)
เนื่องจากระยะขอบแรกของขั้นตอนที่อธิบายไว้ในคำถามเป็นเรื่องปกติ (โดยการก่อสร้าง) ขั้นตอนนั้นจึงไม่สามารถแก้ไขได้n−1
R
รหัสต่อไปนี้สร้างตัวเลขแรก มันถูกสร้างขึ้นมาเพื่อทำตามขั้นตอนที่ 1-3 คู่ขนานสำหรับการสร้างYมันได้รับการแก้ไขเพื่อสร้างรูปที่สองโดยตัวแปรที่เปลี่ยนแปลง, , และแล้วการออกคำสั่งพล็อตหลังจากที่ถูกสร้างขึ้นYa
d
n
sigma
plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")
y
รุ่นของมีการแก้ไขในรหัสสำหรับการแก้ปัญหาที่เป็นตัวเลขที่สูงขึ้น: รหัสจริงสร้างและการใช้งานที่คำนวณPU1−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)