यह अक्सर ऐसा होता है कि 95% कवरेज के साथ एक आत्मविश्वास अंतराल एक विश्वसनीय अंतराल के समान होता है जिसमें 95% घनत्व होता है। यह तब होता है जब पूर्ववर्ती वर्दी या निकटवर्ती वर्दी में होता है। इस प्रकार एक आत्मविश्वास अंतराल का उपयोग अक्सर एक विश्वसनीय अंतराल और इसके विपरीत करने के लिए किया जा सकता है। महत्वपूर्ण रूप से, हम इस बात से निष्कर्ष निकाल सकते हैं कि एक विश्वसनीय अंतराल के रूप में बहुत अधिक गलत व्याख्या गलत है क्योंकि कई साधारण उपयोग के मामलों के लिए कोई व्यावहारिक महत्व नहीं है।
ऐसे मामलों के कई उदाहरण हैं जहां ऐसा नहीं होता है, हालांकि वे सभी को साबित करने की कोशिश में बेयसियन सांख्यिकी के समर्थकों द्वारा चेरी के साथ प्रतीत होता है कि लगातार दृष्टिकोण के साथ कुछ गड़बड़ है। इन उदाहरणों में, हम देखते हैं कि विश्वास अंतराल में असंभव मूल्य शामिल हैं, आदि, जो यह दर्शाता है कि वे बकवास हैं।
मैं उन उदाहरणों, या बायेसियन बनाम फ़्रीक्वेंटिस्ट की एक दार्शनिक चर्चा पर वापस नहीं जाना चाहता।
मैं इसके विपरीत के उदाहरणों की तलाश में हूं। क्या ऐसे कोई मामले हैं जहां विश्वास और विश्वसनीय अंतराल काफी हद तक अलग हैं, और विश्वास प्रक्रिया द्वारा प्रदान किया गया अंतराल स्पष्ट रूप से बेहतर है?
स्पष्ट करने के लिए: यह उस स्थिति के बारे में है जब विश्वसनीय अंतराल आमतौर पर संबंधित आत्मविश्वास अंतराल के साथ मेल खाने की उम्मीद की जाती है, अर्थात फ्लैट, वर्दी, आदि पुजारियों का उपयोग करते समय। मुझे उस मामले में कोई दिलचस्पी नहीं है जहां कोई व्यक्ति पहले से मनमाने ढंग से बुरा चुनता है।
EDIT: @JaeHyeok शिन के जवाब के जवाब में, मुझे असहमत होना चाहिए कि उसका उदाहरण सही संभावना का उपयोग करता है। R में नीचे थीटा के लिए सही पश्च वितरण का अनुमान लगाने के लिए मैंने अनुमानित बायेसियन अभिकलन का उपयोग किया:
### Methods ###
# Packages
require(HDInterval)
# Define the likelihood
like <- function(k = 1.2, theta = 0, n_print = 1e5){
x = NULL
rule = FALSE
while(!rule){
x = c(x, rnorm(1, theta, 1))
n = length(x)
x_bar = mean(x)
rule = sqrt(n)*abs(x_bar) > k
if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
}
return(x)
}
# Plot results
plot_res <- function(chain, i){
par(mfrow = c(2, 1))
plot(chain[1:i, 1], type = "l", ylab = "Theta", panel.first = grid())
hist(chain[1:i, 1], breaks = 20, col = "Grey", main = "", xlab = "Theta")
}
### Generate target data ###
set.seed(0123)
X = like(theta = 0)
m = mean(X)
### Get posterior estimate of theta via ABC ###
tol = list(m = 1)
nBurn = 1e3
nStep = 1e4
# Initialize MCMC chain
chain = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = c("theta", "mean")
chain$theta[1] = rnorm(1, 0, 10)
# Run ABC
for(i in 2:nStep){
theta = rnorm(1, chain[i - 1, 1], 10)
prop = like(theta = theta)
m_prop = mean(prop)
if(abs(m_prop - m) < tol$m){
chain[i,] = c(theta, m_prop)
}else{
chain[i, ] = chain[i - 1, ]
}
if(i %% 100 == 0){
print(paste0(i, "/", nStep))
plot_res(chain, i)
}
}
# Remove burn-in
chain = chain[-(1:nBurn), ]
# Results
plot_res(chain, nrow(chain))
as.numeric(hdi(chain[, 1], credMass = 0.95))
यह 95% विश्वसनीय अंतराल है:
> as.numeric(hdi(chain[, 1], credMass = 0.95))
[1] -1.400304 1.527371
EDIT # 2:
यहाँ @JaeHyeok शिन की टिप्पणियों के बाद एक अद्यतन है। मैं इसे यथासंभव सरल रखने की कोशिश कर रहा हूं, लेकिन स्क्रिप्ट थोड़ी अधिक जटिल हो गई। मुख्य परिवर्तन:
- अब माध्य के लिए 0.001 की सहिष्णुता का उपयोग करना (यह 1 था)
- छोटी सहिष्णुता के लिए 500k तक कदमों की संख्या में वृद्धि
- छोटे सहिष्णुता के लिए प्रस्ताव वितरण की एसडी को घटाकर 1 करने के लिए (यह 10 था)
- तुलना के लिए n = 2k के साथ सरल rnorm संभावना जोड़ा गया
- एक सारांश सांख्यिकीय के रूप में नमूना आकार (एन) जोड़ा गया, 0.5 * n_target के लिए सहिष्णुता सेट करें
यहाँ कोड है:
### Methods ###
# Packages
require(HDInterval)
# Define the likelihood
like <- function(k = 1.3, theta = 0, n_print = 1e5, n_max = Inf){
x = NULL
rule = FALSE
while(!rule){
x = c(x, rnorm(1, theta, 1))
n = length(x)
x_bar = mean(x)
rule = sqrt(n)*abs(x_bar) > k
if(!rule){
rule = ifelse(n > n_max, TRUE, FALSE)
}
if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
}
return(x)
}
# Define the likelihood 2
like2 <- function(theta = 0, n){
x = rnorm(n, theta, 1)
return(x)
}
# Plot results
plot_res <- function(chain, chain2, i, main = ""){
par(mfrow = c(2, 2))
plot(chain[1:i, 1], type = "l", ylab = "Theta", main = "Chain 1", panel.first = grid())
hist(chain[1:i, 1], breaks = 20, col = "Grey", main = main, xlab = "Theta")
plot(chain2[1:i, 1], type = "l", ylab = "Theta", main = "Chain 2", panel.first = grid())
hist(chain2[1:i, 1], breaks = 20, col = "Grey", main = main, xlab = "Theta")
}
### Generate target data ###
set.seed(01234)
X = like(theta = 0, n_print = 1e5, n_max = 1e15)
m = mean(X)
n = length(X)
main = c(paste0("target mean = ", round(m, 3)), paste0("target n = ", n))
### Get posterior estimate of theta via ABC ###
tol = list(m = .001, n = .5*n)
nBurn = 1e3
nStep = 5e5
# Initialize MCMC chain
chain = chain2 = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = colnames(chain2) = c("theta", "mean")
chain$theta[1] = chain2$theta[1] = rnorm(1, 0, 1)
# Run ABC
for(i in 2:nStep){
# Chain 1
theta1 = rnorm(1, chain[i - 1, 1], 1)
prop = like(theta = theta1, n_max = n*(1 + tol$n))
m_prop = mean(prop)
n_prop = length(prop)
if(abs(m_prop - m) < tol$m &&
abs(n_prop - n) < tol$n){
chain[i,] = c(theta1, m_prop)
}else{
chain[i, ] = chain[i - 1, ]
}
# Chain 2
theta2 = rnorm(1, chain2[i - 1, 1], 1)
prop2 = like2(theta = theta2, n = 2000)
m_prop2 = mean(prop2)
if(abs(m_prop2 - m) < tol$m){
chain2[i,] = c(theta2, m_prop2)
}else{
chain2[i, ] = chain2[i - 1, ]
}
if(i %% 1e3 == 0){
print(paste0(i, "/", nStep))
plot_res(chain, chain2, i, main = main)
}
}
# Remove burn-in
nBurn = max(which(is.na(chain$mean) | is.na(chain2$mean)))
chain = chain[ -(1:nBurn), ]
chain2 = chain2[-(1:nBurn), ]
# Results
plot_res(chain, chain2, nrow(chain), main = main)
hdi1 = as.numeric(hdi(chain[, 1], credMass = 0.95))
hdi2 = as.numeric(hdi(chain2[, 1], credMass = 0.95))
2*1.96/sqrt(2e3)
diff(hdi1)
diff(hdi2)
परिणाम, जहां hdi1 मेरी "संभावना" है और hdi2 सरल rnorm है (n, थीटा, 1:
> 2*1.96/sqrt(2e3)
[1] 0.08765386
> diff(hdi1)
[1] 1.087125
> diff(hdi2)
[1] 0.07499163
तो पर्याप्त रूप से सहिष्णुता को कम करने के बाद, और कई और एमसीएमसी चरणों की कीमत पर, हम rnorm मॉडल के लिए अपेक्षित CrI चौड़ाई देख सकते हैं।