pymc3随机变量向量的行为与相同大小的np数组不同(ValueError:使用序列设置数组元素。)

时间:2019-03-05 06:14:47

标签: python numpy scipy pymc3

我正在与pymc3进行贝叶斯推理,并且我已经建立了以下简单的层次模型(注意-从技术上讲,它还不是层次模型,因为当前只有一个参数向量,但这是一个最小的示例)失败,它将改变):

import import pandas as pd 
import numpy as np 
from scipy.stats import norm, lognorm, nbinom

from pymc3 import Uniform, Beta, Binomial, sample, Model, NUTS, NegativeBinomial, Normal, HalfStudentT, traceplot

with Model() as model:
    s = 0.2 

    log_mean = Normal('log_means', mu=0, sd=s, shape=(scaled_counts.shape[0],1))
    log_sd = 0.5 

    probs = norm.cdf(bounds[:,1], loc=log_mean, scale=log_sd) - norm.cdf(bounds[:,0], loc=log_mean, scale=log_sd)
    expected_counts = bin_probs * scaled_inputs[:, np.newaxis]

    counts = NegativeBinomial('counts', mu=expected_counts, alpha=np.array(scaled_counts.sum(axis=0)).reshape(1, 6), observed=scaled_counts, shape=(scaled_counts.shape[0],6))

with model:
    trace=sample(2000, step=NUTS())

无论如何,问题出在probs =行中。使用norm(bounds[:,1], loc=test_array, scale=0.5)scipy.stats调用bounds[:,1].shape = (6,)(来自test_array.shape = (19217,1))可以正常工作。应用广播规则,得到的数组输出为(19217,6)。但是,当我用log_mean代替test_array时,出现了一个错误,提示ValueError: setting an array element with a sequence.。这很奇怪,因为我可以使用print(log_mean.tag.test_value.shape)验证log_mean.shape = (19217,1)

我想知道我在做什么错。它似乎不是固有的多维性的结果,因为我可以将shape参数替换为1并仍然得到错误的结果。与尝试将pymc3 RV传递到scipy函数有关吗?这是否意味着我必须使用pm.math为普通RV实现cdf?谢谢!

使用导入内容编辑的05/03/19。

0 个答案:

没有答案