Ejemplo n.º 1
0
 def __init__(self, **kwargs):
     StateSpaceModel.__init__(self, **kwargs)
     if self.sigma0 is None:
         self.sigma0 = self.sigmaX / np.sqrt(1. - self.rho**2)
     self.kf = kalman.Kalman(F=self.rho, G=1., covX=self.sigmaX**2,
                             covY=self.sigmaY**2,
                             cov0=self.sigma0**2)
Ejemplo n.º 2
0
 def loglik(self, theta, t=None): 
     # Note: for simplicity we ignore argument t here,
     # and compute the full log-likelihood
     ll = np.zeros(theta.shape[0])
     for n, th in enumerate(theta): 
         mod = ReparamLinGauss(**smc_samplers.rec_to_dict(th))
         kf = kalman.Kalman(data=data, ssm=mod)
         kf.filter()
         ll[n] = np.sum(kf.logpyt)
     return ll 
Ejemplo n.º 3
0
from particles import kalman
from particles import state_space_models

# parameter values
sigmaX = 1.
sigmaY = .2
rho = 0.9
T = 1000
N = 200

# define ss model, simulate data
ssm = kalman.LinearGauss(sigmaX=sigmaX, sigmaY=sigmaY, rho=rho)
true_states, data = ssm.simulate(T)

# computes true log-likelihood
kf = kalman.Kalman(ssm=ssm, data=data)
kf.filter()
true_loglik = np.sum(kf.logpyt)

# FK model
fk_model = state_space_models.GuidedPF(ssm=ssm, data=data)

# Run SMC algorithm for different values of ESS_min
alphas = list(np.linspace(0., .1, 11)) + list(np.linspace(0.15, 1., 18))
results = particles.multiSMC(fk=fk_model,
                             N=N,
                             ESSrmin=alphas,
                             nruns=200,
                             nprocs=1)

# PLOTS
Ejemplo n.º 4
0
 def __init__(self, **kwargs):
     StateSpaceModel.__init__(self, **kwargs)
     self.kf = kalman.Kalman(F=self.F, G=self.G, covX=self.covX,
                             covY=self.covY, mu0=self.mu0, cov0=self.cov0)
Ejemplo n.º 5
0
# Define ssm, simulate data
T = 100
my_ssm = kalman.LinearGauss(sigmaX=1., sigmaY=.2, rho=.9)
true_states, data = my_ssm.simulate(T)

# FK models
models = OrderedDict()
models['bootstrap'] = ssms.Bootstrap(ssm=my_ssm, data=data)
models['guided'] = ssms.GuidedPF(ssm=my_ssm, data=data)
models['APF'] = ssms.AuxiliaryPF(ssm=my_ssm, data=data)
# Uncomment line below if you want to include the "Boostrap APF"
# (APF with proposal set to dist. of X_t|X_{t-1}) in the comparison
#models['bootAPF'] = ssm.AuxiliaryBootstrap(ssm=my_ssm, data=data)

# Compute "truth"
kf = kalman.Kalman(ssm=my_ssm, data=data)
kf.filter()
true_loglik = np.cumsum(kf.logpyt)
true_filt_means = [f.mean for f in kf.filt]

# Get results
N = 10**3
results = particles.multiSMC(fk=models, N=N, nruns=25, moments=True)

# PLOTS
# =====
plt.style.use('ggplot')
savefigs = False  # whether you want to save figs as pdfs

# black and white
sb.set_palette(sb.dark_palette("lightgray", n_colors=len(models),
Ejemplo n.º 6
0
rho, sigX, sigY, sig0 = 0.9, 1., 0.2, 3.
uni_ssm = kalman.LinearGauss(rho=rho, sigmaX=sigX, sigmaY=sigY, sigma0=sig0)

univariate = False # test univariate or multivariate model?
if univariate:
    ssm = uni_ssm
    F, G, mu0 = rho, 1., 0.
    covX, covY, cov0 = sigX**2, sigY**2, sig0**2
else:
    ssm = mv_ssm

# data
x, y = ssm.simulate(T)

# Our Kalman filter
mykf = kalman.Kalman(ssm=ssm, data=y)
mykf.smoother()  # this does both filtering and smoothing

# Their Kalman filter
theirkf = pykalman.KalmanFilter(transition_matrices = F,
                                observation_matrices = G,
                                transition_covariance=covX,
                                observation_covariance=covY,
                                initial_state_mean=mu0,
                                initial_state_covariance=cov0)

their_data = np.array(y).squeeze()
their_filt_means, their_filt_covs = theirkf.filter(their_data)
their_filt_means = their_filt_means.squeeze()

# Comparing filtering means and covs