Tôi đang cố gắng viết một tập lệnh R để mô phỏng việc diễn giải các thí nghiệm lặp đi lặp lại về khoảng tin cậy 95%. Tôi đã thấy rằng nó đánh giá quá cao tỷ lệ các lần trong đó giá trị dân số thực của tỷ lệ được chứa trong 95% CI của mẫu. Không phải là một sự khác biệt lớn - khoảng 96% so với 95% nhưng điều này dù sao cũng khiến tôi quan tâm.
Hàm của tôi lấy một mẫu samp_n
từ phân phối Bernoulli với xác suất pop_p
và sau đó tính khoảng tin cậy 95% bằng prop.test()
cách sử dụng hiệu chỉnh liên tục hoặc chính xác hơn là với binom.test()
. Nó trả về 1 nếu tỷ lệ dân số thực pop_p
được chứa trong 95% CI. Tôi đã viết hai hàm, một hàm sử dụng prop.test()
và một hàm sử dụng binom.test()
và có kết quả tương tự với cả hai:
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)
}
}
Tôi đã thấy rằng khi bạn lặp lại thí nghiệm vài nghìn lần, tỷ lệ số lần pop_p
trong phạm vi 95% CI của mẫu gần với 0,96 thay vì 0,95.
set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562
Suy nghĩ của tôi cho đến nay tại sao điều này có thể là trường hợp
- mã của tôi sai (nhưng tôi đã kiểm tra nó rất nhiều)
- Ban đầu tôi nghĩ rằng đây là do vấn đề gần đúng bình thường, nhưng sau đó đã tìm thấy
binom.test()
Bất kỳ đề xuất?
times=100000
một vài lần khác nhau và thấy kết quả tương tự. Tôi tò mò muốn xem có ai có lời giải thích cho việc này không. Mã này đủ đơn giản mà tôi khá chắc chắn không có lỗi mã hóa. Ngoài ra, một lần chạy thử vớitimes=1000000
cho.954931
là kết quả.