반복 실험에 대한 시뮬레이션 연구의 문제점으로 95 % 신뢰 구간에 대한 설명-어디에서 잘못 되었습니까?


9

95 % 신뢰 구간의 반복 실험 해석을 시뮬레이션하기 위해 R 스크립트를 작성하려고합니다. 비율의 실제 모집단 값이 표본의 95 % CI에 포함되어있는 시간의 비율을 과대 평가하는 것으로 나타났습니다. 큰 차이는 아니지만 약 96 % 대 95 %이지만 그럼에도 불구하고 관심이 있습니다.

내 함수는 samp_n확률로 Bernoulli 분포에서 표본을 추출한 pop_p다음 prop.test()연속성 보정 을 사용하거나보다 정확하게를 사용하여 95 % 신뢰 구간을 계산합니다 binom.test(). 실제 모집단 비율 pop_p이 95 % CI에 포함되어 있으면 1을 반환합니다 . 두 가지 기능을 사용했습니다. 하나는 사용 prop.test()하고 다른 하나는 사용 binom.test()하고 비슷한 결과를 얻었습니다.

in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses normal approximation to calculate confidence interval
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- prop.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2]
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses Clopper and Pearson method
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- binom.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2] 
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
 }

실험을 몇 천 번 반복 pop_p하면 표본의 95 % CI 내에있는 시간의 비율 이 0.95가 아니라 0.96에 가깝다는 것을 알았습니다.

set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562

이것이 왜 그런지에 대한 나의 생각은

  • 내 코드가 잘못되었습니다 (그러나 많이 확인했습니다)
  • 처음에는 이것이 정상적인 근사 문제로 인한 것이라고 생각했지만 binom.test()

어떤 제안?


(+1) 그건 그렇고, times=100000몇 번 다른 시간으로 코드를 다시 실행 하고 동일한 결과를 보았습니다. 누군가 이것에 대한 설명이 있는지 궁금합니다. 코드는 충분히 간단하여 코딩 오류가 없다고 확신합니다. 또한, 하나 개의 실행과는 times=1000000.954931결과로.
Macro

3
(+1) 그러나 왜 정확히 95 %를 기대합니까? 예를 들어 Clopper Pearson은 보수적입니다. 당신을 위해CI가 시간의 95.3648 %를 참 아야한다는 것을 알았습니다.
추기경

2
카디널을 지원하기 위해서는 정확한 확률 계산을 기반으로하지만 정확한 신뢰 수준을 제공 할 필요는 없으므로 정확한 이항 확률은 정확합니다. 이항이 이산 분포이기 때문입니다. 따라서 Clopper-Pearson은 구간의 끝점을 선택하여 신뢰 수준 또는 그 이상의 신뢰도에 가장 가까운 확률을 갖습니다. 또한 정확한 이항 검정의 검정력 함수에 대해 톱니 모양의 동작을 생성합니다. 이 홀수이지만 기본적인 결과는 미국 통계 학자 (2002)의 Christine Liu와 함께 제 논문에서 논의합니다.
Michael R. Chernick

1
이 링크에서 내 논문에 대한 세부 사항 : citeulike.org/user/austin987/article/7571878
Michael R. Chernick

3
정확한 이항 CI는 확률 계산이 "정확한"것이 아니라 실제 성능이 공칭 성능과 같기 때문에 "정확한"것입니다! 그것은 이해되어야한다1αCI 있어야합니다 적어도1α기본 분포가 무엇인지에 상관없이 (가정 패밀리 내에서) 실제 모수를 포함 할 가능성 . 이 모든 적용 범위의 상하 한이, 분포의 가족 전체를 점령하는 것이 "정확한"수단 같음 1α. 이를 위해서는 가능한 많은 분포에 대한 실제 적용 범위 종종1α.
whuber

답변:


9

당신은 잘못되지 않습니다. 간단하게 구성 할 수 없습니다 이항 비율에 대한 신뢰 구간 항상 의 범위가 정확히 인한 결과의 개별 특성으로 95 %를. Clopper-Pearson ( '정확한') 간격은 최소 95 %의 범위를 보장합니다 . 다른 구간은 실제 비율 에 대해 평균 일 때 평균 95 % 가까운 범위를가 집니다.

Jeffreys 간격은 평균 95 %에 가깝고 (Wilson 점수 간격과 달리) 두 꼬리에서 거의 같은 적용 범위를 갖기 때문에 Jeffreys 간격을 선호합니다.

문제의 코드가 약간만 변경되면 시뮬레이션없이 정확한 적용 범위를 계산할 수 있습니다.

p <- 0.3
n <- 1000

# Normal test
CI <- sapply(0:n, function(m) prop.test(m,n)$conf.int[1:2])
caught.you <- which(CI[1,] <= p & p <= CI[2,])
coverage.pr <- sum(dbinom(caught.you - 1, n, p))

# Clopper-Pearson
CI <- sapply(0:n, function(m) binom.test(m,n)$conf.int[1:2])
caught.you.again <- which(CI[1,] <= p & p <= CI[2,])
coverage.cp <- sum(dbinom(caught.you.again - 1, n, p))

결과는 다음과 같습니다.

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087

1
" 결과의 불 연속적 특성으로 인해 항상 정확히 95 %의 범위를 갖는 이항 비율에 대한 신뢰 구간을 구성하는 것은 불가능 합니다. . (적어도 그렇게 수는 없지만, 일반적으로 하지 말아야 할 수도 있습니다 .)
Glen_b-복지국 Monica

2
@Glen_b 나는 무작위 결정에 대한 반대에 대해 오랫동안 궁금했다. Jack Kiefer는 무작위 추출을 사용하여 샘플을 수집하는 것이 좋다면 의사 결정 과정에서 샘플을 사용하는 데 아무런 문제가 없다고 말했습니다. 재현 가능하고 문서화되어 있고 속임수가 어려운 의사 결정 절차가 필요한 경우 데이터 수집 하기 전에 무작위 간격에 필요한 임의의 값을 생성 하여 디자인의 일부로 만드십시오.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.