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.