하이퍼-엘 립소 이드 표면에서 균일하게 샘플링하는 방법 (일정한 Mahalanobis 거리)?


12

실제 다변량의 경우 평균에서 Mahalanobis 거리가 일정한 표면에서 점을 균일하게 샘플링하는 방법이 있습니까?

편집 : 이것은 방정식을 충족시키는 하이퍼 엘리스 포 이드 표면에서 균일하게 샘플링 지점으로 요약됩니다.

(xμ)TΣ1(xμ)=d2.

더 정확하게 말하면, "균일하게" 는 하이퍼-표면의 각 영역 요소 가 동일한 확률 질량을 포함하도록 샘플을 의미 합니다.dA


1
내가 틀렸다면 바로 고치세요 : "무작위 변수 주었을 때 , 에서 멀어진 주어진 Mahalanobis 거리 에서 점을 어떻게 균일하게 샘플링 할 수 있습니까?" c E [ X ]XcE[X]
Kevin Li

1
"균일하게"에 대한 적절한 정의가 필요하다고 생각합니다. 그 이유는 다음과 같습니다. 2 차원에서이 점 세트는 타원을 따라 있습니다. 같은 길이의 기회가 같거나 같은 각도의 기회가 같거나 변수가 표준화 될 때의 동일한 길이 가 같은 기회 또는 다른 방식으로 타원에서 표본을 추출 해야 합니까? 이 샘플링의 목표를 설명 할 수 있다면 요청하려는 내용을 알기에 충분한 정보를 얻을 수 있습니다.
whuber

1
구 표면에서 균일하게 샘플링 한 다음 타원체에 매핑하면 타원체에 균일 한 샘플이 제공되지 않습니다. 그래서 타원체 표면에서 균일하게 샘플링하는 방법이 필요합니다.
sachin vernekar

1
초 표면의 각 영역 요소 dA가 동일한 확률 질량을 포함한다는 의미에서 타원체 표면에 균일 한 샘플을 원하십니까?
Sextus Empiricus

1
왜,이 균일 한 샘플을 어떻게 그리고 어디에 적용 할 것입니까? 이러한 정보는 최상의 / 충분한 전략을 세우는 데 도움이 될 수 있습니다. 예를 들어, 다른 타원체 축이 크게 다르지 않은 경우 (1) 구에서의 샘플링, (2) 타원체로 압착, (3) 표면적 압착 속도를 계산하여 거부 샘플링을 사용할 수 있습니다. (4) 해당 비율의 역수에 따라 샘플을 거부합니다.
Sextus Empiricus

답변:


4

다른 타원체 축이 너무 다르지 않은 경우 거부 샘플링을 사용하는 것이 가능합니다 (차이가 크면 많이 거부하므로 실현 가능성이 떨어집니다)

  • (1) 초 구면에서의 표본
  • (2) 하이퍼-엘립 소이 드로 압착
  • (3) 표면적 압착 속도 계산
  • (4) 해당 비율에 따라 샘플을 거부합니다.

2D 예

예

set.seed(1)
#some matrix to transform n-sphere (in this case 2x2)
m <- matrix(c(1, 0.55, 0.55, 0.55), 2)

# sample multinomial with identity covariance matrix
x <- cbind(rnorm(3000, 0, 1), rnorm(3000, 0, 1))
l1 <- sqrt(x[,1]^2 + x[,2]^2)

# perpendicular vector
per <- cbind(x[,2], -x[,1])

# transform x
x <- x %*% m
# transform perpendicular vector (to see how the area transforms)
per2 <- per %*% m

# get onto unit-"sphere"/ellipsoid
x <- x/l1

# this is how the area contracted
contract <- sqrt(per2[,1]^2 + per2[,2]^2) / sqrt(per[,1]^2 + per[,2]^2)

# then this is how we should choose to reject samples 
p <- contract/max(contract)

# rejecting
choose <- which( rbinom(n=length(p), size=1, p=p) == 1)

#plotting
plot(x[1:length(choose), 1], x[1:length(choose), 2],
     xlim=c(-1.2, 1.2), ylim=c(-1.2, 1.2),
     xlab = expression(x[1]), ylab = expression(x[2]),
     bg=rgb(0, 0, 0, 0.01), cex=0.6, pch=21, col=rgb(0, 0, 0, 0.01))
title("squeezed uniform circle \n ")

#plotting
plot(x[choose,1], x[choose,2],
     xlim=c(-1.2, 1.2), ylim=c(-1.2, 1.2),
     xlab = expression(x[1]), ylab = expression(x[2]),
     bg=rgb(0, 0, 0, 0.01), cex=0.6, pch=21, col=rgb(0, 0, 0, 0.01))
title("squeezed uniform circle \n  with rejection sampling")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.