Exemple #1
0
def beta_fitting_python(meta, use_prob_bins):
    """Induce beta distribution for elicitations about highest/lowest/avg person. 
    Args:
      meta: np.array of lowest/middle/highest elicitation
      use_order_stats: True or False, which determines which fractiles used.
    Returns:
      np.array where each row contains parameters of beta distributions for each respondent.
      A row contains -1, -1 if elicitation did not satisy constraints required to produce beta distribn
    Note: order of meta and fractiles in curve fitting. I originally had these swopped.
    """
    def bcdf(x, bp1, bp2):
        return jmutils.beta_cdf_two_pts(0, x, bp1, bp2)

    if use_prob_bins:
        fractiles = np.array([1/6, .5, 5/6])
    else:
        fractiles = np.array([.2, .5, .8])

    meta = meta / 100
    #if (meta[1] <= meta[0]) or (meta[2] <= meta[1]):
    #    beta_params = [-1, -1]
    #    print("Warning! Elicited parameters which are not coherent.")
    #    print(meta)
    #else:
    meta[0] = jmutils.bound(meta[0], 0.01, 0.99)
    meta[2] = jmutils.bound(meta[2], 0.01, 0.99)
    beta_params, pcov = curve_fit(bcdf, meta, fractiles)
    return beta_params
Exemple #2
0
def calc_easy_bts_binary(responses, meta_true):
    """Calculate easiest binary version of bts using own answers and predicted percentage of ppl endorsing true
    Args:
      responses: list where elt is 0 if subject said false and 1 if subject said true.
      meta_true: list where elt is subject's prediction of fraction of ppl endorsing true.
    Returns: 
      dict where each field (bts, surprise, accuracy) points to an np.array with an elt for each subject.
    """
    assert len(responses) == len(meta_true)
    do_assert = True
    xbar_true = jmutils.mean(responses)
    xbar_true = jmutils.bound(xbar_true, 0.01, 0.99) 
    xbar = [1 - xbar_true, xbar_true]
    meta_true_trimmed = [jmutils.bound(mt, 0.01, 0.99) for mt in meta_true]
    meta_false = [1 - et for et in meta_true_trimmed]
    log_ybar = [jmutils.log_geo_mean(meta_false), jmutils.log_geo_mean(meta_true_trimmed)]
    #if (xbar_true != jmutils.mean(responses)) or (len(responses) == 1):
    #    do_assert = False
    easy_bts = calc_generic_bts(xbar, log_ybar, responses, zip(meta_false, meta_true_trimmed))
    return easy_bts