from particles import distributions as dists
from particles import kalman
from particles import mcmc
from particles import smc_samplers
from particles import state_space_models as ssms 

def msjd(theta):
    """Mean squared jumping distance.
    """
    s = 0. 
    for p in theta.dtype.names:
        s += np.sum(np.diff(theta[p], axis=0) ** 2)
    return s

# prior 
dict_prior = {'varX': dists.InvGamma(a=2., b=2.),
              'varY': dists.InvGamma(a=2., b=2.),
              'rho':dists.Uniform(a=-1., b=1.)
             }
prior = dists.StructDist(dict_prior)

# State-space model 
class ReparamLinGauss(kalman.LinearGauss):
    def __init__(self, varX=1., varY=1., rho=0.):
        sigmaX = np.sqrt(varX)
        sigmaY = np.sqrt(varY)
        sigma0 = sigmaX
        # Note: We take X_0 ~ N(0, sigmaX^2) so that Gibbs step is tractable
        kalman.LinearGauss.__init__(self, sigmaX=sigmaX, sigmaY=sigmaY, rho=rho,
                                    sigma0=sigma0)
 
Ejemplo n.º 2
0
This script was used to generate the plot in the Python corner of Chapter 16
(on Bayesian inference and PMCMC algorithms). 
"""

from collections import OrderedDict
from matplotlib import pyplot as plt
import numpy as np

from particles import distributions as dists
from particles import kalman
from particles import mcmc

# prior
dict_prior = {
    'varX': dists.InvGamma(a=2., b=2.),
    'varY': dists.InvGamma(a=2., b=2.),
    'rho': dists.Uniform(a=-1., b=1.)
}
prior = dists.StructDist(dict_prior)


# State-space model
class ReparamLinGauss(kalman.LinearGauss):
    def __init__(self, varX=1., varY=1., rho=0.):
        sigmaX = np.sqrt(varX)
        sigmaY = np.sqrt(varY)
        sigma0 = sigmaX
        # Note: We take X_0 ~ N(0, sigmaX^2) so that Gibbs step is tractable
        kalman.LinearGauss.__init__(self,
                                    sigmaX=sigmaX,
Ejemplo n.º 3
0
dep_prior_dict = OrderedDict()
dep_prior_dict['rho'] = dists.Uniform(a=0., b=1.)
dep_prior_dict['sigma'] = dists.Cond(
    lambda theta: dists.Gamma(b=1. / theta['rho']))
dep_prior = dists.StructDist(dep_prior_dict)
dep_theta = dep_prior.rvs(size=2000)

plt.figure()

plt.scatter(dep_theta['rho'], dep_theta['sigma'])
plt.axis([0., 1., 0., 8.])
plt.xlabel('rho')
plt.ylabel('sigma')

reg_prior_dict = OrderedDict()
reg_prior_dict['sigma2'] = dists.InvGamma(a=2., b=3.)
reg_prior_dict['beta'] = dists.MvNormal(cov=np.eye(20))
reg_prior = dists.StructDist(reg_prior_dict)
reg_theta = reg_prior.rvs(size=200)

from particles import state_space_models as ssm


class StochVol(ssm.StateSpaceModel):
    default_parameters = {'mu': -1., 'rho': 0.95, 'sigma': 0.2}

    def PX0(self):  # Distribution of X_0
        return dists.Normal(loc=self.mu,
                            scale=self.sigma / np.sqrt(1. - self.rho**2))

    def PX(self, t, xp):  # Distribution of X_t given X_{t-1}=xp (p=past)