为其他两个分布的组合建模
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)
我找不到这方面的示例,或者我看不出与我的问题有相似之处:
我试图对一个多峰分布建模,它看起来好像是由两个卡方分布的总和定义的(尽管可以采用任何分布组合...)。
现在我不知道如何 "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)