ความครอบคลุมต่ำกว่าที่คาดสำหรับการสุ่มตัวอย่างที่สำคัญด้วยการจำลอง


9

ผมพยายามที่จะตอบคำถามที่ประเมินหนึ่งด้วยวิธีการสุ่มตัวอย่างความสำคัญในการวิจัย โดยทั่วไปผู้ใช้จำเป็นต้องคำนวณ

0πf(x)dx=0π1cos(x)2+x2dx

ใช้การแจกแจงเอ็กซ์โพเนนเชียลเป็นการกระจายความสำคัญ

q(x)=λ expλx

และค้นหาค่าของซึ่งให้ค่าประมาณที่ดีขึ้นกับอินทิกรัล (ของมัน) ผมแต่งปัญหาการประเมินผลของค่าเฉลี่ยของในช่วง : หนึ่งคือแล้วเพียงแค่\ λself-studyμf(x)[0,π]πμ

ดังนั้นให้เป็น pdf ของและให้ : เป้าหมายตอนนี้คือการประมาณp(x)XU(0,π)Yf(X)

μ=E[Y]=E[f(X)]=Rf(x)p(x)dx=0π1cos(x)2+x21πdx

ใช้การสุ่มตัวอย่างที่สำคัญ ฉันทำการจำลองใน 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

รหัสเป็นพื้นการดำเนินการตรงไปตรงมาของการสุ่มตัวอย่างสำคัญดังต่อไปนี้สัญกรณ์ที่ใช้ที่นี่ จากนั้นการสุ่มตัวอย่างที่สำคัญจะถูกทำซ้ำครั้งเพื่อรับการประมาณหลาย ๆ ของและแต่ละครั้งที่มีการตรวจสอบว่าช่วงเวลา 95% ครอบคลุมค่าเฉลี่ยจริงหรือไม่Nμ

อย่างที่คุณเห็นความคุ้มครองที่แท้จริงคือแค่ 0.19 และการเพิ่มค่าเป็นค่าเช่นก็ไม่ได้ช่วย ทำไมสิ่งนี้จึงเกิดขึ้นλ=20B106


1
การใช้ฟังก์ชันสนับสนุนความสำคัญไม่มีที่สิ้นสุดสำหรับอินทิกรัล จำกัด การสนับสนุนไม่เหมาะสมเนื่องจากส่วนหนึ่งของการจำลองใช้เพื่อจำลองค่าศูนย์ดังนั้นต้องพูด อย่างน้อยก็ตัดทอนแทนที่ซึ่งง่ายต่อการทำและจำลอง π
ซีอาน

@ ซีอานแน่นอนฉันเห็นด้วยถ้าฉันต้องประเมินอินทิกรัลนั้นด้วยการสุ่มตัวอย่างสำคัญฉันจะไม่ใช้การแจกแจงที่สำคัญนั้น แต่ฉันพยายามตอบคำถามดั้งเดิมซึ่งจำเป็นต้องใช้การแจกแจงเอ็กซ์โพเนนเชียล ปัญหาของฉันคือการที่แม้ว่าวิธีนี้อยู่ไกลจากที่ดีที่สุดความคุ้มครองยังคงควรจะเพิ่มขึ้น (โดยเฉลี่ย) เป็นBและนั่นคือสิ่งที่ Greenparker แสดง B
DeltaIV

คำตอบ:


3

การสุ่มตัวอย่างความสำคัญค่อนข้างอ่อนไหวต่อการเลือกการกระจายความสำคัญ เนื่องจากคุณเลือกตัวอย่างที่คุณวาดโดยใช้จะมีค่าเฉลี่ยอยู่ที่ที่มีความแปรปรวน1/400นี่คือการกระจายที่คุณได้รับλ=20rexp1/201/400

ป้อนคำอธิบายรูปภาพที่นี่

แต่สำคัญที่คุณต้องการในการประเมินไปจาก 0 ถึง= ดังนั้นคุณต้องการใช้ที่ให้ช่วงดังกล่าวกับคุณ ผมใช้1π=3.14λλ=1

ป้อนคำอธิบายรูปภาพที่นี่

