如何从先验和似然计算后验密度估计?


9

我试图了解如何使用贝叶斯定理来计算后验,但被计算方法所困扰,例如,在以下情况下,我不清楚如何获取先验和似然的乘积,然后计算出后:

对于此示例,我有兴趣计算的后验概率,并且在上使用标准正态先验,但是我想知道如何通过MCMC链表示的上的先验计算后验,因此我将使用1000个样本作为起点。μμ p(μ)N(μ=0,σ=1)μ

  • 从先前的样本1000。

    set.seed(0)
    prior.mu      <- 0
    prior.sigma   <- 1
    prior.samples <- sort(rnorm(1000, prior.mu, prior.sigma))
    
  • 做一些观察:

    observations <- c(0.4, 0.5, 0.8, 0.1)
    
  • 并计算可能性,例如:p(y|μ,σ)

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

我不太了解的是:

  1. 什么时候/如何将先验乘以可能性?
  2. 什么时候/如何规范后验密度?

请注意:我对一般的计算解决方案感兴趣,该解决方案可能是没有分析解决方案的可推广问题


1
目前尚不清楚示例中的不同分布。请说明您的先前/条件分布。因为可能是您混用了一些术语。
Nick Sabbe 2011年

@尼克,你是对的。感谢您的反馈。我试图澄清。
日安倍晋三

Answers:


8

您混淆了几件事。该理论讨论的是乘以先验分布和可能性,而不是乘以先验分布的样本。同样也不清楚您拥有什么先验,这是某种意义上的先验吗?或者是其他东西?

这样一来,事情的可能性就发生了逆转,您的观测值应该是x,具有先验值或已知的固定常数,即均值和标准差。即便如此,它实际上仍然是4次调用dnorm的乘积,您的每个观察结果均为x且均值和标准差相同。

真正不清楚的是您要做什么。你的问题是什么?您对哪些参数感兴趣?您对这些参数有什么先验?还有其他参数吗?您有那些先验或固定值吗?

尝试以当前的方式进行操作只会使您更加困惑,直到您弄清楚问题所在并从那里开始工作为止。

编辑完原始问题后,以下内容将添加。

您仍然缺少一些内容,可能无法理解所有内容,但是我们可以从您所处的位置开始。

我认为您会混淆一些概念。有可能显示数据与参数之间的关系,您使用的是具有2个参数的法线,即均值和标准差(或方差或精度)。然后在参数上存在先验分布,您指定了均值0和sd 1的正态先验,但均值和标准差与似然性的均值和标准差完全不同。为了完整起见,您需要知道似然度SD或在似然度SD上放置先验,为简单起见(但不太真实),我将假定我们知道似然度SD为(除了它可以工作之外没有其他充分的理由,并且不同于1)。12

因此,我们可以开始于您所做的工作,并从先前的工作中产生:

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

现在我们需要计算似然度,这是基于均值的先验绘制,具有数据的似然度以及SD的已知值。dnorm函数将给我们单点的可能性,但是我们需要将每个观测值的值相乘,下面是一个函数:

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

现在我们可以从均值的先验值计算每次平局的可能性

> tmp <- likfun(pri)

现在要获得后验,我们需要进行一种新的平局,一种与拒绝抽样类似的方法是从先前的均值抽样中抽取与每个先前的平局似然成正比的样本(这是您最近的乘法步骤)询问):

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

现在我们可以看一下后抽奖的结果:

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

并将以上结果与理论上的封闭形式值进行比较

> (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

这不是一个不好的近似值,但是使用内置的McMC工具从后部绘制可能会更好。这些工具中的大多数都一次采样一个点,而不是像上面那样分批采样。

实际上,我们将不知道可能性的SD,因此也需要先验(通常方差的先验是 χ2 或gamma),但计算起来更加复杂(McMC派上用场了),没有封闭的形式可以比较。

通用解决方案是使用现有的工具进行McMC计算,例如WinBugs或OpenBugs(R中的BRug提供R和Bug之间的接口)或软件包,例如R中的LearnBayes。


感谢您帮助我进一步阐明这一点。尽管我仍不清楚,但我已经更新了答案。我的问题是“什么是最佳估计?μ给定先验和数据?没有其他参数。
日安倍晋三

谢谢你为我解决了这个问题;我一直很艰难,但这会有所帮助。
日安倍晋三
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.