Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.71 KB | None | 0 0
  1. def anderson(x, y, tol=0.1):
  2.     """Возвращает значение и p-value статистики Андерсона-Дарлинга для данных выборок.
  3.    Args:
  4.        x: numpy.array первой выборки,
  5.        y: numpy.array второй выборки,
  6.        tol: стандартное отклонение относительной ошибки метода Монте-Карло.
  7.            Возвращаемое значение p-value удовлетворяет неравенству
  8.            (1 - p-value) / (p-value * mc_reps) <= tol ** 2,
  9.            где mc_reps --- это число проделанных итераций Монте-Карло.
  10.    """
  11.     def A_count(x1, y1):
  12.         full_len = len(x1) + len(y1)
  13.         y1.extend(x1)
  14.         z = sorted(y1)
  15.         A_kv = 0
  16.         for i in range(1, full_len):
  17.             c_i = len([el for el in x1 if el <= z[i]])
  18.             denominator = (full_len * c_i - len(x1) * i) ** 2
  19.             numerator = i * (full_len - i)
  20.             A_kv += denominator / numerator
  21.         return A_kv / (len(x1) * len(y1))
  22.  
  23.     x_list = list(x)
  24.     y_list = list(y)
  25.     A_cons = A_count(x_list, y_list)
  26.     x_list.extend(y_list)
  27.     z = x_list
  28.    
  29.     count = 0
  30.     sum_indicator = 0
  31.     for perm in permutations(z):
  32.         count += 1
  33.         A_new = A_count(list(perm[:len(x)]), list(perm[len(x):]))
  34.         sum_indicator += int(A_new < A_cons)
  35.         p_value = sum_indicator / count
  36.         #print(p_value, sum_indicator, A_new)
  37.         if p_value * count > 0 and p_value != 1:
  38.             if (1 - p_value) / (p_value * count) <= tol ** 2:
  39.                
  40.                 return [A_cons, p_value]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement