PyMC使用未知方法和协方差建模层次回归

时间:2013-11-09 00:00:46

标签: python bayesian pymc

模型

我有以下统计模型:

r_i ~ N(r | mu_i, sigma)

mu_i = w . Q_i

w ~ N(w | phi, Sigma)

prior(phi, Sigma) = NormalInvWishart(0, 1, k+1, I_k)

sigma已知的地方。

观察到

Q_ir_i(奖励)。

在这种情况下,r_imu_i是标量,w是40x1,Q_i是1x40,phi是40x1,{{1}是40x40。

LaTeX格式化版本:http://mathurl.com/m2utrz4

Python代码

我正在尝试创建一个生成一些样本的PyMC模型,然后近似Sigmaphi

Sigma

但是,当我运行应用程序时,我收到以下错误:

import pymc as pm
import numpy as np

SAMPLE_SIZE = 100
q_samples = ... # Q created elsewhere
reward_sigma = np.identity(SAMPLE_SIZE) * 0.1
phi_true = (np.random.rand(40)+1) * -2
sigma_true = np.random.rand(40, 40) * 2. - 1.
weights_true = np.random.multivariate_normal(phi_true, sigma_true)
reward_true = np.random.multivariate_normal(np.dot(q_samples,weights_true), reward_sigma)

with pm.Model() as model:
    phi = pm.MvNormal('phi', np.zeros((ndims)), np.identity((ndims)) * 2)
    sigma = pm.InverseWishart('sigma', ndims+1, np.identity(ndims))
    weights = pm.MvNormal('weights', phi, sigma)
    rewards = pm.Normal('rewards', np.dot(weights, q_samples), reward_sigma, observed=reward_true)

with model:
    start = pm.find_MAP()
    step = pm.NUTS()
    trace = pm.sample(3000, step, start)

pm.traceplot(trace)

我是否以某种方式设置了我的模型错误?

1 个答案:

答案 0 :(得分:3)

我认为你错过了MvNormal的形状参数。我认为MvNormal(...,shape = ndim)应该解决这个问题。我们应该找出一种更好的推断方法。