95 % 신뢰할 수있는 간격을 찾는 방법은 무엇입니까?


13

다음 사후 분포의 95 % 신뢰할 수있는 간격을 계산하려고합니다. R에서 함수를 찾을 수 없지만 아래 방법이 맞습니까?

x <- seq(0.4,12,0.4)
px <-  c(0,0, 0, 0, 0, 0, 0.0002, 0.0037, 0.018, 0.06, 0.22 ,0.43, 0.64,0.7579, 0.7870, 0.72, 0.555, 0.37, 0.24, 0.11, 0.07, 0.02, 0.009, 0.005, 0.0001, 0,0.0002, 0, 0, 0)
plot(x,px, type="l")
mm <- sum(x*px)/sum(px)
var <- (sum((x)^2*px)/sum(px)) - (mm^2)
cat("95% credible interval: ", round(mm -1.96*sqrt(var),3), "-", round(mm + 1.96*sqrt(var),3),"\n")

1
실제로는 아닙니다-당신은 정규 분포와 평균에 대해 동일한 간격을 가정했으며,이 맥락에서 특히 정당화 될 수는 없습니다. 실제로 , 이것은 불연속 분포라고 가정하고 확률의 약 를 포착 했으며 를 얻으려면 구간을 약간 넓혀야합니다 . 이산 분포 인 경우 고밀도 영역을 사용하는 것이 . 또는 아래에있을 확률이 이하가되고 그 위에있을 확률이 이하가 . 95 % [ 4.494%95%2.5 % 2.5 % [ 4.4 , 8.0 ][4.4,8.0]2.5%2.5%[4.4,8.0]
Henry

답변:


24

Henry가 지적했듯이 정규 분포를 가정하고 있으며 데이터가 정규 분포를 따르는 경우에는 완벽하게 정상이지만 정규 분포를 가정 할 수 없으면 잘못됩니다. 아래에서는 데이터 포인트 와 함께 밀도 추정치가 주어지면 알 수없는 분포에 사용할 수있는 두 가지 접근 방식에 대해 설명 합니다.xpx

가장 먼저 고려해야 할 것은 구간을 사용하여 정확하게 요약하려는 것입니다. 예를 들어, Quantile을 사용하여 얻은 구간에 관심이있을 수 있지만 분포의 고밀도 영역 ( 여기 또는 여기 참조)에도 관심이있을 수 있습니다 . 이것은 대칭적이고 단조로운 분포와 같은 단순한 경우에 큰 차이를 만들어서는 안되지만, 더 "복잡한"분포에는 차이가 있습니다. 일반적으로 Quantile은 중간 ( 분포 의 중간 주위에 집중된 확률 질량을 포함하는 간격을 제공 하지만 가장 높은 밀도 영역은 모드 주변 영역입니다.100α%분포의. 아래 그림의 두 플롯을 비교하면 분포가 수직으로 "잘려지고"밀도가 높은 영역이 수평으로 "잘라내"게됩니다.

Quantiles vs HDR 간격

다음으로 고려해야 할 것은 분포에 관한 불완전한 정보가 있다는 사실을 다루는 방법입니다 (연속 분포에 대해 이야기하고 있다고 가정하면 함수가 아니라 많은 포인트 만 있음). 그것에 대해 할 수있는 일은 "있는 그대로"값을 가져 오거나 "보간"값을 얻기 위해 일종의 보간 또는 스무딩을 사용하는 것입니다.

한 가지 방법은 선형 보간 ( ?approxfunR 참조 )을 사용하거나 스플라인과 같은 더 부드러운 것을 사용하는 것입니다 ( ?splinefunR 참조 ). 이러한 접근 방식을 선택하면 보간 알고리즘에 데이터에 대한 도메인 지식이 없으며 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μ±ζ)αζ


주어진 정보 (둘 중 하나의 방법을 사용하여)에서 직접 Quantile을 간단히 계산할 수있을 때 왜 샘플링합니까?
whuber

1
@whuber는 싸고 쉬우므로 내일 비 시뮬레이션 계산을 설명하도록 편집하겠습니다.
Tim

안녕 팀, 이것은 매우 도움이됩니다. 또한 징계 조치를 취하는 것이 옳지 않습니까? (낮은 <-x [which (as.logical (diff (cumsum (px) / sum (px)> 0.025)))]) (위 <-x [which (as.logical (diff (cumsum (px) / sum) (px) <0.975)))))
user19758

@ user19758 편집 내용을 확인하십시오.
Tim

+1 추가 설명, 일러스트레이션 및 코드는이 사이트의 답변에 대한 높은 표준을 설정했습니다. 감사합니다!
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.