2013-12-22 37 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

模擬混合物的另一種方法是使用潛在變量模型,其中單個觀測值具有與從哪個分佈派生相對應的指標。例如,這些指標可以用分類分佈來建模。這可以在之後具有狄利克雷等。