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)
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)