69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
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
|