包括pyMC3中的测量不确定性

时间:2018-03-21 18:49:42

标签: python regression pymc3

我正在尝试将一些具有测量误差的观测值与其他一些没有测量误差的数据相匹配。如何考虑pyMC3中的测量误差?我有以下方法,这似乎给了我合理的结果,但它是正确的方法去做吗?

n_samples = 20000
with pymc3.Model() as predictive_model:
    intercept = pymc3.Normal('Intercept',mu=1.0,sd=0.2)
    exponent = pymc3.Normal('A',mu=4.2,sd=0.15)
    likelihood = pymc3.Normal('Observed', 
                          mu=intercept*x_values**exponent,                              
                          observed=observed_values,
                          sd=observed_errors)

    start = pymc3.find_MAP() 
    step = pymc3.NUTS(scaling=start)
    trace_predictive = pymc3.sample(n_samples, step, start=start,njobs=4)

其中x_valuesobserved_valuesobserved_errors是相同长度的1D numpy数组。

1 个答案:

答案 0 :(得分:1)

看起来你有一个模型C x^A,但你相信你收集的数据看起来像C x^A + eps。看起来你也完全知道测量误差,不知何故(这让我感到惊讶!)

如果您的目标是推断拦截C,指数A和测量噪音eps的某些内容,我会写出这样的模型:

with pymc3.Model() as predictive_model:
    intercept = pymc3.Normal('Intercept',mu=1.0,sd=0.2)
    exponent = pymc3.Normal('A',mu=4.2,sd=0.15)
    eps = pymc3.HalfNormal('eps', 10.)
    likelihood = pymc3.Normal('Observed', 
                              mu=intercept*x_values**exponent,
                              sd=eps
                              observed=observed_values - observed_errors)

    trace_predictive = pymc3.sample(n_samples, njobs=4)

(请注意,现在有更好的方法来初始化MAP,并自动选择它们!)