Skip to content

Commit

Permalink
Fixed Bonferroni (it was correct before, but unsafe wrt floating point)
Browse files Browse the repository at this point in the history
  • Loading branch information
niemasd committed Feb 7, 2022
1 parent 19f9ef3 commit ea58623
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions MESS.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ def qvalues_nocorrection(pvalues):

# bonferroni correction
def qvalues_bonferroni(pvalues):
return [min(1, p*len(pvalues)) for p in pvalues]
len_p = len(pvalues)
return [min(1, p*len_p) for p in pvalues]

# benjamini-hochberg correction
def qvalues_benjamini_hochberg(pvalues):
warn("Benjamini-Hochberg correction implementation seems to have a bug. Recommend using Bonferroni")
sorted_unique_pvals = sorted(set(pvalues))
rank = {p:(i+1) for i,p in enumerate(sorted_unique_pvals)}
return [min(1, p*len(pvalues)/rank[p]) for p in pvalues]
len_p = len(pvalues); qvalues = [None for _ in range(len_p)]
for rank, pair in enumerate(sorted((p,ind) for ind,p in enumerate(pvalues))):
p, ind = pair; qvalues[ind] = min(1, p*len_p/(rank+1))
return qvalues

# constants about the correction techniques
CORRECTION = {
Expand Down Expand Up @@ -210,7 +211,7 @@ def parse_args():
parser.add_argument('-ot', '--output_tsv', required=True, type=str, help="Output MESS Spreadsheet (TSV)")
parser.add_argument('-op', '--output_pdf', required=True, type=str, help="Output MESS Distribution (PDF)")
parser.add_argument('--ignore_case', action='store_true', help="Ignore Case in Student Responses")
parser.add_argument('-c', '--correction', required=False, type=str, default='bonferroni', help="Multiple Hypothesis Test Correction (options: %s)" % ', '.join(sorted(CORRECTION.keys())))
parser.add_argument('-c', '--correction', required=False, type=str, default='benjamini_hochberg', help="Multiple Hypothesis Test Correction (options: %s)" % ', '.join(sorted(CORRECTION.keys())))
parser.add_argument('-rm', '--reg_min', required=False, type=float, default=None, help="Minimum MESS for Regression")
parser.add_argument('-rM', '--reg_max', required=False, type=float, default=None, help="Maximum MESS for Regression")
parser.add_argument('-rd', '--reg_xdelta', required=False, type=float, default=0.0001, help="X Delta for Regression")
Expand Down

0 comments on commit ea58623

Please sign in to comment.