"""Phân tích số đo minh họa theo phiên ghép cặp.""" from math import ceil from random import Random from statistics import median # Sáu cặp p95, mỗi cặp đo trên cùng một kịch bản giả lập. PAIRED = [(108, 116), (114, 128), (105, 113), (120, 132), (110, 106), (118, 129)] def nearest_rank(values, quantile): if not values or not 0 < quantile <= 1: raise ValueError("Cần mẫu không rỗng và 0 < q <= 1") return sorted(values)[ceil(quantile * len(values)) - 1] def paired_bootstrap(deltas, repeats=2000, seed=2026): random = Random(seed) sampled = [median(random.choices(deltas, k=len(deltas))) for _ in range(repeats)] return nearest_rank(sampled, 0.025), nearest_rank(sampled, 0.975) if __name__ == "__main__": assert nearest_rank(range(1, 21), 0.95) == 19 deltas = [new - baseline for baseline, new in PAIRED] print("Chênh lệch theo phiên (ms):", deltas) print("Trung vị chênh lệch:", median(deltas), "ms") print("Khoảng bootstrap minh họa:", paired_bootstrap(deltas), "ms") assert median(deltas) == 9.5