为其他两个分布的组合建模

Model a distributions that is a combination of two others

我找不到这方面的示例,或者我看不出与我的问题有相似之处:

我试图对一个多峰分布建模,它看起来好像是由两个卡方分布的总和定义的(尽管可以采用任何分布组合...)。

现在我不知道如何 "marry" 那些分布。我正在寻找这样的东西,但它不是这样工作的:

from pymc3 import Model, HalfNormal, find_MAP, sample, traceplot, ChiSquared, 确定性 basic_model = 型号()

with basic_model:
    nu1 = HalfNormal("nu1", sd = 1)
    nu2 = HalfNormal("nu2", sd = 1)
    cs1 = ChiSquared("cs1", nu = nu1)
    cs2 = ChiSquared("cs2", nu = nu2)
    # this is wrong, but it shows what I would like to achieve:
    Y_obs = Deterministic("Y_obs", cs1, cs2, observed = tx)
    start = find_MAP(model = basic_model)
    trace = sample(2000, start = start)

traceplot(trace)

我该怎么做?生成的函数应该像这样建模:

检查以下模型,该模型假定您的数据是两个卡方分布的混合。此类模型的名称是 混合模型。此处,分类分布用于将每个数据点分配给两个卡方分布之一。您可能需要根据您的问题调整它,但我认为这是一个好的开始。

with pm.Model() as model:
    nus = pm.HalfCauchy('nus', beta=10, shape=2)

    category = pm.Categorical('category', p=[0.5, 0.5], shape=len(x))

    obs = pm.ChiSquared('obs', nu=nus[category], observed=x)

    step = pm.ElemwiseCategorical(vars=[category], values=[0, 1])
    trace = pm.sample(1000, step)