我观察了几条光发射线,我有一个模型,根据两个参数q
和z
预测了这些线的几个(通量)比率,我想推断出来。你知道吗
我已经创建了@pymc.deterministic
对象,这些对象的值分别为q
和z
(每一个对象在一些物理上感兴趣的区域上都有非信息性的优先级),并将它们转换为“预测”比率。大约有7个比率,它们的形式是:
@pymc.deterministic(observed=True, value=NII_SII)
def NII_SII_th(q=q, z=z):
return NII_SII_g(np.array([q, z]))
我还可以定义从观察中得出的比率,例如
@pymc.deterministic
def NII_SII(NII_6584=NII_6584, SII_6717=SII_6717,
rcf_NII_6584=rcf_NII_6584, rcf_SII_6717=rcf_SII_6717):
return np.log10(
(rcf_NII_6584*NII_6584) / \
(rcf_SII_6717*SII_6717))
例如,NII_6584
是其中一条测线的观测通量,rcf_NII_6584
是同一测线的通量校正。这些修正本身由线波长(已知无限精度)和参数EBV
确定,该参数可根据两条线的观测通量比计算,这两条线的通量比应具有固定比率r
:
@pymc.deterministic
def EBV(Ha=Ha, Hb=Hb, r=r, R_V=R_V, Ha_l=Ha_l, Hb_l=Hb_l):
kHb = gas_meas.calzetti_k(lams=np.array([Ha_l]), Rv=R_V)
kHa = gas_meas.calzetti_k(lams=np.array([Hb_l]), Rv=R_V)
return 2.5 / (kHb - kHa) * np.log10((Ha/Hb) / r)
我对R_V
的值也有优先权。你知道吗
测量值本身表示为正态分布,例如
NII_6584 = pymc.Normal(
'NII_6584', mu=f_row['[NII]6584'],
tau=1./e_row['[NII]6584']**2.,
observed=True, value=f_row['[NII]6584'])
我想得到R_V
、EBV
、q
和z
的估计值。然而,当我用所有这些来做一个pymc
Model
时,我被告知Deterministic
对象不能有观测值:
TypeError: __init__() got an unexpected keyword argument 'value'
首先,我是否误解了Deterministic
对象的本质?如果是这样的话,我如何根据没有直接观察到的值来推断呢?你知道吗
第二,我是否正确构建了观察结果?我不得不将观测到的通量同时指定为均值和值参数,这似乎很奇怪,但除了对通量均值和方差建模之外,我不清楚还能做些什么,这似乎是不必要的复杂。你知道吗
任何建议都将不胜感激!你知道吗
我认为你没有正确地构建你的观察结果。这不是一个最低限度的例子,但也许我们可以澄清一些困惑。你知道吗
首先,我不认为@deterministic decorator接受参数
value = <something>
。不清楚您的确定性语句中的哪一个是实际模型,但请尝试将您的代码转换为以下模板:相关问题 更多 >
编程相关推荐