应用贝叶斯:估计双峰分布

机器算法验证 分布 贝叶斯
2022-03-11 19:41:10

我试图根据可变数量的输入来估计一堆双峰分布,即两个平均值和两个标准差。如果没有输入,则应返回一个常量值。根据我对贝叶斯的轶事了解,应该就是这样,不是吗?根据传入的证据调整先验。不过,我的问题是,我将如何详细说明?也许我只是以某种方式错过了一个好的教程。

2个回答

电磁算法

作为对@Daniel Johnson 的回应,我想快速向您展示如何在R. 使用包mixtools点击链接)。然后,您可以使用normalmixEM带有选项的函数k=2来估计二分量高斯混合分布的参数。让我们举个例子:

# Let's look at the old faithful data

library(mixtools)

data(faithful)
plot(density(faithful$waiting), las=1, col="steelblue", lwd=2, main="")

老忠实的等待时间

分布显然是双峰的,所以我们要计算一个包含 2 个分量 ( k=2) 的混合模型:

out <- normalmixEM(faithful$waiting, k=2, epsilon = 1e-03, fast=TRUE)

summary(out)    

summary of normalmixEM object:
          comp 1    comp 2
lambda  0.361283  0.638717
mu     54.628096 80.099412
sigma   5.882584  5.859425
loglik at estimate:  -1034.002 

第一个正态分布的估计均值为54.6标准差为5.88,第二个平均值80.1标准差为5.86. 这很好地对应于上图中的峰值。


贝叶斯方法

要使用贝叶斯方法估计混合模型,请使用bayesmixR单击此处获取链接)。不过,您需要先在计算机上安装JAGS(只需下载可执行文件并安装即可)。为了说明它的用途,我重新运行了上面的旧忠实数据示例。我选择独立的(选项independence)和无信息的先验(选项priorsUncertain)。此外,我们运行 10000 个 MCMC 样本(选项n.iter=10000)并丢弃前 1000 个作为老化样本(选项burn.in=1000):

library(bayesmix)

data(faithful)

bayesmod <- BMMmodel(faithful$waiting, k=2, priors=list(kind = "independence", parameter = "priorsUncertain", hierarchical = NULL)) # k=2 for two components

jcontrol <- JAGScontrol(variables = c("mu", "tau", "eta", "S"), burn.in = 1000, n.iter = 10000, seed = 10)

z <- JAGSrun(faithful$waiting, model = bayesmod, control = jcontrol, tmp = FALSE, cleanup = TRUE)

zSort <- Sort(z, by = "mu")

zSort

模型输出为(“mu”表示均值的估计值,“sigma2”表示方差的估计值):

Markov Chain Monte Carlo (MCMC) output:
Start = 1001 
End = 11000 
Thinning interval = 1 

 Empirical mean, standard deviation and 95% CI for eta 
         Mean     SD   2.5%  97.5%
eta[1] 0.3622 0.0318 0.3013 0.4251
eta[2] 0.6378 0.0318 0.5749 0.6987

 Empirical mean, standard deviation and 95% CI for mu 
       Mean     SD  2.5% 97.5%
mu[1] 54.63 0.7365 53.25 56.12
mu[2] 80.08 0.5128 79.02 81.05

 Empirical mean, standard deviation and 95% CI for sigma2 
           Mean    SD  2.5% 97.5%
sigma2[1] 36.11 7.209 24.61 52.76
sigma2[2] 35.38 5.066 26.90 46.34

估计的手段是54.6380.08标准差(方差“sigma2”的平方根)为(36.11)6.01(35.38)5.95. 这与我们用 计算的估计值非常接近normalmixEM

I think "A Gentle Tutorial of the EM Algorithm and its Application to Parameter Estimation for Gaussian Mixture and Hidden Markov Models" is exactly what you're looking for. Particularly the third section: Finding Maximum Likelihood Mixture Densities Parameters via EM.