Проблеми з імітаційним дослідженням повторних експериментів, що пояснюють довірчий інтервал 95% - де я помиляюся?


9

Я намагаюся написати сценарій R для імітації повторної інтерпретації експериментів 95-відсоткового довірчого інтервалу. Я виявив, що це завищує частку разів, коли справжня сукупність пропорції міститься в межах 95% вибірки вибірки. Не велика різниця - приблизно 96% проти 95%, але це мене все ж зацікавило.

Моя функція бере samp_nймовірність вибірки з розподілу Бернуллі з імовірністю pop_p, а потім обчислює довірчий інтервал 95% за prop.test()допомогою корекції безперервності, а точніше з binom.test(). Він повертає 1, якщо справжня частка населення pop_pміститься в межах 95% ІС. Я написав дві функції, одну, яка використовує 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% ІС зразка, ближче до 0,96, а не 0,95.

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в результаті.
Макрос

3
(+1) Але чому ви розраховуєте отримати саме 95%? Наприклад, Clopper Pearson гарантовано консервативний. Для вашогон і p, Я розумію, що CI повинен покривати справжнє значення 95,3648% часу.
кардинал

2
Для підтримки кардиналів коментарі точні біноміальні ймовірності є точними, оскільки вони базуються на точному розрахунку ймовірності, але вони не обов'язково дають точний рівень довіри. Це тому, що двочлен - це дискретний розподіл. Тож Clopper-Pearson вибирає кінцеву точку для інтервалу, щоб ви мали найбільшу ймовірність до рівня довіри на рівні або вище. Це також створює пилоподібну поведінку до силової функції точного біноміального тесту. Цей дивний, але базовий результат обговорюється в моїй роботі з Крістін Лю з американського статистику (2002).
Майкл Р. Черник

1
Деталі на моєму документі за цим посиланням: citeulike.org/user/austin987/article/7571878
Michael R. Chernick

3
Точні двочлени CI є "точними", оскільки їх фактична продуктивність дорівнює їх номінальній продуктивності, а не тому, що розрахунок ймовірності "точний"! Треба розуміти, що a1-αCI повинен мати принаймні a1-αшанс покрити істинний параметр, незалежно від того, що лежить в основі розподілу (у межах передбачуваної родини). "Точне" означає, що мінімальна кількість цих покриттів, взятих на всю сімейство розподілів, дорівнює 1-α. Для цього фактичне покриття для багатьох можливих розподілів часто повинно бути більшим, ніж1-α.
whuber

Відповіді:


9

Ти не помилишся. Просто неможливо побудувати довірчий інтервал для біноміальної пропорції, яка завжди має покриття рівно 95% через дискретний характер результату. Інтервал Clopper-Pearson ("точний") гарантовано охоплює щонайменше 95%. Інші інтервали мають середнє покриття в середньому до 95% , якщо в середньому перевищувати справжню частку.

Я схильний віддавати перевагу інтервалу Джеффріса, оскільки він охоплює близько 95% в середньому і (на відміну від інтервалу оцінок Вілсона) приблизно однакове охоплення в обох хвостах.

Маючи лише невелику зміну коду у питанні, ми можемо обчислити точне покриття без моделювання.

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 -Встановіть Моніку

2
@Glen_b Мені давно цікаво заперечення проти випадкових рішень. Я вважаю, що Джек Кіфер зауважив, що якщо ви все в порядку використовуєте рандомізацію для збору ваших зразків, у вас не повинно виникнути жодних проблем використовувати його в процесі прийняття рішення. Якщо вам потрібна процедура прийняття рішення, яка може бути відтворена, задокументована і важко піддається обробці, просто генеруйте будь-які випадкові значення, необхідні для рандомізованого інтервалу, перш ніж збирати дані - зробіть це частиною проекту.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.