Sergey.Bochkanov wrote:
Скажите, а нельзя ли запостить код, в котором воспроизводится это поведение? Я еще раз провел тестирование, теперь уже в ручном режиме. При равенстве медиан lefttail, righttail и bothtails имеют ожидаемое равномерное распределение в диапазоне [0,1]. Т.е. всё работает.
Ммм... под рукой точного теста нет, но там всё по-простому: сгенерировал два семпла, сравнил. Примерно так (пишу из головы прямо в форум, поэтому могут быть синтаксические неточности -- прошу прощения):
Code:
Random rnd = new Random();
double[] s1 = new double[1024];
double[] s2 = new double[1024];
for(int j=0; j<1024; j++)
{
s1[j] = rnd.NextDouble() - 0.5;
s2[j] = rnd.NextDouble() - 0.5;
}
double both, lt, rt;
alglib.mannwhitneyutest(s1, s1.Length, s2, s2.length, out both, out lt, out rt);
if (both < 0.95)
throw new Exception();
Как-то ожидаю, что "тест на равенство медиан" при равенстве медиан вернет мне высокое значение для двустороннего p-value.
А по факту both у меня порядка 0.4, lt ~ 0.2, rt ~ 0.75. Это никак не вяжется со смыслом теста и настораживает.
Можете написать какие значения для этих трёх p-value у Вас получаются?
При этом если ввести искуственное смещение на пару сотых (имхо небольшое), то всё детектируется очень четко и однозначно.
Например:
Code:
s1[j] = (rnd.NextDouble() - 0.5) + 0.01;
s2[j] = (rnd.NextDouble() - 0.5) - 0.01;
даёт очень низкое both < 0.1.
Sergey.Bochkanov wrote:
Возможно, мы по-разному интерпретируем результаты теста? Или вы использовали генератор случайных чисел с дефектом?
Дефект в генераторе очень вряд ли: поведение схоже как на стандартном NextDouble(), так и на гауссе N(0, 1) из учебника.
Что касается моей интерпретации -- это запросто. Повторюсь: в данном тесте ожидаю получить очень высокое p-value для двух-хвостой статистики и
сравнительно низкие для обеих односторонних. Потому что на мой взгляд именно это и будет служить индикацией равенства медиан в этих выборках.
Если же тест
должен вести себя как-то по-другому, не могли бы Вы указать алгоритм детектирования
равенства медиан на основании получаемых статистик? Потому что сейчас этот код позволяет хорошо детектировать их
отличия, но по факту бесполезен для подтверждения
равенства.
ПС Пробовал генерить больше точек -- качественно поведение такое же.