আমি একটি 95% আত্মবিশ্বাসের ব্যবধানের পুনরাবৃত্ত পরীক্ষা-নিরীক্ষার অনুকরণের জন্য একটি আর স্ক্রিপ্ট লেখার চেষ্টা করছি। আমি খুঁজে পেয়েছি যে এটি সময়ের যে অনুপাতের সত্য জনসংখ্যার মান নমুনার 95% সিআই-র মধ্যে থাকে তার চেয়ে বেশি অনুপাতকে গুরুত্ব দেয়। একটি বড় পার্থক্য নয় - প্রায় 96% বনাম 95% তবে তবুও এটি আমাকে আগ্রহী।
আমার ফাংশনটি samp_n
সম্ভাব্যতার সাথে বার্নোল্লি বিতরণ থেকে একটি নমুনা নেয় pop_p
এবং তারপরে prop.test()
ধারাবাহিকতা সংশোধন ব্যবহার করে 95% আত্মবিশ্বাসের ব্যবধান গণনা করে বা আরও সঠিকভাবে binom.test()
। প্রকৃত জনসংখ্যার অনুপাত pop_p
95% সিআই এর মধ্যে থাকলে এটি 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
।