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

时间:2016-05-23 10:16:31

标签: pymc pymc3

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

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

现在我不知道如何结婚"那些发行版。我正在寻找这样的东西,但它并没有这样做:

来自pymc3 import Model,HalfNormal,find_MAP,sample,traceplot,ChiSquared,Deterministic basic_model = 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)

我该怎么做?结果函数应该建模如下:

enter image description here

1 个答案:

答案 0 :(得分:1)

检查以下模型,此模型假设您的数据是两个卡方分布的混合。此类型号的名称是混合模型。这里,分类分布用于将每个数据点分配给两个卡方分布中的一个。您可能需要根据您的问题进行调整,但我认为这是一个良好的开端。

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)