def __init__(self, niter=10, verbose=10, theta0=None, ssm_cls=None, prior=None, data=None, store_x=False): for k in ['ssm_cls', 'prior', 'data', 'theta0', 'niter', 'store_x', 'verbose']: setattr(self, k, locals()[k]) theta = np.empty(shape=niter, dtype=self.prior.dtype) if store_x: x = ssm_cls.state_container(niter, len(self.data)) self.chain = ssp.ThetaParticles(theta=theta, x=x) else: self.chain = ssp.ThetaParticles(theta=theta)
def __init__(self, niter=10, seed=None, verbose=0, theta0=None, adaptive=True, scale=1., rw_cov=None): """ Parameters ---------- niter: int number of MCMC iterations seed: int (default=None) pseudo-random seed (if None, generator is not seeded) verbose: int (default=0) progress report printed every (niter/verbose) iterations (never if 0) theta0: a structured array of size=1 starting point, simulated from the prior if set to None adaptive: True/False whether to use the adaptive version or not scale: positive scalar (default = 1.) in the adaptive case, covariance of the proposal is scale^2 times (2.38 / d) times the current estimate of the target covariance rw_cov: (d, d) array covariance matrix of the random walk proposal (set to I_d if None) """ for k in ['niter', 'seed', 'verbose', 'theta0', 'adaptive']: setattr(self, k, locals()[k]) self.chain = ssp.ThetaParticles(theta=np.empty(shape=niter, dtype=self.prior.dtype), lpost=np.empty(shape=niter)) self.nacc = 0 d = self.chain.dim if self.adaptive: optim_scale = 2.38 / np.sqrt(d) self.scale = scale * optim_scale self.cov_tracker = VanishCovTracker(dim=d, Sigma0=rw_cov) self.L = self.scale * self.cov_tracker.L else: if rw_cov is None: self.L = np.eye(d) else: self.L = cholesky(rw_cov, lower=True)
def step0(self): th0 = self.prior.rvs(size=1) if self.theta0 is None else self.theta0 self.prop = ssp.ThetaParticles(theta=th0, lpost=np.zeros(1)) self.compute_post() self.chain.copyto_at(0, self.prop, 0)