Henry가 지적했듯이 정규 분포를 가정하고 있으며 데이터가 정규 분포를 따르는 경우에는 완벽하게 정상이지만 정규 분포를 가정 할 수 없으면 잘못됩니다. 아래에서는 데이터 포인트 와 함께 밀도 추정치가 주어지면 알 수없는 분포에 사용할 수있는 두 가지 접근 방식에 대해 설명 합니다.x
px
가장 먼저 고려해야 할 것은 구간을 사용하여 정확하게 요약하려는 것입니다. 예를 들어, Quantile을 사용하여 얻은 구간에 관심이있을 수 있지만 분포의 고밀도 영역 ( 여기 또는 여기 참조)에도 관심이있을 수 있습니다 . 이것은 대칭적이고 단조로운 분포와 같은 단순한 경우에 큰 차이를 만들어서는 안되지만, 더 "복잡한"분포에는 차이가 있습니다. 일반적으로 Quantile은 중간 ( 분포 의 중간 주위에 집중된 확률 질량을 포함하는 간격을 제공 하지만 가장 높은 밀도 영역은 모드 주변 영역입니다.100α%분포의. 아래 그림의 두 플롯을 비교하면 분포가 수직으로 "잘려지고"밀도가 높은 영역이 수평으로 "잘라내"게됩니다.
다음으로 고려해야 할 것은 분포에 관한 불완전한 정보가 있다는 사실을 다루는 방법입니다 (연속 분포에 대해 이야기하고 있다고 가정하면 함수가 아니라 많은 포인트 만 있음). 그것에 대해 할 수있는 일은 "있는 그대로"값을 가져 오거나 "보간"값을 얻기 위해 일종의 보간 또는 스무딩을 사용하는 것입니다.
한 가지 방법은 선형 보간 ( ?approxfun
R 참조 )을 사용하거나 스플라인과 같은 더 부드러운 것을 사용하는 것입니다 ( ?splinefun
R 참조 ). 이러한 접근 방식을 선택하면 보간 알고리즘에 데이터에 대한 도메인 지식이 없으며 0 이하의 값과 같은 잘못된 결과를 반환 할 수 있음을 기억해야합니다.
# grid of points
xx <- seq(min(x), max(x), by = 0.001)
# interpolate function from the sample
fx <- splinefun(x, px) # interpolating function
pxx <- pmax(0, fx(xx)) # normalize so prob >0
고려할 수있는 두 번째 방법은 커널 밀도 / 혼합 분포를 사용하여 보유한 데이터를 사용하여 분포를 근사화하는 것입니다. 여기서 까다로운 부분은 최적의 대역폭을 결정하는 것입니다.
# density of kernel density/mixture distribution
dmix <- function(x, m, s, w) {
k <- length(m)
rowSums(vapply(1:k, function(j) w[j]*dnorm(x, m[j], s[j]), numeric(length(x))))
}
# approximate function using kernel density/mixture distribution
pxx <- dmix(xx, x, rep(0.4, length.out = length(x)), px) # bandwidth 0.4 chosen arbitrary
다음으로 관심 구간을 찾으십시오. 수치 적으로 또는 시뮬레이션으로 진행할 수 있습니다.
1a) Quantile 간격을 얻기위한 샘플링
# sample from the "empirical" distribution
samp <- sample(xx, 1e5, replace = TRUE, prob = pxx)
# or sample from kernel density
idx <- sample.int(length(x), 1e5, replace = TRUE, prob = px)
samp <- rnorm(1e5, x[idx], 0.4) # this is arbitrary sd
# and take sample quantiles
quantile(samp, c(0.05, 0.975))
1b) 고밀도 영역을 얻기위한 샘플링
samp <- sample(pxx, 1e5, replace = TRUE, prob = pxx) # sample probabilities
crit <- quantile(samp, 0.05) # boundary for the lower 5% of probability mass
# values from the 95% highest density region
xx[pxx >= crit]
2a) 수치 적으로 Quantile 찾기
cpxx <- cumsum(pxx) / sum(pxx)
xx[which(cpxx >= 0.025)[1]] # lower boundary
xx[which(cpxx >= 0.975)[1]-1] # upper boundary
2b) 수치 적으로 가장 높은 밀도 영역 찾기
const <- sum(pxx)
spxx <- sort(pxx, decreasing = TRUE) / const
crit <- spxx[which(cumsum(spxx) >= 0.95)[1]] * const
아래 그림에서 볼 수 있듯이, 단봉이 아닌 대칭 분포의 경우 두 방법 모두 동일한 간격을 반환합니다.
물론 와 같은 중심 값 주위에서 간격 을 찾고 적절한 를 찾기 위해 일종의 최적화를 사용할 수도 있습니다 . 그러나 위에서 설명한 두 가지 접근 방식이 더 일반적으로 사용되고보다 직관적 인 것으로 보입니다.100α%Pr(X∈μ±ζ)≥αζ