Source code for optilab.utils.stat_test

"""
Functions related to statistical testing.
"""

from typing import List

from scipy.stats import mannwhitneyu
from tabulate import tabulate


[docs] def mann_whitney_u_test_grid(data_lists: List[List[float]]) -> List[List[float]]: """ Perform a grid run of Mann-Whitney U test on given list of data values and return a 2d array with results. Args: data_lists: List of lists of values to perform test on. Returns: Results as a 2d array with p-values. """ n = len(data_lists) results_table = [[None for _ in range(n)] for _ in range(n)] for i in range(n): for j in range(n): if i != j: p_value = mannwhitneyu( data_lists[i], data_lists[j], alternative="less", )[1] results_table[i][j] = p_value return results_table
[docs] def display_test_grid(test_results: List[List[float]]) -> str: """ Given a grid of statistical test results, display them in a printable table. Args: test_results: Grid of p-values from the statistical test. Returns: Stat tests as a tabulated, ready to print table with p-values. """ n = len(test_results) printable_results = [["-" for _ in range(n)] for _ in range(n)] for i in range(n): for j in range(n): if i != j: printable_results[i][j] = f"{test_results[i][j]:.4f}" header = list(range(n)) return tabulate( printable_results, headers=header, showindex="always", tablefmt="github", )