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

4. Вычисление мощности критериев согласия (возможно, неполная)

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


def kolmogorov(a, u, d, n, m, alpha, theta):
    A = a - d / 2
    B = a + d / 2

    y1 = rand(n, m)
    y2 = rand(n, m)
    X = sort((log(y1) - log(y2)) * u + a)
    # X = sort((B - A) * rand(n, m) + A)

    theoretical_dots = rand(n, m)
    observed_dots = rand(n, m)
    abs_sum = sum(abs(X))
    f_practical = 0
    failed = 0
    for i in range(m):
        observed = 0
        for j in range(n):
            x = X[j][i]
            f_practical += abs(x)
            if rand() >= theta:
                f = 1 - 0.5 * exp(-(x - a) / u) if x >= a else 0.5 * exp((x - a) / u)
            else:
                f = (x - A) / (B - A) if A <= x < B else 0 if x < A else 1
            # observed = max(max(observed, abs(f - j / n)), abs(f - (j - 1) / n))
            observed = max(observed, abs(f - f_practical / abs_sum))
            theoretical_dots[j][i] = f
            observed_dots[j][i] = f_practical / abs_sum
        # if observed * sqrt(n*n/(n+n)) < 1.36:
        if observed * sqrt(n) < 1.36:
            failed += 1
    print(failed / m)
    plt.scatter(X[0], theoretical_dots[0])
    plt.scatter(X[0], observed_dots[0])
    plt.show()


def main():
    n = 10
    confidence = 0.95
    kolmogorov(a=2, u=2, d=3, n=n, m=1000, alpha=(1 - confidence), theta=.0)


if __name__ == '__main__':
    main()