def _(samples, estimator, repetitions=1000, probs=0.68): estimand = torch.zeros(repetitions) for i in range(repetitions): bootstrap_values = resample(samples, num_samples=len(samples), replacement=True) estimand[i] = estimator(bootstrap_values) return pi(estimand, probs)
def _(dist, estimator, preprocess=None, repetitions=1000, probs=0.68): estimand = torch.zeros(repetitions) for i in range(repetitions): samples = dist.sample() if preprocess is not None: samples = preprocess(samples) # bootstrap_values = resample(samples, num_samples=len(samples), replacement=True) bootstrap_values = np.random.choice(samples, size=len(samples), replace=True) estimand[i] = estimator(bootstrap_values) return pi(estimand, probs)
def get_percentile_confidence_interval(samples, probs): pi = stats.pi(samples, prob=probs) below_interval_1 = (samples < pi[0].item()).sum().float() / len(samples) below_interval_2 = (samples < pi[1].item()).sum().float() / len(samples) df = { "LPI": [round(below_interval_1.item(), 2) * 100, round(pi[0].item(), 2)], "UPI": [round(below_interval_2.item(), 2) * 100, round(pi[1].item(), 2)] } df = pd.DataFrame.from_dict(df) return df
def _pi(x, dim=0): return pi(x, prob=0.8, dim=dim)
def test_hpdi(): x = torch.randn(20000) assert_equal(hpdi(x, prob=0.8), pi(x, prob=0.8), prec=0.01) x = torch.empty(20000).exponential_(1) assert_equal(hpdi(x, prob=0.2), torch.tensor([0.0, 0.22]), prec=0.01)
def test_pi(): x = torch.randn(1000).exp() assert_equal(pi(x, prob=0.8), quantile(x, probs=[0.1, 0.9]))
def _(dist, estimator, repetitions=1000, probs=0.68): samples = dist.sample((repetitions, )) estimand = torch.zeros(repetitions) for i in range(repetitions): estimand[i] = estimator(samples[i]) return pi(estimand, probs)
def test_pi(): x = torch.empty(1000).log_normal_(0, 1) assert_equal(pi(x, prob=0.8), quantile(x, probs=[0.1, 0.9]))