kk_contour_net_shallow/functions/fisher_exact.py

40 lines
1.2 KiB
Python
Raw Permalink Normal View History

2023-07-19 18:05:00 +02:00
from scipy.stats import fisher_exact
def fisher_excat_upper(
correct_pattern_count: int, number_of_pattern: int, p_threshold: float = 5.0 / 100.0
2023-07-19 18:34:10 +02:00
) -> float:
2023-07-19 18:05:00 +02:00
error_pattern_count = int(number_of_pattern - correct_pattern_count)
2023-07-19 18:34:10 +02:00
bound = 100.0
2023-07-19 18:05:00 +02:00
for u in range(0, correct_pattern_count):
z = int(error_pattern_count + u)
_, pvalue = fisher_exact(
[[correct_pattern_count, error_pattern_count], [number_of_pattern - z, z]],
alternative="greater",
)
if bool(pvalue > p_threshold) is False:
bound = u * 100.0 / number_of_pattern
break
return bound
def fisher_excat_lower(
correct_pattern_count: int, number_of_pattern: int, p_threshold: float = 5.0 / 100.0
2023-07-19 18:34:10 +02:00
) -> float:
2023-07-19 18:05:00 +02:00
error_pattern_count = int(number_of_pattern - correct_pattern_count)
2023-07-19 18:34:10 +02:00
bound = 0.0
2023-07-19 18:05:00 +02:00
for u in range(0, error_pattern_count):
z = int(error_pattern_count - u)
_, pvalue = fisher_exact(
[[correct_pattern_count, error_pattern_count], [number_of_pattern - z, z]],
alternative="less",
)
if bool(pvalue > p_threshold) is False:
bound = u * 100.0 / number_of_pattern
break
return bound