Я намагаюся написати сценарій 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в результаті.