Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2. Сравнение свойств статистических оценок

.py
Скачиваний:
0
Добавлен:
19.06.2023
Размер:
1.68 Кб
Скачать
import matplotlib.pyplot as plt
from numpy.random import rand
from numpy import *


def get_r(X, title):
    a = [mean(X, axis=0),
         median(X, axis=0),
         (amax(X, axis=0) + amin(X, axis=0)) / 2]
    fig, axs = plt.subplots(3, 1)
    for i in range(3):
        axs[i].hist(a[i], bins=20)
    fig.suptitle(title)
    plt.show()
    return [std(i) for i in a]


def laplace(a, u, n, m):
    y1 = rand(n, m)
    y2 = rand(n, m)
    X = (log(y1) - log(y2)) * u + a
    r = get_r(X, f"Оценки при распределении Лапласа (n = {n})")
    t = [u * sqrt(2 / n),
         u / sqrt(n),
         0.97 * u]
    print(f"Распределение Лапласа (n = {n})")
    for i in range(3):
        difference = abs(r[i] - t[i])
        print(f"t{i} = {t[i]:.5f}, r{i} = {r[i]:.5f}, "
              f"Δ = {difference:.5f}, δ = {difference / t[i] * 100:.2f} %")


def uniform(a, d, n, m):
    A = a - d / 2
    B = a + d / 2
    X = (B - A) * rand(n, m) + A
    r = get_r(X, f"Оценки при равномерном распределении (n = {n})")
    t = [d / sqrt(12 * n),
         d / (2 * sqrt(n)),
         d / sqrt(2 * (n + 1) * (n + 2))]
    print(f"Равномерное распределение (n = {n})")
    for i in range(3):
        difference = abs(r[i] - t[i])
        print(f"t{i} = {t[i]:.5f}, r{i} = {r[i]:.5f}, "
              f"Δ = {difference:.5f}, δ = {difference / t[i] * 100:.2f} %")


for n_value in (10, 100, 1000):
    laplace(a=2, u=2, n=n_value, m=1000)

print("---")

for n_value in (10, 100, 1000):
    uniform(a=2, d=3, n=n_value, m=1000)