def log_likelihood(self): if self._normalizer is None: self._normalizer, _, _ = kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.sigma_obs, self.data) return self._normalizer
def sample_predictions(self, Tpred, states_noise, obs_noise): _, filtered_mus, filtered_sigmas = kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.sigma_obs, self.data) init_mu = self.A.dot(filtered_mus[-1]) init_sigma = self.sigma_states + self.A.dot( filtered_sigmas[-1]).dot(self.A.T) randseq = np.zeros((Tpred-1, self.n)) if states_noise: L = np.linalg.cholesky(self.sigma_states) randseq += np.random.randn(Tpred-1, self.n).dot(L.T) states = np.empty((Tpred, self.n)) states[0] = np.random.multivariate_normal(init_mu, init_sigma) for t in xrange(1,Tpred): states[t] = self.A.dot(states[t-1]) + randseq[t-1] obs = states.dot(self.C.T) if obs_noise: L = np.linalg.cholesky(self.sigma_obs) obs += np.random.randn(Tpred, self.p).dot(L.T) return obs
def _filter(self): self._normalizer, self.filtered_mus, self.filtered_sigmas = \ kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.d, self.sigma_obs, self.data)
def sample_predictions(self, Tpred, states_noise, obs_noise): _, filtered_mus, filtered_sigmas = kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.sigma_obs, self.data) init_mu = self.A.dot(filtered_mus[-1]) init_sigma = self.sigma_states + self.A.dot(filtered_sigmas[-1]).dot( self.A.T) randseq = np.zeros((Tpred - 1, self.n)) if states_noise: L = np.linalg.cholesky(self.sigma_states) randseq += np.random.randn(Tpred - 1, self.n).dot(L.T) states = np.empty((Tpred, self.n)) states[0] = np.random.multivariate_normal(init_mu, init_sigma) for t in xrange(1, Tpred): states[t] = self.A.dot(states[t - 1]) + randseq[t - 1] obs = states.dot(self.C.T) if obs_noise: L = np.linalg.cholesky(self.sigma_obs) obs += np.random.randn(Tpred, self.p).dot(L.T) return obs
def log_likelihood(self): if self._normalizer is None: self._normalizer, _, _ = kalman_filter(self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.sigma_obs, self.data) return self._normalizer
def sample_predictions(self, Tpred, Npred, obs_noise=True): _, filtered_mus, filtered_sigmas = kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.sigma_obs, self.data) init_mu = self.A.dot(filtered_mus[-1]) init_sigma = self.sigma_states + self.A.dot(filtered_sigmas[-1]).dot( self.A.T) randseq = np.einsum('tjn,ij->tin', np.random.randn(Tpred - 1, self.n, Npred), np.linalg.cholesky(self.sigma_states)) states = np.empty((Tpred, self.n, Npred)) states[0] = np.random.multivariate_normal(init_mu, init_sigma, size=Npred).T for t in xrange(1, Tpred): states[t] = self.A.dot(states[t - 1]) + randseq[t - 1] obs = np.einsum('ij,tjn->tin', self.C, states) if obs_noise: obs += np.einsum('tjn,ij->tin', np.random.randn(Tpred, self.p, Npred), np.linalg.cholesky(self.sigma_obs)) return obs
def _ll_diag(self): if self._normalizer is None: self._normalizer, _, _ = kalman_filter( self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.d, self.sigma_obs, self.data) return self._normalizer
def _ll_diag(self): if self._normalizer is None: self._normalizer, _, _ = kalman_filter(self.mu_init, self.sigma_init, self.A, self.sigma_states, self.C, self.d, self.sigma_obs, self.data) return self._normalizer