first commit
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"""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)}
|
||||
Reference in New Issue
Block a user