"""Statistical analysis helpers.""" from typing import Dict, List, Optional import numpy as np import pandas as pd from scipy import stats def descriptive_stats(values: List[float]) -> Dict[str, float]: if not values: return {"mean": 0.0, "std": 0.0, "min": 0.0, "max": 0.0, "median": 0.0} arr = np.array(values, dtype=float) return { "mean": round(float(np.mean(arr)), 4), "std": round(float(np.std(arr, ddof=1)), 4), "min": round(float(np.min(arr)), 4), "max": round(float(np.max(arr)), 4), "median": round(float(np.median(arr)), 4), } def anova(groups: List[List[float]]) -> Dict[str, Optional[float]]: """One-way ANOVA across groups.""" if len(groups) < 2 or any(len(g) < 2 for g in groups): return {"f_statistic": None, "p_value": None} f_stat, p_value = stats.f_oneway(*groups) return {"f_statistic": round(float(f_stat), 4), "p_value": round(float(p_value), 6)} def paired_t_test(a: List[float], b: List[float]) -> Dict[str, Optional[float]]: """Paired t-test between two samples.""" if len(a) != len(b) or len(a) < 2: return {"t_statistic": None, "p_value": None} t_stat, p_value = stats.ttest_rel(a, b) return {"t_statistic": round(float(t_stat), 4), "p_value": round(float(p_value), 6)}