Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def anderson(x, y, tol=0.1):
- """Возвращает значение и p-value статистики Андерсона-Дарлинга для данных выборок.
- Args:
- x: numpy.array первой выборки,
- y: numpy.array второй выборки,
- tol: стандартное отклонение относительной ошибки метода Монте-Карло.
- Возвращаемое значение p-value удовлетворяет неравенству
- (1 - p-value) / (p-value * mc_reps) <= tol ** 2,
- где mc_reps --- это число проделанных итераций Монте-Карло.
- """
- def A_count(x1, y1):
- full_len = len(x1) + len(y1)
- y1.extend(x1)
- z = sorted(y1)
- A_kv = 0
- for i in range(1, full_len):
- c_i = len([el for el in x1 if el <= z[i]])
- denominator = (full_len * c_i - len(x1) * i) ** 2
- numerator = i * (full_len - i)
- A_kv += denominator / numerator
- return A_kv / (len(x1) * len(y1))
- x_list = list(x)
- y_list = list(y)
- A_cons = A_count(x_list, y_list)
- x_list.extend(y_list)
- z = x_list
- count = 0
- sum_indicator = 0
- for perm in permutations(z):
- count += 1
- A_new = A_count(list(perm[:len(x)]), list(perm[len(x):]))
- sum_indicator += int(A_new < A_cons)
- p_value = sum_indicator / count
- #print(p_value, sum_indicator, A_new)
- if p_value * count > 0 and p_value != 1:
- if (1 - p_value) / (p_value * count) <= tol ** 2:
- return [A_cons, p_value]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement