test-app-ldat/confidence.py
2025-10-29 23:57:03 +03:00

69 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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