determine AUC variance due to actives (aucvar_a) and decoys (aucvar_d)
    :param roc_structure: list [(id, best_score, best_query, status, fpf, tpf), ...,]
    :return (aucvar_a, aucvar_d): tuple variance due to actives and decoys, respectively

def calculate_auc_var(auc_structure):
    """
    determine AUC variance due to actives (aucvar_a) and decoys (aucvar_d)
    :param roc_structure: list [(id, best_score, best_query, status, fpf, tpf), ...,]
    :return (aucvar_a, aucvar_d): tuple variance due to actives and decoys, respectively
    """

    # split data by activity class
    actives, decoys = splitter(auc_structure)

    # variance due to actives = E[ (fpf - E(fpf)a) ** 2]a
    fpf = [x[4] for x in actives]
    aucvar_a = np.var(fpf, ddof=1, dtype=np.float64)

    # variance due to decoys = E[ (tpf - E(tpf)d) ** 2]d
    tpf = [x[5] for x in decoys]
    aucvar_d = np.var(tpf, ddof=1, dtype=np.float64)

    return (aucvar_a, aucvar_d)