コード例 #1
0
    def test_draw_coefficients(self):
        # Make the coefficients big, so that effects are obvious.
        unscaled_innovation_sd = np.array([10, 20, 30])
        data, coefficients, inclusion = self.simulate_data_from_model(
            time_dimension=100,
            typical_sample_size=500,
            xdim=self._xdim,
            residual_sd=self._residual_sd,
            unscaled_innovation_sd=unscaled_innovation_sd,
            p00=self._p00,
            p11=self._p11)

        model, _ = self.setup_model(data, coefficients, inclusion,
                                    self._residual_sd, unscaled_innovation_sd,
                                    self._p00, self._p11)

        niter = 1000
        draws = np.full((niter, model.xdim, model.time_dimension), np.NaN)

        for i in range(niter):
            model.draw_coefficients_given_inclusion(boom.GlobalRng.rng)
            draws[i, :, :] = model.all_coefficients.to_numpy()

        posterior_mean = np.mean(draws, axis=0)
        mean_vector = posterior_mean.flatten()
        beta_vector = coefficients.flatten()
        cor = R.corr(mean_vector, beta_vector)
        self.assertGreater(cor, .9)
コード例 #2
0
    def test_draw_inclusion_indicators(self):
        """
        Check that the model draws the inclusion indicators conditional on all
        other unknowns fixed at their true values.  The regression coefficients
        are integrated out and not conditioned on.
        """
        # Make the coefficients big, so that effects are obvious.
        unscaled_innovation_sd = np.array([10, 20, 30])
        data, coefficients, inclusion = self.simulate_data_from_model(
            time_dimension=100,
            typical_sample_size=500,
            xdim=self._xdim,
            residual_sd=self._residual_sd,
            unscaled_innovation_sd=unscaled_innovation_sd,
            p00=self._p00,
            p11=self._p11)

        model, sampler = self.setup_model(data, coefficients, inclusion,
                                          self._residual_sd,
                                          unscaled_innovation_sd, self._p00,
                                          self._p11)

        niter = 1000
        draws = np.full((niter, model.xdim, model.time_dimension), -1)
        for i in range(niter):
            sampler.draw_inclusion_indicators()
            draws[i, :, :] = model.inclusion_indicators.to_numpy()

        posterior_mean = np.mean(draws[100:, :], axis=0)
        mean_vector = posterior_mean.flatten()
        inclusion_vector = inclusion.flatten()

        cor = R.corr(inclusion_vector, mean_vector)
        self.assertGreater(cor, .6)