Comment puis-je calculer une estimation de densité postérieure à partir d'un précédent et d'une vraisemblance?

9

J'essaie de comprendre comment utiliser le théorème de Bayes pour calculer un postérieur, mais je reste bloqué avec l'approche informatique, par exemple, dans le cas suivant, il n'est pas clair pour moi comment prendre le produit de l'a priori et de la vraisemblance, puis calculer le postérieur:

Pour cet exemple, je suis intéressé par le calcul de la probabilité postérieure de et j'utilise un a priori normal standard sur , mais je veux savoir comment calculer le postérieur à partir d'un précédent sur qui est représenté par une chaîne MCMC, donc je vais utiliser 1000 échantillons comme point de départ.μμ p(μ)N(μ=0,σ=1)μ

  • échantillon 1000 de la précédente.

    set.seed(0)
    prior.mu      <- 0
    prior.sigma   <- 1
    prior.samples <- sort(rnorm(1000, prior.mu, prior.sigma))
    
  • faire quelques observations:

    observations <- c(0.4, 0.5, 0.8, 0.1)
    
  • et calculer la probabilité, par exemple :p(y|μ,σ)

    likelihood <- prod(dnorm(observations, mean(prior.samplse), sd(prior.samples)))
    

ce que je ne comprends pas très bien c'est:

  1. quand / comment multiplier l'a priori par la vraisemblance?
  2. quand / comment normaliser la densité postérieure?

veuillez noter: je suis intéressé par la solution de calcul générale qui pourrait être des problèmes généralisables sans solution analytique

Abe
la source
1
Il n'est pas clair quelles sont les différentes distributions dans votre exemple. Veuillez clarifier votre distribution antérieure / conditionnelle. Parce qu'il se pourrait que vous ayez une terminologie mélangée.
Nick Sabbe
@ Nick, vous avez raison. Merci pour votre retour. J'ai essayé de clarifier.
Abe

Réponses:

8

Vous avez plusieurs choses mélangées. La théorie parle de multiplier la distribution antérieure et la probabilité, pas des échantillons de la distribution antérieure. De plus, ce que vous avez le prieur n'est pas clair, est-ce un prieur sur la moyenne de quelque chose? ou autre chose?

Ensuite, vous avez des choses inversées dans la probabilité, vos observations doivent être x avec des tirages antérieurs ou des constantes fixes connues comme la moyenne et l'écart-type. Et même alors, ce serait vraiment le produit de 4 appels à dnorm avec chacune de vos observations comme x et la même moyenne et écart-type.

Ce qui n'est vraiment pas clair, c'est ce que vous essayez de faire. Quelle est ta question? quels paramètres vous intéressent? quel (s) préalable (s) avez-vous sur ces paramètres? y a-t-il d'autres paramètres? avez-vous des priors ou des valeurs fixes pour ceux-ci?

Essayer de faire les choses comme vous êtes actuellement ne fera que vous embrouiller davantage jusqu'à ce que vous trouviez exactement votre question et que vous travailliez à partir de là.

Ci-dessous est ajouté en raison de la modification de la question d'origine.

Il vous manque encore quelques morceaux et vous ne comprenez probablement pas tout, mais nous pouvons commencer là où vous en êtes.

Je pense que vous confondez quelques concepts. Il y a une probabilité qui montre la relation entre les données et les paramètres, vous utilisez la normale qui a 2 paramètres, la moyenne et l'écart-type (ou variance, ou précision). Ensuite, il y a les distributions a priori sur les paramètres, vous avez spécifié un a priori normal avec la moyenne 0 et sd 1, mais cette moyenne et l'écart-type sont complètement différents de la moyenne et de l'écart-type de la vraisemblance. Pour être complet, vous devez connaître la probabilité SD ou placer un a priori sur la probabilité SD, pour plus de simplicité (mais moins réel), je suppose que nous savons que la probabilité SD est (pas de bonne raison autre que cela fonctionne et est différente de 1).12

Nous pouvons donc commencer de manière similaire à ce que vous avez fait et générer à partir de la précédente:

> obs <- c(0.4, 0.5, 0.8, 0.1)
> pri <- rnorm(10000, 0, 1)

Maintenant, nous devons calculer les probabilités, cela est basé sur les tirages antérieurs de la moyenne, la vraisemblance avec les données et la valeur connue de l'écart-type. La fonction dnorm nous donnera la probabilité d'un seul point, mais nous devons multiplier ensemble les valeurs pour chacune des observations, voici une fonction pour le faire:

> likfun <- function(theta) {
+ sapply( theta, function(t) prod( dnorm(obs, t, 0.5) ) )
+ }

Maintenant, nous pouvons calculer la probabilité pour chaque tirage de l'a priori pour la moyenne

> tmp <- likfun(pri)

Maintenant, pour obtenir le postérieur, nous devons faire un nouveau type de tirage, une approche similaire à l'échantillonnage de rejet consiste à échantillonner à partir des tirages moyens antérieurs proportionnels à la probabilité de chaque tirage antérieur (c'est le plus proche de l'étape de multiplication que vous étiez demander à propos de):

> post <- sample( pri, 100000, replace=TRUE, prob=tmp )

Maintenant, nous pouvons regarder les résultats des tirages postérieurs:

> mean(post)
[1] 0.4205842
> sd(post)
[1] 0.2421079
> 
> hist(post)
> abline(v=mean(post), col='green')

et comparer les résultats ci-dessus aux valeurs de forme fermée de la théorie

> (1/1^2*mean(pri) + length(obs)/0.5^2 * mean(obs))/( 1/1^2 + length(obs)/0.5^2 )
[1] 0.4233263
> sqrt(1/(1+4*4))
[1] 0.2425356

Pas une mauvaise approximation, mais il serait probablement préférable d'utiliser un outil McMC intégré pour dessiner à partir de la partie postérieure. La plupart de ces outils échantillonnent un point à la fois et non par lots comme ci-dessus.

Plus réaliste, nous ne connaîtrions pas l'écart-type de la probabilité et aurions également besoin d'un a priori pour cela (souvent l'a priori sur la variance est un ou gamma), mais alors c'est plus compliqué à calculer (McMC est utile ) et il n'y a pas de formulaire fermé avec lequel comparer.χ2

La solution générale consiste à utiliser des outils existants pour effectuer les calculs McMC tels que WinBugs ou OpenBugs (BRugs dans R donne une interface entre R et Bugs) ou des packages tels que LearnBayes dans R.

Greg Snow
la source
Merci de m'avoir aidé à clarifier cela un peu plus. J'ai mis à jour ma réponse, même si je ne suis toujours pas clair. Ma question est «quelle est la meilleure estimation de étant donné les a priori et les données?»; il n'y a pas d'autres paramètres. μ
Abe
merci d'avoir décomposé cela pour moi; J'ai eu des moments difficiles mais cela aide.
Abe