Exemplo n.º 1
0
def mv_simple():
    mu = np.array([-.1, .5, 1.1])
    p = np.array([
        [2., 0, 0],
        [.05, .1, 0],
        [1., -0.05, 5.5]])

    tau = np.dot(p, p.T)

    with pm.Model() as model:
        x = pm.MvNormal('x', pm.constant(mu), pm.constant(
            tau), shape=3, testval=np.array([.1, 1., .8]))

    H = tau
    C = np.linalg.inv(H)

    return model.test_point, model, (mu, C)
Exemplo n.º 2
0
def mv_simple():
    mu = np.array([-.1, .5, 1.1])
    p = np.array([[2., 0, 0], [.05, .1, 0], [1., -0.05, 5.5]])

    tau = np.dot(p, p.T)

    with pm.Model() as model:
        x = pm.MvNormal('x',
                        pm.constant(mu),
                        pm.constant(tau),
                        shape=3,
                        testval=np.array([.1, 1., .8]))

    H = tau
    C = np.linalg.inv(H)

    return model.test_point, model, (mu, C)
Exemplo n.º 3
0
def mv_simple_discrete():
    d= 2
    n = 5
    p = np.array([.15,.85])

    with pm.Model() as model:
        x = pm.Multinomial('x', n, pm.constant(p), shape=d, testval=np.array([1,4]))
        mu = n * p

        #covariance matrix
        C = np.zeros((d,d))
        for (i, j) in product(range(d), range(d)):
            if i == j:
                C[i,i] = n * p[i]*(1-p[i])
            else:
                C[i,j] = -n*p[i]*p[j]

    return model.test_point, model, (mu, C)
Exemplo n.º 4
0
def mv_simple_discrete():
    d = 2
    n = 5
    p = np.array([.15, .85])

    with pm.Model() as model:
        x = pm.Multinomial('x',
                           n,
                           pm.constant(p),
                           shape=d,
                           testval=np.array([1, 4]))
        mu = n * p

        #covariance matrix
        C = np.zeros((d, d))
        for (i, j) in product(range(d), range(d)):
            if i == j:
                C[i, i] = n * p[i] * (1 - p[i])
            else:
                C[i, j] = -n * p[i] * p[j]

    return model.test_point, model, (mu, C)
Exemplo n.º 5
0
import numpy as np
import matplotlib.pyplot as plt
import pymc as pm
k = 3
ndata = 500
spread = 5
centres = np.array([-spread, 0, spread])
v = np.random.randint(0, k, ndata)
data = centres[v] + np.random.randn(ndata)

l_res = plt.hist(data)

plt.show()

a = pm.constant(np.array([1., 1., 1.]))
p = pm.Dirichlet('p', a=a, shape=k)

p_min_potential = pm.Potential('p_min_potential',
                               tt.switch(tt.min(p) < .1, -np.inf, 0))

means = pm.Normal('means', mu=[0, 0, 0], sd=15, shape=k)

order_means_potential = pm.Potential(
    'order_means_potential',
    ttswitch(means[1] - means[0] < 0, -np.inf, 0) +
    ttswitch(means[2] - means[1] < 0, -np.inf, 0))