मैं 95% विश्वास अंतराल के दोहराया प्रयोगों की व्याख्या करने के लिए एक आर स्क्रिप्ट लिखने की कोशिश कर रहा हूं। मैंने पाया है कि यह उस अनुपात के अनुपात को कम कर देता है जिसमें एक अनुपात का वास्तविक जनसंख्या मान नमूने के 95% सीआई के भीतर समाहित होता है। कोई बड़ा अंतर नहीं है - लगभग 96% बनाम 95%, लेकिन फिर भी मुझे इसमें दिलचस्पी थी।
मेरा कार्य samp_nप्रायिकता के साथ बर्नौली वितरण से एक नमूना लेता है pop_p, और फिर prop.test()निरंतरता सुधार, या अधिक के साथ 95% विश्वास अंतराल की गणना करता है binom.test()। यदि सही जनसंख्या अनुपात pop_p95% 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% सीआई के भीतर होता है, 0.95 के बजाय 0.96 के करीब होता है।
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।