def test_internal_options(self): """Test that the internal use of bootstrap within an estimator using custom options works.""" x = np.random.normal(size=(1000, 2)) z = np.random.normal(size=(1000, 1)) t = np.random.normal(size=(1000, 1)) t2 = np.random.normal(size=(1000, 1)) y = x[:, 0] * 0.5 + t + np.random.normal(size=(1000, 1)) opts = BootstrapOptions(50, 2) est = NonparametricTwoStageLeastSquares(PolynomialFeatures(2), PolynomialFeatures(2), PolynomialFeatures(2), None, inference=opts) est.fit(y, t, x, None, z) # test that we can get an interval for the same attribute for the bootstrap as the original, # with the same shape for the lower and upper bounds lower, upper = est.effect_interval(x, t, t2) for bound in [lower, upper]: self.assertEqual(np.shape(est.effect(x, t, t2)), np.shape(bound)) self.assertFalse(np.allclose(lower, upper)) # test that we can do the same thing once we provide percentile bounds lower, upper = est.effect_interval(x, t, t2, lower=10, upper=90) for bound in [lower, upper]: self.assertEqual(np.shape(est.effect(x, t, t2)), np.shape(bound)) self.assertFalse(np.allclose(lower, upper))
def test_internal_options(self): """Test that the internal use of bootstrap within an estimator using custom options works.""" x = np.random.normal(size=(1000, 2)) z = np.random.normal(size=(1000, 1)) t = np.random.normal(size=(1000, 1)) t2 = np.random.normal(size=(1000, 1)) y = x[:, 0:1] * 0.5 + t + np.random.normal(size=(1000, 1)) opts = BootstrapInference(50, 2) est = NonparametricTwoStageLeastSquares(PolynomialFeatures(2), PolynomialFeatures(2), PolynomialFeatures(2), None) est.fit(y, t, x, None, z, inference=opts) # test that we can get an interval for the same attribute for the bootstrap as the original, # with the same shape for the lower and upper bounds eff = est.effect(x, t, t2) lower, upper = est.effect_interval(x, T0=t, T1=t2) for bound in [lower, upper]: self.assertEqual(np.shape(eff), np.shape(bound)) # test that the lower and upper bounds differ assert (lower <= upper).all() assert (lower < upper).any() # test that the estimated effect is usually within the bounds assert np.mean(np.logical_and(lower <= eff, eff <= upper)) >= 0.7 # test that we can do the same thing once we provide percentile bounds lower, upper = est.effect_interval(x, T0=t, T1=t2, alpha=0.2) for bound in [lower, upper]: self.assertEqual(np.shape(eff), np.shape(bound)) # test that the lower and upper bounds differ assert (lower <= upper).all() assert (lower < upper).any() # test that the estimated effect is usually within the bounds assert np.mean(np.logical_and(lower <= eff, eff <= upper)) >= 0.65