การแจกแจงแบบเบ้อย่างมากเช่นบันทึกปกติไม่ส่งผลให้ช่วงความมั่นใจในการบูตที่ถูกต้องแม่นยำ นี่คือตัวอย่างที่แสดงว่าบริเวณหางด้านซ้ายและขวาอยู่ห่างจากอุดมคติในอุดมคติ 0.025 ไม่ว่าคุณจะลองใช้วิธีบูตสแตรปแบบใดใน R:
require(boot)
n <- 25
B <- 1000
nsim <- 1000
set.seed(1)
which <- c('basic', 'perc', 'norm', 'bca', 'stud')
mul <- 0; sdl <- 1.65 # on log scale
dist <- c('normal', 'lognormal')[2]
switch(dist, normal = {g <- function(x) x; mu <- mul},
lognormal = {g <- exp; mu <- exp(mul + sdl * sdl / 2)})
count <- matrix(0, nrow=length(which), ncol=2,
dimnames=list(which, c('lower', 'upper')))
stat <- function(x, j) {
## See http://www.psychology.mcmaster.ca/bennett/boot09/percentileT.pdf
x <- x[j]
m <- mean(x)
s <- sd(x)
n <- length(x)
sem <- s / sqrt(n)
m.var <- sem ^ 2
c(m, m.var)
}
for(i in 1 : nsim) {
if(i %% 100 == 0) cat(i, '')
x <- g(rnorm(n, mul, sdl))
b <- boot(x, stat, R=B)
ci <- boot.ci(b, type=which)
for(w in which) {
nam <- switch(w, perc='percent', norm='normal', basic='basic',
stud='student', bca='bca')
z <- rev(rev(ci[[nam]])[1:2])
count[w, 'lower'] <- count[w, 'lower'] + (z[1] > mu)
count[w, 'upper'] <- count[w, 'upper'] + (z[2] < mu)
}
}
cat('\n')
count / nsim
ผลลัพธ์อยู่ด้านล่าง:
lower upper
basic 0.000 0.329
perc 0.003 0.257
norm 0.000 0.287
bca 0.015 0.185
stud 0.005 0.129
สำหรับ bootstraps เดียวยังคงไม่ครอบคลุมเพียงพอแม่นยำ:
lower upper
basic 0.001 0.114
perc 0.005 0.093
norm 0.002 0.102
bca 0.017 0.067
stud 0.011 0.058
โอกาสเชิงประจักษ์ยังไม่สามารถให้ช่วงความเชื่อมั่นที่แม่นยำเมื่อสุ่มตัวอย่างจากการแจกแจงล็อกปกติ
มีวิธีการทั่วไปที่ไม่ได้ขึ้นอยู่กับการรู้การกระจายล่วงหน้าหรือไม่? มีใครพยายามรับช่วงความมั่นใจสำหรับค่าเฉลี่ยด้วยการปรับข้อมูลให้เหมาะกับการกระจายทั่วไปของ Tukey (การกระจายนี้มีความยืดหยุ่นสูง) แล้วการใช้ Kolmogorov-Smirnov กับกลุ่มความเชื่อมั่นของ CDF ล่ะ? การคำนวณค่าเฉลี่ยของขอบเขตบนและล่างของ CDF จะเป็นแบบอนุรักษ์นิยมอย่างน่ากลัวหรือไม่? ฉันจะชำระให้กับนักอนุรักษ์บางคนถ้าวิธีหนึ่งมีการบังคับใช้อย่างกว้างขวาง
ในการย้ำเป้าหมายฉันกำลังมองหาวิธีการที่ใช้โดยทั่วไปในการรับช่วงความมั่นใจสำหรับประชากรหมายความว่า
- ช่วงเวลาไม่สมมาตรหากการแจกแจงข้อมูลดิบไม่สมมาตร
- ช่วงเวลามีความครอบคลุมที่ถูกต้องทั้งสองก้อย (เช่นความน่าจะเป็นข้อผิดพลาด 0.025 ทั้งคู่)
- ขั้นตอนไม่จำเป็นต้องมีนักวิเคราะห์เพื่อระบุอะไรเกี่ยวกับการแจกแจงพื้นฐานหรือการแปลงที่จำเป็นในการทำให้การกระจายสมมาตร
โปรดทราบว่าทฤษฎีบทขีด จำกัด กลางนั้นไม่เกี่ยวข้องที่นี่ ฉันมีตัวอย่างขนาดเล็กที่แน่นอนและช่วงความเชื่อมั่นจะต้องไม่สมดุลเพื่อความแม่นยำในหางทั้งสอง ช่วงความเชื่อมั่นแบบอิงพารามิเตอร์ภายใต้ตัวแบบ lognormal ที่มีและยังคงมีสัญญาณครอบคลุมไม่ดี (ข้อผิดพลาดหางซ้าย 0.012 ขวา 0.047 เมื่อทั้งคู่ควรเป็น 0.025)
ในการคิดต่อไปเกี่ยวกับสิ่งนี้มีสองวิธีในการคิดเกี่ยวกับปัญหาที่ฉันต้องการจะพูดคุย
- ค่าเฉลี่ยไม่ได้เป็นปริมาณที่ยืมตัวเองไปสู่การอนุมานแบบไม่มีพารามิเตอร์อย่างน้อยเมื่อจำเป็นต้องมีความแน่นอนของการอนุมาน ค่ามัธยฐานตัวอย่างมีความหมายสำหรับการแจกแจงแบบต่อเนื่องและเรามีช่วงความเชื่อมั่นที่ง่ายสำหรับค่ามัธยฐาน ในตัวอย่างขนาดจากการแจกแจงแบบปกติช่วงความมั่นใจสำหรับค่ามัธยฐานคือนานกว่าช่วงความเชื่อมั่น -based ที่แน่นอนสำหรับค่าเฉลี่ย (ดูรหัสด้านล่าง) บางทีปัจจัยนี้ที่ 1.28 อาจเป็นราคาที่สมเหตุสมผลที่จะจ่ายเพื่อความแข็งแกร่งและอิสรภาพในการกระจายที่สมบูรณ์
- แม้ว่า bootstrap เดียวจะให้ขีด จำกัด ความเชื่อมั่นที่แม่นยำเพียงพอสำหรับตัวอย่างจากการแจกแจงแบบเบ้อย่างมาก แต่ bootstrap คู่สามารถปรับปรุงการครอบคลุมความมั่นใจในหางทั้งสองได้อย่างมีนัยสำคัญ Nankervisมีผลลัพธ์ที่ดีและให้อัลกอริธึมการคำนวณที่ยอดเยี่ยม แต่ไม่มีซอฟต์แวร์ใดที่ฉันสามารถหาใช้งานได้
รหัส R ที่แสดง 1. ด้านบน:
## Exact CI for median from DescTools package SignTest.default
## See also ttp://www.stat.umn.edu/geyer/old03/5102/notes/rank.pdf,
## http://de.scribd.com/doc/75941305/Confidence-Interval-for-Median-Based-on-Sign-Test
cimed <- function(x, alpha=0.05, na.rm=FALSE) {
if(na.rm) x <- x[! is.na(x)]
n <- length(x)
k <- qbinom(p=alpha / 2, size=n, prob=0.5, lower.tail=TRUE)
## Actual CL: 1 - 2 * pbinom(k - 1, size=n, prob=0.5) >= 1 - alpha
sort(x)[c(k, n - k + 1)]
}
n <- 20
m <- 20000
cil <- cilt <- 0
z <- qt(0.975, n - 1)
for(i in 1 : m) {
x <- rnorm(n)
cil <- cil + diff(cimed(x))
cilt <- cilt + 2 * z * sqrt(var(x) / n)
}
cil <- cil / m
cilt <- cilt / m
c(cil, cilt, cilt / cil, cil / cilt)