in src/mozanalysis/bayesian_stats/binary.py [0:0]
def get_samples(df, num_enrollments_label, num_conversions_label, num_samples):
"""Return samples from Beta distributions.
Assumes a Beta(1, 1) prior.
Args:
df: A pandas dataframe of integers:
* ``df.index`` lists the experiment branches
* ``df.columns`` is
``(num_enrollments_label, num_conversions_label)``
num_enrollments_label: Label for the df column containing the
number of enrollments in each branch.
num_conversions_label: Label for the df column containing the
number of conversions in each branch.
num_samples: The number of samples to compute
Returns a pandas.DataFrame of sampled conversion rates
* columns: list of branches
* index: enumeration of samples
"""
samples = pd.DataFrame(index=np.arange(num_samples), columns=df.index)
for branch_label, r in df.iterrows():
# Oh, for a better prior...
samples[branch_label] = np.random.beta(
r.loc[num_conversions_label] + 1,
r.loc[num_enrollments_label] - r.loc[num_conversions_label] + 1,
size=num_samples,
)
return samples