From 7802eab33f46e1217f1d353a28ca9c2008b6a771 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Tue, 21 Jul 2020 08:27:37 +0200 Subject: [PATCH] [test.test_cli] Improve unit tests for significance script --- bob/ip/binseg/engine/significance.py | 44 ++++++++++++++++------------ bob/ip/binseg/test/test_cli.py | 7 +++-- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/bob/ip/binseg/engine/significance.py b/bob/ip/binseg/engine/significance.py index 54b2bb86..9fc64afd 100644 --- a/bob/ip/binseg/engine/significance.py +++ b/bob/ip/binseg/engine/significance.py @@ -6,6 +6,9 @@ import itertools import textwrap import multiprocessing +import logging +logger = logging.getLogger(__name__) + import h5py from tqdm import tqdm import numpy @@ -806,31 +809,34 @@ def write_analysis_text(names, da, db, f): # * The dependent variable should be approximately normally distributed. [!!!] # * The dependent variable should not contain any outliers. [OK] - f.write("\nPaired Significance Tests:\n") + if (diff == 0.0).all(): + logger.error("Differences are exactly zero between both " + "patch distributions, for **all** samples. Statistical " + "significance tests are not meaningful in this context and " + "will be skipped. This typically indicates an issue with " + "the setup of prediction folders (duplicated?)") + return + + f.write("\nPaired significance tests:\n") w, p = scipy.stats.ttest_rel(da, db) f.write(f" * Paired T (H0: same distro): S = {w:g}, p = {p:.5f}\n") - try: - f.write(" * Wilcoxon:\n") + f.write(" * Wilcoxon:\n") - w, p = scipy.stats.wilcoxon(diff) - f.write(f" * H0 = same distro: W = {w:g}, p = {p:.5f}\n") + w, p = scipy.stats.wilcoxon(diff) + f.write(f" * H0 = same distro: W = {w:g}, p = {p:.5f}\n") - w, p = scipy.stats.wilcoxon(diff, alternative="greater") - f.write( - f" * H0 = med({names[0]}) < med({names[1]}): " - f"W = {w:g}, p = {p:.5f}\n" - ) + w, p = scipy.stats.wilcoxon(diff, alternative="greater") + f.write( + f" * H0 = med({names[0]}) < med({names[1]}): " + f"W = {w:g}, p = {p:.5f}\n" + ) - w, p = scipy.stats.wilcoxon(diff, alternative="less") - f.write( - f" * H0 = med({names[0]}) > med({names[1]}): " - f"W = {w:g}, p = {p:.5f}\n" - ) - except ValueError as e: - f.write(f" ERROR: Differences are exactly zero between both " - f"patch distributions. The Wilcoxon test does not work in " - f"these conditions (review your prediction directories): {e}\n") + w, p = scipy.stats.wilcoxon(diff, alternative="less") + f.write( + f" * H0 = med({names[0]}) > med({names[1]}): " + f"W = {w:g}, p = {p:.5f}\n" + ) def write_analysis_figures(names, da, db, fname): diff --git a/bob/ip/binseg/test/test_cli.py b/bob/ip/binseg/test/test_cli.py index b427185c..b27ec4a3 100644 --- a/bob/ip/binseg/test/test_cli.py +++ b/bob/ip/binseg/test/test_cli.py @@ -568,9 +568,10 @@ def _check_significance(runner): keywords = { r"^Evaluating patch 'accuracy' on": 2, r"^Evaluating patch 'accuracy' differences on": 1, - r"^#Samples/Median/Avg/Std.Dev.": 1, - r"^Paired T-test": 1, - r"^Wilcoxon test": 3, + #r"^Basic statistics from distributions:$": 1, + r"^Writing analysis figures": 1, + r"^Writing analysis summary": 1, + r"^Differences are exactly zero": 2, } buf.seek(0) logging_output = buf.read() -- GitLab