Я намагаюся написати сценарій 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()
Будь-які пропозиції?
times=100000
кілька разів і побачив той самий результат. Мені цікаво дізнатися, чи є у когось це пояснення. Код досить простий, що я впевнений, що помилки кодування немає. Крім того, один пробіг зtimes=1000000
дав.954931
в результаті.