लॉग-सामान्य जैसे बहुत तिरछा वितरण सटीक बूटस्ट्रैप विश्वास अंतराल के परिणामस्वरूप नहीं होता है। यहां एक उदाहरण दिखाया गया है कि बाएं और दाएं पूंछ के क्षेत्र आदर्श 0.025 से बहुत दूर हैं कोई फर्क नहीं पड़ता कि आप किस बूटस्ट्रैप विधि को आर में आजमाते हैं:
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
के लिए एकल बूटस्ट्रैप अभी भी पर्याप्त रूप से सही कवरेज प्रदान नहीं करते हैं:
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
तार्किक वितरण भी तार्किक वितरण से सटीक अंतर अंतराल प्रदान करने में विफल रहता है।
क्या वहाँ एक सामान्य उद्देश्य दृष्टिकोण है जो पहले से वितरण को जानने पर निर्भर नहीं करता है? क्या किसी ने तुक के सामान्यीकृत वितरण के लिए डेटा फिटिंग करके इस मतलब के लिए विश्वास अंतराल प्राप्त करने की कोशिश की है (यह वितरण अत्यधिक लचीला है)? सीडीएफ के लिए कोलमोगोरोव-स्मिरनोव विश्वास बैंड का उपयोग करने के बारे में क्या? CDF पर ऊपरी और निचले सीमा पर माध्य की गणना करना रूढ़िवादी होगा? यदि कोई विधि व्यापक प्रयोज्यता है, तो मैं कुछ रूढ़िवाद के लिए समझौता करूंगा।
लक्ष्यों को बहाल करने के लिए, मैं एक आम तौर पर लागू दृष्टिकोण की मांग कर रहा हूं ताकि आबादी के लिए आत्मविश्वास अंतराल प्राप्त हो सके
- यदि कच्चे डेटा का वितरण असममित है तो अंतराल असममित है
- अंतराल में दोनों पूंछों में सही कवरेज है (उदाहरण के लिए, दोनों में 0.025 त्रुटि संभावना)
- प्रक्रिया में विश्लेषक को अंतर्निहित वितरण या वितरण सममित बनाने के लिए आवश्यक परिवर्तन के बारे में कुछ भी निर्दिष्ट करने की आवश्यकता नहीं होती है
ध्यान दें कि केंद्रीय सीमा प्रमेय यहां अप्रासंगिक है; मेरे पास एक छोटा सा नमूना आकार है और विश्वास अंतराल दोनों पूंछों में सटीक होने के लिए असममित होना चाहिए। पैरामीट्रिक आधारित आत्मविश्वास अंतराल एक लॉगऑन मॉडल के तहत और अभी भी खराब कवरेज है (बाएं पूंछ त्रुटि 0.012, दाएं 0.047 जब दोनों 0.025 होना चाहिए)।μ = 0 , σ = 1.65 n = 20000
इस बारे में सोचने के लिए समस्या के दो व्यापक तरीके हैं जिन पर मैं चर्चा करना चाहता हूं।
- माध्य एक मात्रा नहीं है जो स्वयं को गैर-सममितीय ऋणात्मकता के लिए उधार देता है, कम से कम जब अनुमान की सटीकता की आवश्यकता होती है। नमूना माध्य किसी भी निरंतर वितरण के लिए सार्थक है और हमारे पास माध्यिका के लिए एक सरल सटीक आत्मविश्वास अंतराल है। सामान्य वितरण से आकार एक नमूने में माध्यिका के लिए विश्वास अंतराल औसत से नीचे कोड देखें) के लिए सटीक -based विश्वास अंतराल से अधिक लंबा है । शायद 1.28 का यह कारक मजबूती और पूर्ण वितरण की स्वतंत्रता के लिए भुगतान करने के लिए एक उचित मूल्य है।1.28 × टी
- भले ही कोई भी बूटस्ट्रैप अत्यंत तिरछे वितरण से नमूनों के लिए पर्याप्त रूप से सटीक आत्मविश्वास सीमा नहीं देगा, लेकिन डबल बूटस्ट्रैप दोनों पूंछों में विश्वास कवरेज में काफी सुधार कर सकता है। Nankervis के कुछ अच्छे परिणाम हैं और एक उत्कृष्ट कम्प्यूटेशनल एल्गोरिदम प्रदान करता है। लेकिन कोई भी सॉफ्टवेयर मैं इसे लागू नहीं कर पाया।
आर कोड चित्रण 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)