commit e22f8523dac0f7d4f381c29f16e869f29510e3ad Author: Mika Date: Sat Dec 13 14:37:15 2025 +0000 Add bpf_varianz_test/src/bpf_varianz_test/core.py diff --git a/bpf_varianz_test/src/bpf_varianz_test/core.py b/bpf_varianz_test/src/bpf_varianz_test/core.py new file mode 100644 index 0000000..6ce87a2 --- /dev/null +++ b/bpf_varianz_test/src/bpf_varianz_test/core.py @@ -0,0 +1,53 @@ +from typing import List, Tuple +import numpy as np +from scipy import stats +import statistics + + +def perform_levene_test(kprobe_samples: List[float], bpf_samples: List[float]) -> Tuple[float, bool]: + """Führt den Levene-Test zur Prüfung der Varianzgleichheit durch. + + Args: + kprobe_samples: Messwerte der kprobe-Methode. + bpf_samples: Messwerte der BPF-Methode. + + Returns: + Tuple aus p-Wert und boolescher Signifikanzentscheidung (True, wenn Varianzen gleich sind). + """ + if not kprobe_samples or not bpf_samples: + raise ValueError("Beide Stichproben müssen Werte enthalten.") + + # Levene-Test über scipy + stat, p_value = stats.levene(kprobe_samples, bpf_samples, center='median') + + alpha = 0.05 + variances_equal = p_value > alpha + return float(p_value), variances_equal + + +def bootstrap_variance_confidence_interval(samples: List[float], n_iterations: int) -> Tuple[float, float]: + """Berechnet Bootstrap-Konfidenzintervalle der Varianz einer Stichprobe. + + Args: + samples: Messwerte einer Methode. + n_iterations: Anzahl der Bootstrap-Iterationen. + + Returns: + Tuple aus (untere, obere) Grenze des Konfidenzintervalls. + """ + if not samples: + raise ValueError("Stichprobe darf nicht leer sein.") + if n_iterations <= 0: + raise ValueError("n_iterations muss positiv sein.") + + data = np.array(samples) + n = len(data) + variances = np.empty(n_iterations) + + for i in range(n_iterations): + resampled = np.random.choice(data, size=n, replace=True) + variances[i] = np.var(resampled, ddof=1) + + lower = np.percentile(variances, 2.5) + upper = np.percentile(variances, 97.5) + return float(lower), float(upper)