2013-12-22 38 views
0

我有一个具有多个峰的分布。我想尝试为每个驼峰,高斯,指数,威布尔等等拟合几种不同类型的分布。然而,就目前而言,似乎我必须为每个组合手动定义一个随机类。我想要做的是像pymc中的通用混合模型

@stochastic(model_a, model_b, observed=True) 
def mixture(value=observed_time_series, model_a_parameters, model_b_parameters, p): 
    def logp(value, model_a_parameters, model_b_parameters): 
     return p*model_a.logp(value, *model_a_parameters) + (1-p)*model_b.logp(value, *model_b_parameters) 
    def random(model_a_parameters, model_b_paramters, ratio): 
     if(random() < ratio): 
      return model_a.random() 
     return model_b.random() 

这样的代表团是可能的吗?有没有一个标准的方法来做到这一点?阻止类似上述事情的主要原因是我无法想出将变量组合在一起的任何方法。

回答

1

您正处在正确的轨道上。您stochastic装饰可以简单地简化为:

@observed 
def mixture(...): 
    ... 

而且,你只需要如果你需要从可能性来样来定义random

模拟混合物的另一种方法是使用潜在变量模型,其中单个观测值具有与从哪个分布派生相对应的指标。例如,这些指标可以用分类分布来建模。这可以在之后具有狄利克雷等。