Python 如何在PyMC3中正确定义Beta分布的混合

Python 如何在PyMC3中正确定义Beta分布的混合,python,pymc,pymc3,mcmc,Python,Pymc,Pymc3,Mcmc,我正在尝试使用两个Beta分布的混合(我不知道每个分布的权重)和来自的mixed来拟合数据。代码如下: model=pm.Model() with model: alpha1=pm.Uniform("alpha1",lower=0,upper=20) beta1=pm.Uniform("beta1",lower=0,upper=20) alpha2=pm.Uniform("alpha2",lower=0,upper=20) beta2=pm.Uniform("be

我正在尝试使用两个Beta分布的混合(我不知道每个分布的权重)和来自的
mixed
来拟合数据。代码如下:

model=pm.Model()
with model:
    alpha1=pm.Uniform("alpha1",lower=0,upper=20)
    beta1=pm.Uniform("beta1",lower=0,upper=20)
    alpha2=pm.Uniform("alpha2",lower=0,upper=20)
    beta2=pm.Uniform("beta2",lower=0,upper=20)
    w=pm.Uniform("w",lower=0,upper=1)
    b1=pm.Beta("B1",alpha=alpha1,beta=beta1)
    b2=pm.Beta("B2",alpha=alpha2,beta=beta2)
    mix=pm.Mixture("mix",w=[1.0,w],comp_dists=[b1,b2])
运行此代码后,我得到以下错误:
AttributeError:“list”对象没有属性“mean”
。有什么建议吗?

PyMC3附带了一个包含有用示例的模块。通过在目录中搜索“混合物”一词,我发现:

请注意,调用了。谷歌搜索“pymc3 dist classmethod”导致了这一点,这解释了

。。。每个
发行版
都有一个
dist
类方法,该方法返回可在PyMC模型之外使用的精简发行版对象

除此之外,我不完全清楚为什么这里需要精简的发行版,但它似乎是可行的:

import pymc3 as pm

model = pm.Model()
with model:
    alpha1 = pm.Uniform("alpha1", lower=0, upper=20)
    beta1 = pm.Uniform("beta1", lower=0, upper=20)
    alpha2 = pm.Uniform("alpha2", lower=0, upper=20)
    beta2 = pm.Uniform("beta2", lower=0, upper=20)
    w = pm.Uniform("w", lower=0, upper=1)
    b1 = pm.Beta.dist(alpha=alpha1, beta=beta1)
    b2 = pm.Beta.dist(alpha=alpha2, beta=beta2)
    mix = pm.Mixture("mix", w=[1.0, w], comp_dists=[b1, b2])
注意,当使用
dist
classmethod时,名称字符串被省略

import pymc3 as pm

model = pm.Model()
with model:
    alpha1 = pm.Uniform("alpha1", lower=0, upper=20)
    beta1 = pm.Uniform("beta1", lower=0, upper=20)
    alpha2 = pm.Uniform("alpha2", lower=0, upper=20)
    beta2 = pm.Uniform("beta2", lower=0, upper=20)
    w = pm.Uniform("w", lower=0, upper=1)
    b1 = pm.Beta.dist(alpha=alpha1, beta=beta1)
    b2 = pm.Beta.dist(alpha=alpha2, beta=beta2)
    mix = pm.Mixture("mix", w=[1.0, w], comp_dists=[b1, b2])