Il arrive souvent qu'un intervalle de confiance avec une couverture de 95% soit très similaire à un intervalle crédible qui contient 95% de la densité postérieure. Cela se produit lorsque le prieur est uniforme ou presque uniforme dans ce dernier cas. Ainsi, un intervalle de confiance peut souvent être utilisé pour approximer un intervalle crédible et vice versa. Surtout, nous pouvons en conclure que la mauvaise interprétation très diffamatoire d'un intervalle de confiance en tant qu'intervalle crédible a peu ou pas d'importance pratique pour de nombreux cas d'utilisation simples.
Il existe un certain nombre d'exemples de cas où cela ne se produit pas, mais ils semblent tous être triés sur le volet par les partisans des statistiques bayésiennes dans le but de prouver qu'il y a un problème avec l'approche fréquentiste. Dans ces exemples, nous voyons que l'intervalle de confiance contient des valeurs impossibles, etc. qui sont censées montrer qu'elles sont absurdes.
Je ne veux pas revenir sur ces exemples, ou une discussion philosophique de Bayesian vs Frequentist.
Je cherche juste des exemples du contraire. Y a-t-il des cas où la confiance et les intervalles crédibles sont sensiblement différents, et l'intervalle fourni par la procédure de confiance est clairement supérieur?
Pour clarifier: il s'agit de la situation dans laquelle l'intervalle crédible devrait généralement coïncider avec l'intervalle de confiance correspondant, c'est-à-dire lors de l'utilisation de prieurs plats, uniformes, etc. Je ne suis pas intéressé par le cas où quelqu'un choisit un prieur arbitrairement mauvais.
EDIT: En réponse à la réponse de @JaeHyeok Shin ci-dessous, je ne suis pas d'accord que son exemple utilise la bonne probabilité. J'ai utilisé le calcul bayésien approximatif pour estimer la distribution postérieure correcte pour thêta ci-dessous dans 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))
Voici l'intervalle crédible à 95%:
> as.numeric(hdi(chain[, 1], credMass = 0.95))
[1] -1.400304 1.527371
EDIT # 2:
Voici une mise à jour après les commentaires de @JaeHyeok Shin. J'essaie de le garder aussi simple que possible, mais le script est devenu un peu plus compliqué. Principaux changements:
- Utilisant maintenant une tolérance de 0,001 pour la moyenne (elle était de 1)
- Augmentation du nombre d'étapes à 500k pour tenir compte d'une plus petite tolérance
- Diminution du sd de la distribution de la proposition à 1 pour tenir compte d'une tolérance plus petite (elle était de 10)
- Ajout de la vraisemblance rnorm simple avec n = 2k pour comparaison
- Ajout de la taille de l'échantillon (n) en tant que statistique récapitulative, définissez la tolérance à 0,5 * n_target
Voici le code:
### 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)
Les résultats, où hdi1 est ma "vraisemblance" et hdi2 est la rnorm simple (n, thêta, 1):
> 2*1.96/sqrt(2e3)
[1] 0.08765386
> diff(hdi1)
[1] 1.087125
> diff(hdi2)
[1] 0.07499163
Ainsi, après avoir suffisamment abaissé la tolérance, et au détriment de nombreuses autres étapes MCMC, nous pouvons voir la largeur CrI attendue pour le modèle rnorm.
Réponses:
Dans un plan expérimental séquentiel, l'intervalle crédible peut être trompeur.
(Avertissement: je ne dis pas que ce n'est pas raisonnable - il est parfaitement raisonnable dans le raisonnement bayésien et n'est pas trompeur du point de vue bayésien.)
Pour un exemple simple, disons que nous avons une machine qui nous donne un échantillon aléatoire de avec inconnu . Au lieu de dessiner échantillons iid, nous dessinons des échantillons jusqu'à pour un fixe . Autrement dit, le nombre d'échantillons est un temps d'arrêt défini parX N( θ , 1 ) θ n n--√X¯n> k k N N= inf { n ≥ 1 : n--√X¯n> k } .
D'après la loi du logarithme itéré, nous connaissons pour tout . Ce type de règle d'arrêt est couramment utilisé dans les tests / estimations séquentiels pour réduire le nombre d'échantillons à déduire.Pθ( N< ∞ ) = 1 θ ∈ R
Le principe de vraisemblance montre que le postérieur de n'est pas affecté par la règle d'arrêt et donc pour tout priori lisse et raisonnable (par exemple, , si nous fixons un assez grand , la partie postérieure de est approximativement et donc l'intervalle crédible est approximativement donné comme Cependant, à partir de la définition de , nous savons que cet intervalle crédible ne contient pas si est grand puisqueθ π( θ ) θ ∼ N( 0 , 10 ) ) k θ N( X¯N, 1 / N) CIbayes:=[X¯N−1.96N−−√,X¯N+1.96N−−√]. N 0 k 0<X¯N−kN−−√≪X¯N−1.96N−−√
pour . Par conséquent, la couverture fréquentiste de est nulle puisque
et est atteint lorsque est . En revanche, la couverture bayésienne est toujours approximativement égale à puisque
k≫0 CIbayes infθPθ(θ∈CIbayes)=0, 0 θ 0 0.95 P(θ∈CIbayes|X1,…,XN)≈0.95.
Message à retenir: si vous êtes intéressé par une garantie fréquentiste, vous devez faire attention à utiliser les outils d'inférence bayésienne qui sont toujours valables pour les garanties bayésiennes mais pas toujours pour les garanties fréquentistes.
(J'ai appris cet exemple de la conférence impressionnante de Larry. Cette note contient de nombreuses discussions intéressantes sur la différence subtile entre les cadres fréquentiste et bayésien. Http://www.stat.cmu.edu/~larry/=stat705/Lecture14.pdf )
EDIT Dans l'ABC de Livid, la valeur de tolérance est trop grande, donc même pour le réglage standard où nous échantillonnons un nombre fixe d'observations, cela ne donne pas un CR correct. Je ne suis pas familier avec ABC mais si je modifiais seulement la valeur tol à 0,05, nous pouvons avoir un CR très asymétrique comme suit
> as.numeric(hdi(chain[, 1], credMass = 0.95)) [1] -0.01711265 0.14253673
Bien sûr, la chaîne n'est pas bien stabilisée, mais même si nous augmentons la longueur de la chaîne, nous pouvons obtenir un CR similaire - biaisé en partie positive.
En fait, je pense que la règle de rejet basée sur la différence moyenne n'est pas bien adaptée dans ce contexte car avec une probabilité élevée est proche de si et proche de si .N--√X¯N k 0 < θ ≪ k - k - k ≪ θ < 0
la source
Étant donné que l'intervalle crédible est formé à partir de la distribution postérieure, sur la base d'une distribution antérieure stipulée, vous pouvez facilement construire un très mauvais intervalle crédible en utilisant une distribution antérieure fortement concentrée sur des valeurs de paramètres hautement invraisemblables. Vous pouvez créer un intervalle crédible qui n'a pas de "sens" en utilisant une distribution antérieure entièrement concentrée sur des valeurs de paramètres impossibles .
la source
Si nous utilisons un a priori plat, c'est simplement un jeu où nous essayons de trouver un a priori plat dans une reparamétrisation qui n'a pas de sens.
Par exemple, supposons que nous voulions faire une inférence sur une probabilité. Si nous plaçons un a priori plat sur les cotes logarithmiques de la probabilité, notre intervalle crédible à 95% pour la probabilité réelle est les deux points avant même de voir les données! Si nous obtenons un seul point de données positif et construisons un intervalle crédible à 95%, c'est maintenant le point unique .{0,1} {1}
C'est pourquoi de nombreux Bayésiens s'opposent aux prieurs plats.
la source