Quand un intervalle de confiance «a-t-il du sens» mais pas l'intervalle crédible correspondant?

14

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

entrez la description de l'image ici

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:

  1. Utilisant maintenant une tolérance de 0,001 pour la moyenne (elle était de 1)
  2. Augmentation du nombre d'étapes à 500k pour tenir compte d'une plus petite tolérance
  3. Diminution du sd de la distribution de la proposition à 1 pour tenir compte d'une tolérance plus petite (elle était de 10)
  4. Ajout de la vraisemblance rnorm simple avec n = 2k pour comparaison
  5. 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.

entrez la description de l'image ici

Livide
la source
Pas de doublon, mais a une relation étroite avec stats.stackexchange.com/questions/419916/…
user158565
6
Généralement, lorsque vous avez un a priori informatif qui est tout à fait faux, dans un sens informel, par exemple Normal (0,1) lorsque la valeur réelle est -3,6, votre intervalle crédible en l'absence de beaucoup de données sera assez faible lorsque regardé dans une perspective fréquentiste.
jbowman
@jbowman Il s'agit spécifiquement du cas lorsque vous utilisez un a priori uniforme ou quelque chose comme N (0, 1e6).
Livid
Il y a des décennies, le vrai bayésien appelait le statisticien qui utilisait un a priori non informatif comme pseudo- (ou faux) bayésien.
user158565
@ user158565 Ceci est hors sujet mais un prior uniforme n'est qu'une approximation. Si p (H_0) = p (H_1) = p (H_2) = ... = p (H_n), alors tous les prieurs peuvent abandonner la règle de Bayes, ce qui facilite le calcul. Ce n'est pas plus mal que de laisser de petits termes d'un dénominateur quand cela a du sens.
Livid

Réponses:

6

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 par XN(θ,1)θnnX¯n>kkN

N=inf{n1:nX¯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,dix))kθN(X¯N,1/N)

CIbayes:=[X¯N1.96N,X¯N+1.96N].
N0k
0<X¯NkNX¯N1.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 k0CIbayes
infθPθ(θCIbayes)=0,
0θ00.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

> X = like(theta = 0)
> m = mean(X)
> print(m)
[1] 0.02779672

entrez la description de l'image ici

> 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 .NX¯Nk0<θk-k-kθ<0

JaeHyeok Shin
la source
"si nous fixons un k assez grand, le postérieur de θ est approximativement N (X_N, 1 / N)" . Il me semble qu'évidemment Pr (X | theta)! = Normal (theta, 1). C'est à dire, c'est la mauvaise probabilité pour le processus qui a généré votre séquence. Il y a aussi une faute de frappe. Dans l'exemple d'origine, vous arrêtez l'échantillonnage lorsque sqrt (n) * abs (moyenne (x))> k.
Livid
Merci pour les commentaires. Même sous la règle d'arrêt, la probabilité est donnée comme . Il est donc identique au produit de N observations normales, bien que N soit maintenant aléatoire. Cet exemple est toujours valable pour la règle d'arrêt actuelle, bien que celui que vous avez souligné soit l'exemple original et historique - Il existe une histoire intéressante de la façon dont les fréquents et les bayésiens ont débattu avec cette règle d'arrêt. Vous pouvez voir, par exemple, errorstatistics.com/2013/04/06/…i=1Nϕ(Xiθ)
JaeHyeok Shin
Veuillez voir ma modification dans la question. Je pense toujours que votre intervalle crédible n'a pas de sens car il utilise une probabilité incorrecte. Lorsque vous utilisez la probabilité correcte comme dans mon code, nous obtenons un intervalle raisonnable.
Livid
Merci pour l'expérience détaillée. Dans votre paramètre, est trop petit pour satisfaire les inégalités . Notez que doit être supérieur à 1,96, et pour compenser l'erreur d'approximation, je pense que serait un choix sûr. k0<X¯Nk/NX¯N1.96/Nkk>10
JaeHyeok Shin
De plus, pourriez-vous vérifier à nouveau si cette informatique ABC fonctionne pour le cas standard? J'ai remplacé la fonction \ code {like} pour lui faire dessiner un nombre fixe d'observations (n ​​= 2000) Ensuite, la longueur théorique de CR devrait être environ mais toujours très CR plus large (la longueur est d'environ 2). Je pense que le niveau de tolérance est trop élevé. 2×1.96/2000=0.0876
JaeHyeok Shin
4

É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 .

Réintégrer Monica
la source
1
Ou mieux encore, un crédible construit par un prieur qui n'est pas d'accord avec votre prieur (même s'il s'agit du prieur de quelqu'un d'autre) a de bonnes chances d'être ridicule pour vous. Ce n'est pas rare en science; Des chercheurs m'ont dit qu'ils ne voulaient pas inclure l'opinion des experts, car dans leurs observations, les experts ont toujours été très confiants.
Cliff AB
1
Il s'agit spécifiquement de prieurs uniformes ou "plats".
Livid
1
@Livid: Vous devez absolument inclure que vous parlez de prieurs plats dans votre question. Cela change complètement tout.
Cliff AB
1
@CliffAB C'est dans les deux premières phrases, mais je vais clarifier, merci.
Livid
1

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.

Cliff AB
la source
J'ai expliqué ma motivation assez clairement. Je veux quelque chose comme les exemples où les intervalles de confiance incluent des valeurs impossibles, mais où l'intervalle crédible se comporte bien. Si votre exemple repose sur une action absurde, comme par exemple choisir la mauvaise probabilité, pourquoi cela intéresserait-il quelqu'un?
Livid
1
@Livid: la fonction de vraisemblance est parfaitement raisonnable. Le plat avant sur la cote de log n'est pas. Et c'est l'intégralité de l'argument que Bayesien utilise pour dire que vous ne devriez pas utiliser de prieurs plats; ils peuvent en fait être extrêmement informatifs et souvent pas comme l'utilisateur le souhaitait!
Cliff AB
1
Voici Andrew Gelman discutant de certains des problèmes des prieurs plats.
Cliff AB
"Le plat avant sur les cotes n'est pas." Je voulais dire que mettre un avant plat sur les cotes transformées en journaux semble être un non-sens pour vous, comme utiliser la mauvaise probabilité. Désolé, mais je ne connais pas cet exemple. Qu'est-ce que ce modèle est censé faire exactement?
Livid
@Livid: cela peut sembler inhabituel, mais ce n'est vraiment pas le cas! Par exemple, la régression logistique prend généralement en compte tous les paramètres de l'échelle log-odds. Si vous aviez des variables muettes pour tous vos groupes et utilisiez des a priori plats sur vos paramètres de régression, vous rencontriez exactement ce problème.
Cliff AB