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)
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,
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)