使用高斯Priors的emcee

时间:2018-04-13 06:00:02

标签: python statistics bayesian emcee

我尝试使用高斯之前使用主持人并且似乎无法完全理解它。基本上我想替换

def lnprior(theta):
     a, b, c = theta
     if 1.0 < a < 2.0 and 1.0 < b < 2.0 and 1.0 < c < 2.0:
        return 0.0
     return -np.inf

有一些东西可以提供一个&#39; a&#39;来自具有mu和sigma的高斯分布。我该怎么办?喜欢这个?

def lnprior(theta):
     a, b, c = theta
     if 1.0 < b < 2.0 and 1.0 < c < 2.0:
        return 0.0
     if 0<a<20:
         mu=10
         sigma=1
         s=np.random.normal(mu, sigma)
         return s
     return -np.inf

虽然看起来并不合适?

2 个答案:

答案 0 :(得分:3)

以下方法似乎对我有用

CREATE TABLE Score (ID int IDENTITY(1,1),
                    Score int);

INSERT INTO Score
VALUES (65),(17),(97),(14),(34),(79),(37),(87),(65),(63),(15),(75),(05),(25),(38),(28),(88);
GO

CREATE TABLE ScoreRange (ID int IDENTITY(1,1),
                         [From] int, --Try to avoid keywords, and especially reserved words, for column names
                         [To] int); --Try to avoid keywords, and especially reserved words, for column names
INSERT INTO ScoreRange
VALUES (0,30),
       (60,80);
GO
SELECT *
FROM Score S;

SELECT S.*
FROM Score S
     JOIN ScoreRange SR ON S.Score BETWEEN SR.[From] AND SR.[To];
GO

DROP TABLE Score;
DROP TABLE ScoreRange;

答案 1 :(得分:1)

previous answer by isinwe是正确的答案,我只会尝试解释为什么是正确的。

先前角色

在这个问题中,有一个统一先验的例子(真的类似于docs中的例子),如果theta的值在某些约束内,则返回0,否则返回负无穷大。

这是正确的,因为此先验将用于计算后验概率:

posterior prod

然而,由于这个概率往往是非常小的数字,因此最好避免使用多个舍入错误来处理它们的对数,这意味着:

log posterior

单变量先行

因此,统一的事先喜欢:

prior example

如果满足条件,则始终保持常量,否则为零。因为这里仅比例性是相关的,归一化常数可以忽略不计。因此,当采用对数时,当满足条件时,对数将为零,否则将为负无穷大。

多个先验

在多个先验的情况下,它们相乘,一旦取对数就成了一个总和。也就是说,在如同示例的均匀先验的情况下,除非同时满足两个条件,否则先验的对数将为零, -inf + 0 = -inf

在更复杂的先验组合的情况下,我们需要回归对先验的正确解释,总和。因此,在当前的情况下,先验必须返回三个先验对数中的每一个的总和,这正是在isinwe's answer中以有效的方式完成的,即如果制服的贡献,则避免评估高斯先生已经 -inf

作为一般规则,如果条件未满足,最好首先检查均匀先验并返回 -inf ,如果满足条件,则评估所有其他更复杂的条件先验并返回它们的总和(因为均匀先验的贡献可以近似为零)。