Intervalles de confiance pour les paramètres de régression: Bayésien vs classique

15

Étant donné deux tableaux x et y, tous deux de longueur n, j'adapte un modèle y = a + b * x et je veux calculer un intervalle de confiance à 95% pour la pente. C'est (b - delta, b + delta) où b se trouve de la manière habituelle et

delta = qt(0.975,df=n-2)*se.slope

et se.slope est l'erreur standard dans la pente. Une façon d'obtenir l'erreur standard de la pente de R est summary(lm(y~x))$coef[2,2].

Supposons maintenant que j'écrive la probabilité de la pente donnée x et y, multipliez cela par un "plat" avant et utilisez une technique MCMC pour tirer un échantillon m de la distribution postérieure. Définir

lims = quantile(m,c(0.025,0.975))

Ma question: est-elle (lims[[2]]-lims[[1]])/2approximativement égale au delta tel que défini ci-dessus?

Addendum Ci-dessous est un modèle JAGS simple où ces deux semblent différents.

model {
 for (i in 1:N) {
  y[i] ~ dnorm(mu[i], tau)
  mu[i] <- a + b * x[i]
 }
 a ~ dnorm(0, .00001)
 b ~ dnorm(0, .00001)
 tau <- pow(sigma, -2)
 sigma ~ dunif(0, 100)
}

Je lance ce qui suit dans R:

N <- 10
x <- 1:10
y <- c(30.5,40.6,20.5,59.1,52.5,
       96.0,121.4,78.9,112.1,128.4)
lin <- lm(y~x)

#Calculate delta for a 95% confidence interval on the slope
delta.lm <- qt(0.975,df=N-2)*summary(lin)$coef[2,2]

library('rjags')
jags <- jags.model('example.bug', data = list('x' = x,'y' = y,'N' = N),
                   n.chains = 4,n.adapt = 100)
update(jags, 1000)
params <- jags.samples(jags,c('a', 'b', 'sigma'),7500)
lims <- quantile(params$b,c(0.025,0.975))
delta.bayes <- (lims[[2]]-lims[[1]])/2

cat("Classical confidence region: +/-",round(delta.lm, digits=4),"\n")
cat("Bayesian confidence region:  +/-",round(delta.bayes,digits=4),"\n")

Et obtenir:

Région de confiance classique: +/- 4.6939

Région de confiance bayésienne: +/- 5.1605

En réexécutant cette opération plusieurs fois, la région de confiance bayésienne est toujours plus large que la région classique. Est-ce dû aux prieurs que j'ai choisis?

Ringold
la source

Réponses:

9

Le «problème» est dans le prieur sur sigma. Essayez un cadre moins informatif

tau ~ dgamma(1.0E-3,1.0E-3)
sigma <- pow(tau, -1/2)

dans votre fichier jags. Ensuite, mettez à jour un tas

update(10000)

saisissez les paramètres et résumez votre quantité d'intérêt. Il devrait s'aligner assez bien avec la version classique.

Clarification: la mise à jour est juste pour vous assurer que vous obtenez où vous allez quel que soit le choix avant de décider, bien que les chaînes pour des modèles comme celui-ci avec des antérieurs diffus et des valeurs de départ aléatoires mettent plus de temps à converger. Dans les vrais problèmes, vous devriez vérifier la convergence avant de résumer quoi que ce soit, mais la convergence n'est pas le problème principal dans votre exemple, je ne pense pas.

conjugateprior
la source
@Ringold, qu'est-ce qui a fonctionné? Le prieur sur sigma ou la mise à jour? Ou les deux? Les avez-vous testés séparément?
Curieux
devrait être sigma <- pow(tau, -1/2)ousigma <- 1/sqrt(tau)
Curieux
@Tomas, c'est vrai. Typo fixed.
conjugateprior
Bien que cela puisse être la source de la différence car c'est dans le code original ...
conjugateprior
6

Si vous échantillonnez du postérieur de b | y et calculer lims (comme vous le définissez), il doit être identique à (b - delta, b + delta). Plus précisément, si vous calculez la distribution postérieure de b | y sous un a priori plat, il est identique à la distribution d'échantillonnage classique de b.

Pour plus de détails, voir: Gelman et al. (2003). Analyse des données bayésiennes. CRC Press. Section 3.6

Éditer:

Ringold, le comportement que vous observez est conforme à l'idée bayésienne. L'intervalle crédible bayésien (IC) est généralement plus large que les intervalles classiques. Et la raison en est, comme vous l'avez bien deviné, que les hyperpriors ont pris en compte la variabilité à cause des paramètres inconnus.

Pour des scénarios simples comme ceux-ci (PAS EN GÉNÉRAL):

CI baysien> CI bayésien empirique> CI classique; > == plus large

suncoolsu
la source
J'ai ajouté du code en utilisant JAGS où je semble obtenir une réponse différente. Où est mon erreur? Est-ce que cela se produit à cause des prieurs?
Ringold
Maintenant, je suis confus. Vous avez d'abord dit que la distribution postérieure de b | y sous un a priori plat est la même que la distribution d'échantillonnage classique de b. Ensuite, vous avez dit que l'IC bayésien est plus large que l'IC classique. Comment pourrait-il être plus large si les distributions sont les mêmes?
Ringold
Désolé - j'aurais dû dire ce que @CP a suggéré dans ses commentaires. Théoriquement, b | y sous un CI a priori plat et classique sont les mêmes, mais vous ne pouvez pas faire cela pratiquement dans JAGS à moins d'utiliser un a priori très très diffus comme CP l'a suggéré et d'utiliser beaucoup d'itérations MCMC.
suncoolsu
J'ai fusionné vos comptes afin que vous puissiez modifier vos questions et ajouter des commentaires. Cependant, veuillez enregistrer votre compte en cliquant ici: stats.stackexchange.com/users/login ; vous pouvez utiliser votre Gmail OpenID pour le faire en quelques secondes et vous ne perdriez plus votre compte ici.
Merci, je me suis inscrit. Et merci beaucoup à ceux qui ont répondu à cette question. Je vais essayer le gamma avant.
Ringold
5

Pour les modèles gaussiens linéaires, il est préférable d'utiliser le package bayesm. Il implémente la famille semi-conjuguée de prieurs, et le prieur de Jeffreys est un cas limite de cette famille. Voir mon exemple ci-dessous. Ce sont des simulations classiques, il n'est pas nécessaire d'utiliser MCMC.

Je ne me souviens pas si les intervalles de crédibilité des paramètres de régression sont exactement les mêmes que les intervalles de confiance habituels des moindres carrés, mais en tout cas ils sont très proches.

> # required package
> library(bayesm)
> # data
> age <- c(35,45,55,65,75)
> tension <- c(114,124,143,158,166)
> y <- tension
> # model matrix
> X <- model.matrix(tension~age)
> # prior parameters
> Theta0 <- c(0,0)
> A0 <- 0.0001*diag(2)
> nu0 <- 0
> sigam0sq <- 0
> # number of simulations
> n.sims <- 5000
> # run posterior simulations
> Data <- list(y=y,X=X)
> Prior <- list(betabar=Theta0, A=A0, nu=nu0, ssq=sigam0sq)
> Mcmc <- list(R=n.sims)
> bayesian.reg <- runireg(Data, Prior, Mcmc)
> beta.sims <- t(bayesian.reg$betadraw) # transpose of bayesian.reg$betadraw
> sigmasq.sims <- bayesian.reg$sigmasqdraw
> apply(beta.sims, 1, quantile, probs = c(0.025, 0.975))
[,1] [,2]
2.5% 53.33948 1.170794
97.5% 77.23371 1.585798
> # to be compared with: 
> frequentist.reg <- lm(tension~age)
Stéphane Laurent
la source
3

Étant donné que la régression linéaire simple est analytiquement identique entre l'analyse classique et bayésienne avec le précédent de Jeffrey, qui sont tous deux analytiques, il semble un peu étrange de recourir à une méthode numérique telle que MCMC pour faire l'analyse bayésienne. MCMC est juste un outil d'intégration numérique, qui permet d'utiliser des méthodes bayésiennes dans des problèmes plus complexes qui sont insolubles analytiquement, tout comme Newton-Rhapson ou Fisher Scoring sont des méthodes numériques pour résoudre des problèmes classiques qui sont insolubles.

La distribution postérieure p (b | y) utilisant le p de Jeffrey antérieur (a, b, s) proportionnel à 1 / s (où s est l'écart-type de l'erreur) est une distribution t de Student avec l'emplacement b_ols, l'échelle se_b_ols (" ols "pour" les moindres carrés ordinaires ") et n-2 degrés de liberté. Mais la distribution d'échantillonnage de b_ols est également un étudiant t avec l'emplacement b, l'échelle se_b_ols et n-2 degrés de liberté. Ainsi, ils sont identiques sauf que b et b_ols ont été échangés, donc quand il s'agit de créer l'intervalle, la "borne est + -" de l'intervalle de confiance est inversée en une "borne est + +" dans l'intervalle crédible.

Ainsi, l'intervalle de confiance et l'intervalle crédible sont analytiquement identiques, et peu importe la méthode utilisée (à condition qu'il n'y ait pas d'informations préalables supplémentaires) - alors prenez la méthode qui est moins coûteuse en termes de calcul (par exemple, celle avec moins d'inversions de matrice). Votre résultat avec MCMC montre que l'approximation particulière utilisée avec MCMC donne un intervalle crédible qui est trop large par rapport à l'intervalle crédible analytique exact. C'est probablement une bonne chose (bien que nous voudrions que l'approximation soit meilleure) que la solution bayésienne approximative apparaisse plus conservatrice que la solution bayésienne exacte.

probabilitéislogique
la source
Pas si étrange vraiment. L'une des raisons d'utiliser une méthode numérique pour trouver une réponse à un problème qui peut être résolu analytiquement est de s'assurer que l'on utilise correctement le logiciel.
Ringold
1
F(β0,β1,,βp,σ)Pr(Oui>dixX)X