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

3. Доверительные интервалы

.py
Скачиваний:
0
Добавлен:
19.06.2023
Размер:
1.63 Кб
Скачать
from numpy.random import rand
from numpy import *
from scipy.stats import norm


def main():
    for distribution in (laplace, uniform):
        for n in (50, 100, 500):
            for confidence in (0.95, 0.99):
                distribution(a=2, u=2, d=3, n=n, m=1000, alpha=(1 - confidence))
            print("---")


def laplace(a, u, d, n, m, alpha):
    print(f"\nРаспределение Лапласа при n = {n}, 1 – α = {1 - alpha:.2f}")
    y1 = rand(n, m)
    y2 = rand(n, m)
    X = (log(y1) - log(y2)) * u + a

    M = median(X, axis=0)
    q = norm.ppf(1 - alpha / 2)
    k = u * q / (sqrt(n))

    fails = 0
    for i in range(m):
        if not (M[i] - k < a < M[i] + k):
            fails += 1

    print(f"Доверительный интервал: {M[0] - k:.2f}..{M[0] + k:.2f}")
    print(f"Оценка уровня доверия: {1 - fails / m:.3f}")


def uniform(a, u, d, n, m, alpha):
    print(f"\nРавномерное распределение при n = {n}, 1 – α = {1 - alpha:.2f}")
    A = a - d / 2
    B = a + d / 2
    X = (B - A) * rand(n, m) + A

    max_X = amax(X, axis=0)
    min_X = amin(X, axis=0)

    M = (max_X + min_X) / 2
    q = -log(alpha)
    k = q * (max_X - min_X) / (2 * n)

    fails = 0
    for i in range(m):
        if not (M[i] - k[i] < a < M[i] + k[i]):
            fails += 1

    print(f"Доверительный интервал: {M[0] - k[0]:.2f}..{M[0] + k[0]:.2f}")
    print(f"Оценка уровня доверия: {1 - fails / m:.3f}")


if __name__ == '__main__':
    main()