我找不到这方面的例子,或者我没有看到与我的问题的相似之处:
我试图模拟一个多模态分布,看起来好像是由两个卡方分布的总和定义的(但是,可以采用任何分布的组合......)。
现在我不知道如何结婚"那些发行版。我正在寻找这样的东西,但它并没有这样做:
来自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)
我该怎么做?结果函数应该建模如下:
答案 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)