반복 실험에 대한 시뮬레이션 연구의 문제점으로 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.