import pandas as pd import numpy as np from scipy import stats def calculate_confidence_interval(data, confidence=0.95): """ Вычисление доверительного интервала для среднего значения Parameters: data: массив данных confidence: уровень доверия (по умолчанию 95%) Returns: tuple: (среднее, нижняя граница, верхняя граница, стандартная ошибка) """ n = len(data) mean = np.mean(data) std_error = stats.sem(data) # Стандартная ошибка среднего # Вычисление доверительного интервала с использованием t-распределения ci = stats.t.interval(confidence, n-1, loc=mean, scale=std_error) return mean, ci[0], ci[1], std_error def compare_confidence_intervals(csv_file_path, confidence_levels=[0.90, 0.95, 0.99], delimiter=','): """ Сравнение доверительных интервалов для разных уровней доверия """ try: df = pd.read_csv(csv_file_path, delimiter=delimiter, header=None, names=['index', 'delay_ms']) delays = np.array(df['delay_ms'].values) print("=" * 70) print("СРАВНЕНИЕ ДОВЕРИТЕЛЬНЫХ ИНТЕРВАЛОВ ДЛЯ РАЗНЫХ УРОВНЕЙ ДОВЕРИЯ") print("=" * 70) print(f"Количество измерений: {len(delays)}") print(f"Среднее значение: {np.mean(delays):.2f} мс") print(f"Стандартная ошибка: {stats.sem(delays):.4f} мс\n") results = [] for conf in confidence_levels: mean, ci_lower, ci_upper, std_error = calculate_confidence_interval( delays, conf) width = ci_upper - ci_lower margin = width / 2 results.append({ 'confidence': conf, 'mean': mean, 'ci_lower': ci_lower, 'ci_upper': ci_upper, 'width': width, 'margin': margin }) print(f"Доверительный интервал {conf*100:.0f}%:") print(f" [{ci_lower:.2f}, {ci_upper:.2f}] мс") print(f" Ширина: {width:.2f} мс, Погрешность: ±{margin:.2f} мс") print() return results except Exception as e: print(f"Ошибка при сравнении интервалов: {e}") return None