Скачиваний:
0
Добавлен:
25.09.2025
Размер:
5.4 Кб
Скачать
//типовик на выборку из 100 значений по теорверу. кто хорошо шарят в проге на питоне(не я, да и вас мало таких xd) исправьте код, он графиков не выдает, я не смог с ебаными библеотеками сдружиться. ну или кому сильно охото, делайте через матлаб.


import numpy as np

# Данные из таблицы вариационного ряда
data = np.array([
    -4.25765, -1.82237, -1.26152, -0.65453, -0.29011, 0.00151, 0.22113, 0.53057, 0.93914, 1.37352,
    -4.19948, -1.55551, -1.20941, -0.61600, -0.25562, 0.05322, 0.22369, 0.60078, 1.00409, 1.39523,
    -3.77559, -1.49532, -1.20926, -0.52344, -0.24755, 0.07397, 0.32211, 0.62310, 1.00792, 1.51744,
    -2.77991, -1.45795, -1.15766, -0.46131, -0.23288, 0.09022, 0.32427, 0.62907, 1.00996, 1.57544,
    -2.44141, -1.45071, -1.15049, -0.40127, -0.19685, 0.10667, 0.35028, 0.67761, 1.02739, 1.82364,
    -2.35213, -1.38040, -1.01109, -0.33859, -0.17294, 0.12045, 0.38764, 0.70301, 1.03427, 1.89707,
    -2.29334, -1.36138, -0.97092, -0.33492, -0.16837, 0.12207, 0.39163, 0.70750, 1.04710, 1.91663,
    -2.13989, -1.35805, -0.93715, -0.32487, -0.07276, 0.13541, 0.44536, 0.76359, 1.08987, 2.01669,
    -2.04223, -1.35155, -0.82698, -0.29854, -0.06508, 0.15264, 0.46366, 0.78385, 1.16743, 2.42721,
    -2.00090, -1.27631, -0.70288, -0.29493, -0.05773, 0.17108, 0.50798, 0.91836, 1.36126, 2.99704])

# Выборочная медиана m_p
mp = np.median(data)

# Выборочное среднее (x̄) и выборочное среднее квадратическое отклонение (S)
x_mean = np.mean(data)
S_100 = np.std(data, ddof=1)  # Оценка стандартного отклонения с исправлением на степень свободы

# Оценка sp = (ξ_100 - ξ_1) / 5
sp = (data[-1] - data[0]) / 5

print("1.")
print("Выборочная медиана: ",mp)
print("Выборочное среднее: ",x_mean)
print("Выборочное среднее квадратическое отклонение: ",S_100)
print("Оценка по краям: ",sp)

# Границы равновероятных интервалов для гипотез N и L (из условия)
bounds_N = np.array([-1.28155, -0.84162, -0.52440, -0.25335, 0.00000, 0.25335, 0.52440, 0.84162, 1.28155])
bounds_L = np.array([-1.60944, -0.91629, -0.51083, -0.22314, 0.00000, 0.22314, 0.51083, 0.91629, 1.60944])

# Подсчёт количества значений в каждом интервале для обеих гипотез
freq_N, _ = np.histogram(data, bins=np.concatenate(([-np.inf], bounds_N, [np.inf])))
freq_L, _ = np.histogram(data, bins=np.concatenate(([-np.inf], bounds_L, [np.inf])))

# Расчёт статистик χ² для N и L
K_N = np.sum((freq_N - 10)**2 / 10)
K_L = np.sum((freq_L - 10)**2 / 10)

print("2.")
print(freq_N)
print(freq_L)
print(K_N)
print(K_L)

from scipy.stats import t, chi2

# Параметры выборки
n = len(data)  # Объём выборки

# Уровни доверия
beta_levels = [0.7, 0.95]

# Доверительные интервалы для математического ожидания (t-распределение)
intervals_mean = []
for beta in beta_levels:
    t_crit = t.ppf((1 + beta) / 2, df=n-1)  # Квантиль t-распределения
    delta_mean = t_crit * S_100 / np.sqrt(n)  # Полуширина интервала
    intervals_mean.append((x_mean - delta_mean, x_mean + delta_mean))

# Доверительные интервалы для дисперсии (χ²-распределение)
intervals_var = []
for beta in beta_levels:
    chi2_low = chi2.ppf((1 - beta) / 2, df=n-1)  # Нижняя квантиль χ²
    chi2_high = chi2.ppf((1 + beta) / 2, df=n-1)  # Верхняя квантиль χ²
    var_low = ((n - 1) * S_100**2) / chi2_high  # Нижняя граница дисперсии
    var_high = ((n - 1) * S_100**2) / chi2_low  # Верхняя граница дисперсии
    intervals_var.append((var_low, var_high))

print("4.")
print("Интервалы",intervals_mean, intervals_var)


from scipy.stats import chi2

# Границы интервалов из условий задачи (гипотезы N и L)
intervals_N = np.array([-1.28155, -0.84162, -0.52440, -0.25335, 0.00000, 0.25335, 0.52440, 0.84162, 1.28155])
intervals_L = np.array([-1.60944, -0.91629, -0.51083, -0.22314, 0.00000, 0.22314, 0.51083, 0.91629, 1.60944])

# Частоты для гипотезы N
counts_N, _ = np.histogram(data, bins=np.concatenate([[-np.inf], intervals_N, [np.inf]]))

# Частоты для гипотезы L
counts_L, _ = np.histogram(data, bins=np.concatenate([[-np.inf], intervals_L, [np.inf]]))

# Вычисляем K_N и K_L
K_N = np.sum((counts_N - 10) ** 2 / 10)
K_L = np.sum((counts_L - 10) ** 2 / 10)

# Критические значения для chi-squared распределения
alpha_levels = [0.5, 0.2, 0.05, 0.025]
critical_values = {alpha: chi2.ppf(1 - alpha, df=9) for alpha in alpha_levels}

print("5.")
print(K_N)
print(K_L)
print(critical_values)