सिमुलेशन के साथ महत्व के नमूने के लिए अपेक्षित कवरेज से कम


9

मैं इस सवाल का जवाब देने की कोशिश कर रहा था कि आर में महत्व नमूनाकरण विधि के साथ अभिन्न मूल्यांकन करें । मूल रूप से, उपयोगकर्ता की गणना करने की आवश्यकता है

0π(एक्स)एक्स=0π1क्योंकि(एक्स)2+एक्स2एक्स

महत्व वितरण के रूप में घातीय वितरण का उपयोग करना

क्ष(एक्स)=λ exp-λएक्स

और का मान ज्ञात जो अभिन्न (यह करने के लिए बेहतर सन्निकटन देता है )। मैं [0, \ pi] पर के माध्य मान के मूल्यांकन के रूप में समस्या का पुनरावर्तन करता हूं : अभिन्न तो सिर्फ \ pi \ mu हैλself-studyμ(एक्स)[0,π]πμ

इस प्रकार, p (x) X \ sim \ mathcal {U} (0, \ pi)पी(एक्स) का pdf हो , और Y \ sim f (X) को जाने दें : लक्ष्य अब अनुमान लगाना हैएक्स~यू(0,π)Y~(एक्स)

μ=[Y]=[(एक्स)]=आर(एक्स)पी(एक्स)एक्स=0π1क्योंकि(एक्स)2+एक्स21πएक्स

महत्व के नमूने का उपयोग करना। मैंने R में एक सिमुलेशन प्रदर्शन किया:

# clear the environment and set the seed for reproducibility
rm(list=ls())
gc()
graphics.off()
set.seed(1)

# function to be integrated
f <- function(x){
    1 / (cos(x)^2+x^2)
}

# importance sampling
importance.sampling <- function(lambda, f, B){
    x <- rexp(B, lambda) 
    f(x) / dexp(x, lambda)*dunif(x, 0, pi)
}

# mean value of f
mu.num <- integrate(f,0,pi)$value/pi

# initialize code
means  <- 0
sigmas <- 0
error  <- 0
CI.min <- 0
CI.max <- 0
CI.covers.parameter <- FALSE

# set a value for lambda: we will repeat importance sampling N times to verify
# coverage
N <- 100
lambda <- rep(20,N)

# set the sample size for importance sampling
B <- 10^4

# - estimate the mean value of f using importance sampling, N times
# - compute a confidence interval for the mean each time
# - CI.covers.parameter is set to TRUE if the estimated confidence 
#   interval contains the mean value computed by integrate, otherwise
# is set to FALSE
j <- 0
for(i in lambda){
    I <- importance.sampling(i, f, B)
    j <- j + 1
    mu <- mean(I)
    std <- sd(I)
    lower.CB <- mu - 1.96*std/sqrt(B)  
    upper.CB <- mu + 1.96*std/sqrt(B)  
    means[j] <- mu
    sigmas[j] <- std
    error[j] <- abs(mu-mu.num)
    CI.min[j] <- lower.CB
    CI.max[j] <- upper.CB
    CI.covers.parameter[j] <- lower.CB < mu.num & mu.num < upper.CB
}

# build a dataframe in case you want to have a look at the results for each run
df <- data.frame(lambda, means, sigmas, error, CI.min, CI.max, CI.covers.parameter)

# so, what's the coverage?
mean(CI.covers.parameter)
# [1] 0.19

कोड मूल रूप से महत्व नमूना का एक सीधा कार्यान्वयन है, यहां उपयोग किए गए संकेतन के बाद । महत्त्व का नमूना तब \ N म्यू के कई अनुमान प्राप्त करने के लिए एन बार दोहराया जाता है , और हर बार 95% अंतराल वास्तविक माध्य को कवर करता है या नहीं इस पर एक जांच की जाती है।μ

जैसा कि आप देख सकते हैं, लिए वास्तविक कवरेज सिर्फ 0.19 है। और बढ़ती जैसे मूल्यों के लिए मदद नहीं करता है (कवरेज भी छोटे, 0.15 है)। ये क्यों हो रहा है?λ=20बी106


1
परिमित समर्थन अभिन्न के लिए एक अनंत समर्थन महत्व फ़ंक्शन का उपयोग करना इष्टतम नहीं है क्योंकि सिमुलेशन का एक हिस्सा शून्य का अनुकरण करने के लिए उपयोग किया जाता है, इसलिए बोलने के लिए। कम से कम एक्सपोनेंशियल को पर , जो करना और अनुकरण करना आसान है। π
शीआन

@ शीआन यकीन है, मैं सहमत हूं, अगर मुझे महत्व नमूनाकरण द्वारा उस अभिन्न का मूल्यांकन करना था, तो मैं उस महत्व वितरण का उपयोग नहीं करूंगा, लेकिन मैं मूल प्रश्न का उत्तर देने की कोशिश कर रहा था, जिसे घातीय वितरण का उपयोग करना आवश्यक था। मेरी समस्या यह थी कि, भले ही यह दृष्टिकोण इष्टतम से दूर हो, कवरेज अभी भी (औसतन) रूप में बढ़ना चाहिए । और यही ग्रीनपार्क ने दिखाया। बी
DeltaIV

जवाबों:


3

महत्व के वितरण की पसंद के लिए महत्व नमूनाकरण काफी संवेदनशील है। चूंकि आपने चुना है , इसलिए जो नमूने आप उपयोग कर रहे हैं, उनका विचरण । यह आपको मिलने वाला वितरण हैλ=20rexp1/201/400

यहाँ छवि विवरण दर्ज करें

हालाँकि, आप जिस अभिन्न मूल्यांकन करना चाहते हैं, वह 0 से । तो आप एक का उपयोग करना चाहते हैं जो आपको इस तरह की सीमा प्रदान करता है। मैं उपयोग करता हूं ।π=3.14λλ=1

यहाँ छवि विवरण दर्ज करें

का उपयोग करते हुए मैं 0 से के पूर्ण अभिन्न स्थान का पता लगाने में सक्षम हो , और ऐसा लगता है कि केवल पर कुछ ड्रॉ बर्बाद हो जाएगा। अब मैं आपके कोड को फिर से जमा करता हूं, और केवल बदल देता हूं ।λ=1ππλ=1

# clear the environment and set the seed for reproducibility
rm(list=ls())
gc()
graphics.off()
set.seed(1)

# function to be integrated
f <- function(x){
  1 / (cos(x)^2+x^2)
}

# importance sampling
importance.sampling <- function(lambda, f, B){
  x <- rexp(B, lambda) 
  f(x) / dexp(x, lambda)*dunif(x, 0, pi)
}

# mean value of f
mu.num <- integrate(f,0,pi)$value/pi

# initialize code
means  <- 0
sigmas <- 0
error  <- 0
CI.min <- 0
CI.max <- 0
CI.covers.parameter <- FALSE

# set a value for lambda: we will repeat importance sampling N times to verify
# coverage
N <- 100
lambda <- rep(1,N)

# set the sample size for importance sampling
B <- 10^4

# - estimate the mean value of f using importance sampling, N times
# - compute a confidence interval for the mean each time
# - CI.covers.parameter is set to TRUE if the estimated confidence 
#   interval contains the mean value computed by integrate, otherwise
# is set to FALSE
j <- 0
for(i in lambda){
  I <- importance.sampling(i, f, B)
  j <- j + 1
  mu <- mean(I)
  std <- sd(I)
  lower.CB <- mu - 1.96*std/sqrt(B)  
  upper.CB <- mu + 1.96*std/sqrt(B)  
  means[j] <- mu
  sigmas[j] <- std
  error[j] <- abs(mu-mu.num)
  CI.min[j] <- lower.CB
  CI.max[j] <- upper.CB
  CI.covers.parameter[j] <- lower.CB < mu.num & mu.num < upper.CB
}

# build a dataframe in case you want to have a look at the results for each run
df <- data.frame(lambda, means, sigmas, error, CI.min, CI.max, CI.covers.parameter)

# so, what's the coverage?
mean(CI.covers.parameter)
#[1] .95

यदि आप साथ खेलते हैं, तो आप देखेंगे कि यदि आप इसे वास्तव में छोटा (.00001) या बड़ा बनाते हैं, तो कवरेज संभावनाएँ खराब होंगी।λ

संपादित करें -------

एक बार जब आप से , तो घटने वाली कवरेज संभावना के संबंध में , यह सिर्फ एक यादृच्छिक घटना है, इस तथ्य के आधार पर कि आप प्रतिकृति का उपयोग करते हैं। पर कवरेज संभावना के लिए विश्वास अंतराल , है बी=104बी=106एन=100बी=104

.19±1.96*.19*(1-.19)100=.19±0.0769=(0.1131,0.2669)

तो आप वास्तव में यह नहीं कह सकते हैं कि बढ़ने से कवरेज की संभावना काफी कम हो जाती है।बी=106

वास्तव में एक ही बीज के लिए आपके कोड में, को , फिर , कवरेज प्रायिकता है ।123 और कवरेज संभावना है ।एन=100एन=1000बी=104बी=1060.158

अब, लगभग .123 का विश्वास अंतराल .123 है

.123±1.96.123*(1-.123)1000=.123±0.0203=(0.102,0.143)

इस प्रकार, अब प्रतिकृति के साथ, आपको लगता है कि कवरेज प्रोबायबिलिटी काफी बढ़ जाती है।एन=1000


हां, मुझे पता है कि कवरेज बदल जाता है λ: विशेष रूप से सर्वश्रेष्ठ कवरेज प्राप्त किया जाता है 0.1<λ<2। अब, मैं समझता हूं कि चूंकि नमूना माध्य के लिए CI CLT पर आधारित है, इसलिए यह एक विषम परिणाम है। इस प्रकार, यह अच्छी तरह से हो सकता है कि बदल रहा हैλ"असममित शासन" से संपर्क करने के लिए आवश्यक नमूनों की संख्या को प्रभावित करता है, इसलिए बोलने के लिए। लेकिन बात यह है कि क्योंλ=20नमूना आकार से कवरेज घट जाती है104 नमूना आकार के लिए 106? निश्चित रूप से यह बढ़ जाना चाहिए, अगर खराब कवरेज केवल एक उच्च के कारण थाλमूल्य?
DeltaIV

1
@DeltaIV मैंने इस प्रश्न का उत्तर देने के लिए एक संपादन किया। जिस्ट है,एन=100निश्चितता के साथ कुछ भी कहने के लिए पर्याप्त प्रतिकृति नहीं है।
ग्रीनपार्क

1
आह शानदार! मैंने कवरेज अनुपात के लिए आत्मविश्वास अंतराल बनाने के बारे में नहीं सोचा था , बजाय केवल मतलब के लिए। एक नाइटपिक के रूप में, मैंने एक अनुपात के विश्वास अंतराल के लिए वाल्ड विश्वास अंतराल का उपयोग नहीं किया होगा। हालाँकि, चूंकि अनुपात 0 और 1 से दूर है और प्रतिकृतियों की संख्या (आपके दूसरे मामले में,)एन=1000) अपेक्षाकृत बड़े, शायद विल्सन या जेफ्रीज़ अंतराल का उपयोग करने से कोई फर्क नहीं पड़ता। मैं यह देखने के लिए थोड़ा इंतजार करूंगा कि क्या अन्य उत्तर हैं, लेकिन मैं कहूंगा कि आप पूरी तरह से +100 के लायक हैं :)
डेल्फी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.