การใช้ฉันจะสามารถสำรวจพื้นที่อินทิกรัลเต็มรูปแบบของ 0 ถึงและดูเหมือนว่าจะเหลือเพียงไม่กี่เท่านั้นที่จะสูญเปล่า ตอนนี้ผมเรียกรหัสของคุณและเพียงเปลี่ยน1λ=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) หรือใหญ่กว่าความน่าจะเป็นของการครอบคลุมจะไม่ดีλ

แก้ไข -------

เกี่ยวกับความน่าจะเป็นของการครอบคลุมลดลงเมื่อคุณไปจากถึงนั่นเป็นเพียงการสุ่มเกิดขึ้นตามความจริงที่ว่าคุณใช้การจำลองแบบช่วงความเชื่อมั่นสำหรับความน่าจะเป็นที่ครอบคลุมที่คือ, B=104B=106N=100B=104

.19±1.96.19(1.19)100=.19±.0769=(.1131,.2669).

ดังนั้นคุณไม่สามารถพูดว่าการเพิ่มอย่างมีนัยสำคัญลดความน่าจะเป็นความคุ้มครองB=106

ในความเป็นจริงในรหัสของคุณสำหรับเมล็ดพันธุ์เดียวกันการเปลี่ยนแปลงเพื่อแล้วกับน่าจะเป็นความคุ้มครองที่ 0.123 และความคุ้มครองความน่าจะเป็น0.158N=100N=1000B=104B=106.158

ตอนนี้ช่วงความมั่นใจรอบ. 123 คือ

.123±1.96.123(1.123)1000=.123±.0203=(.102,.143).

ดังนั้นตอนนี้ด้วยการจำลองแบบคุณจะได้รับความน่าจะเป็นที่ครอบคลุมเพิ่มขึ้นอย่างมีนัยสำคัญN=1000


ใช่ฉันรู้ว่าการเปลี่ยนแปลงความคุ้มครองกับ : โดยเฉพาะคุ้มครองที่ดีที่สุดจะได้รับสำหรับ<2 ตอนนี้ฉันเข้าใจแล้วว่าเนื่องจาก CI สำหรับค่าเฉลี่ยตัวอย่างอิงจาก CLT มันจึงเป็นผลเชิงซีมโทติค ดังนั้นมันอาจเป็นการดีที่การเปลี่ยนแปลงมีผลต่อจำนวนตัวอย่างที่จำเป็นในการเข้าใกล้ "ระบอบการปกครองแบบ" ที่จะพูด แต่ประเด็นก็คือทำไมกับความคุ้มครองที่ลดลงจากขนาดของกลุ่มตัวอย่างขนาดตัวอย่าง ? มันควรจะเพิ่มขึ้นอย่างแน่นอนถ้าความครอบคลุมที่ไม่ดีนั้นเกิดจากมูลค่าสูงเท่านั้น? λ0.1<λ<2λλ=20104106λ
DeltaIV

1
@DeltaIV ฉันได้ทำการแก้ไขเพื่อตอบคำถามนี้ ส่วนสำคัญคือไม่ซ้ำแบบจำลองมากพอที่จะพูดอะไรด้วยความมั่นใจ N=100
Greenparker

1
อายอดเยี่ยม! ฉันไม่คิดว่าจะสร้างช่วงความมั่นใจสำหรับสัดส่วนการครอบคลุมแทนที่จะเป็นแค่ค่าเฉลี่ย เช่นเดียวกับ nitpick ฉันจะไม่ใช้ช่วงความเชื่อมั่น Wald สำหรับช่วงความมั่นใจของสัดส่วน อย่างไรก็ตามเนื่องจากสัดส่วนอยู่ห่างจาก 0 และ 1 และจำนวนการทำซ้ำคือ (ในกรณีที่สองของคุณ ) มีขนาดค่อนข้างใหญ่อาจใช้ช่วงเวลา Wilson หรือ Jeffreys ไม่ได้สร้างความแตกต่างใด ๆ ฉันจะรอเพียงเล็กน้อยเพื่อดูว่ามีคำตอบอื่น ๆ แต่ผมว่าคุณสมควรได้รับอย่างเต็มที่ 100 :)N=1000
DeltaIV
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.