Example #1
0
 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
Example #2
0
    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
Example #3
0
 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)
Example #4
0
    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
Example #5
0
 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
Example #6
0
 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)
Example #7
0
    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
Example #8
0
 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
Example #9
0
 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