Возникает еще вопрос: существуют ли такие распределения
для
, что распределение статистики
имеет те же среднее и дисперсию (по которым и считаются критические точки при достаточно больших
), что при равенстве распределений?
Да, интересный вопрос!
igor_ivanov1. НЕТЪ
2. НЕТЪ
Но если брать "просто случайный", как в Вашей модели, то доля элементов из "верхней" и "нижней" частей будет по мере роста объёма выборки стремиться к 50%, и способность Манна-Уитни различить распределения будет стремиться к нулю.
Увы, я сразу тоже посмотрел и этот случай. Как и в случае с нормальным распределением с разными дисперсиями, при увеличении размера выборки со 100 до 1000 и до 10 000 нет никаких признаков схождения.
В Вашем случае (с моим его "случайным" пониманием) то же: при увеличении выборки до 10 000 (с сохранением количества повторов в Монте-Карло на уровне 100 000) зигзаги уменьшаются, а ухмылка QQ плота для значений
p сохраняется. Более того, в Вашем случае частота отвержения нулевой гипотезы на концах 0.025 даже нарастает:
0.05483 (ДИ Клоппера-Пирсона 0.05343-0.05626, значение
p для отличия от теоретических 0.025 очень близко к нулю (floating point точность ноутбука не позволяет отличить его от нуля)) и в 0.05403 (ДИ Клоппера-Пирсона 0.05264-0.05545, значение
p для отличия от теоретических 0.025 очень близко к нулю (floating point точность ноутбука не позволяет отличить его от нуля))).
Ниже код и реальный QQ-plot для значений
p.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import mannwhitneyu, binomtest, uniform, randint
import gc
размер_выборки = 10000
размер_выборки_MC = 1000
значения_p = []
for _ in range(100):
gc.collect()
U1 = uniform.rvs(size=(размер_выборки, размер_выборки_MC)) + 2 * randint.rvs(low=0, high=2, size=(размер_выборки, размер_выборки_MC))
U2 = uniform.rvs(size=(размер_выборки, размер_выборки_MC)) + 1
значения_p_10000 = mannwhitneyu(U1,
U2,
alternative='greater').pvalue
значения_p.append(значения_p_10000)
значения_p = np.concatenate(значения_p)
значения_p = np.sort(значения_p)
plt.plot(np.linspace(0.0,1.0,размер_выборки_MC*100),значения_p)
plt.xlabel('Теоретические квантили', fontsize=18)
plt.ylabel('Эмпирические квантили', fontsize=18)
plt.title('p-value to p-value plot', fontsize=28)
plt.xlim(0.0,1.0)
plt.ylim(0.0,1.0)
plt.show()
print(binomtest((значения_p < 0.025).sum(), размер_выборки_MC*100, p=0.025).proportion_ci())
print(binomtest((значения_p < 0.025).sum(), размер_выборки_MC*100, p=0.025))
print(binomtest((значения_p > 0.975).sum(), размер_выборки_MC*100, p=0.025).proportion_ci())
print(binomtest((значения_p > 0.975).sum(), размер_выборки_MC*100, p=0.025))
Причины асимптотического несхожденияНо Ваш утрированный пример (в моем "случайном" понимании) помог мне сообразить сегодня, почему они асимптотически не сходятся и вообще почему этот утрированный случай не дает распределение U неасимптотически и асимптотически тоже.
Ниже я рассматриваю вариант только двух равных по размеру выборок (где размер каждой из них — n).
Как известно (из публикации Манна и Уитни):
Представим процесс получения U на двух выборках размером n, по очереди получая пары случайных величин (по одной на выборку) от 1-й до n-нной.
Получаем 1-й элемент 2-й выборки: его значение предсказуемо от 1 до 2. Если 1-й элемент 1-й выборки окажется больше, т.е. примет значение от 2 до 3, то при равенстве функций распределения мы могли бы сразу констатировать только то, что он больше 1-го элемента 2-й выборки (который принял значение от 1 до 2) и добавили бы в U единицу. Но в Вашем утрированном случае, получив 1-й элемент 1-й выборки больше 1-го элемента 2-й выборки, мы точно знаем, что он будет больше вообще всех n элементов 2-й выборки. Поэтому смело можем добавить n в U. Если бы 1-й элемент 1-й выборки принял значение от 0 до 1 и был бы меньше 1-го элемента 2-й выборки, то его отношение к последующим элементам 2-й выборки в случае равенства функций распределения оставалось бы интригой, но в Вашем утрированном случае мы можем сразу быть уверенными, что он внесет ноль в U для всех своих соотношений с n элементами 2-й выборки.
Иными словами U в Вашем утрированном случае имеет распределение
.
Матожидание биномиального распределения c p=0.5 равно
, а дисперсия
.
Соответственно матожидания такого U в Вашем утрированном случае будет
(что совпадает с матожиданием U при равенстве функций распределения), а его дисперсия
(что
асимптотически в полтора раза больше, чем дисперсия U при равенстве функций распределения). Поэтому когда тест Манна-Уитни при больших выборках нормирует U и использует нормальную аппроксимацию, мы на конце, где должно быть 0.025 значений, получаем около 0.0548, как в Монте-Карло выше и в Питоне ниже:
import numpy as np
from scipy.stats import norm
ξ1 = norm(loc=0, scale=1)
ξ2 = norm(loc=0, scale=np.sqrt(1.5))
print(1.0 - ξ2.cdf(ξ1.ppf(1.0 - 0.025)))
Код:
0.05476559192618757