2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 20:23 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645155 писал(а):
Не могу - Вы алгоритм не описали.

Чего? :shock:
1. Я явно написал, что использую критерий хи-квадрат, он же критерий согласия Пирсона.
Что это такое - описано в литературе.
2. также я явно сообщил, что в качестве реализации использую функцию ХИ2.ТЕСТ из Excel.
Какие ещё описания Вам нужны?

Geen в сообщении #1645155 писал(а):
Меньше $10^{-10}$ не хотите ли? (правда, "Ваш метод" пришлось угадывать...)


С вероятностью $1-10^{-10}$ у Вас ошибка :mrgreen:

Geen в сообщении #1645155 писал(а):
И как давно для применимости ЦПТ достаточно 5 значений?

$n=47$, вообще-то.
По приведенной ссылке, указывается обоснование со ссылкой на неравенство Берри — Эссеена. Но это уже тонкие эмпирии, мне достаточно рекомендаций специалистов, основанных на этом.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 20:27 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645158 писал(а):
$n=47$, вообще-то.

Вы о чём это сейчас?

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 20:30 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645160 писал(а):
Вы о чём это сейчас?


О том, чему равно $n$ в Замечание 20 по приведенной ссылке.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 20:30 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645158 писал(а):
С вероятностью $1-10^{-10}$ у Вас ошибка

Я свой алгоритм могу показать. И некую догадку про Ваш алгоритм тоже.
EUgeneUS в сообщении #1645158 писал(а):
Какие ещё описания Вам нужны?

Полные. Пример я выкладывал несколько ранее.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 20:40 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645163 писал(а):
Я свой алгоритм могу показать. И некую догадку про Ваш алгоритм тоже.


Покажите.

Geen в сообщении #1645163 писал(а):
Полные. Пример я выкладывал несколько ранее.


1. Строим биномиальное распределение с параметрами $n=18, p = 1/3$, с помощью соответствующей функции в Excel.
2. Умножаем каждое значение на $47$ получаем 19 значений ожидаемых частот.
3. Суммируем первые несколько позиций пока сумма не превысит $5$ (четыре пять штук, насколько помню, не под рукой сейчас)
4. Суммируем последние несколько позиций пока сумма не превысит $5$ (10 штук, насколько помню, не под рукой сейчас).
5. Получаем столбец из шести ожидаемых значений, каждое из которых больше $5$.
6. Фактические частоты (столбец из 19 значений) суммируем аналогично пп. 3 и 4 - первые шесть пять значений суммируем в одно, последние 10 также в одно.
7. Получаем столбец из шести фактических значений.
8. Применяем функцию ХИ2.ТЕСТ. Столбец из п.5 указываем как массив ожидаемых значений, столбец из п.7 указываем как массив фактических значений.
9. Смотрим на p-value.

Так достаточно подробно?

-- 04.07.2024, 20:46 --

Для модельных "истинно-биномальных" серий.
1. Строится матрица $47 \times 18$
2. В каждой ячейке с вероятность 1/3 генерируется единица или с вероятностью 2/3 - ноль функцией СЛЧИСЛО.
3. Суммируется по строкам. Получаем 47 чисел, каждое от 0 до 18.
4. Подсчитываются количества для каждого значения. Получается столбец размером 19.
5. Этот столбец используется в качестве "фактических" данных в алгоритме выше.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 21:18 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645165 писал(а):
Так достаточно подробно?

Да. Но не верно - для той ф-ции в экселе нужны массивы одинакового размера, а Ваш пункт 6 этого не гарантирует.

EUgeneUS в сообщении #1645165 писал(а):
Покажите.

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
def freq(arr,n):
        res = [0 for _ in range(n+1)];
        for _ in arr:   res[_] += 1;
        return res;
def bonferroni(arr):
        res = sorted(arr);
        n = len(res);
        res = reversed(list(_*n/(i+1) for i,_ in enumerate(res)));
        cur = inf;
        res = [cur:=min(_,cur) for _ in res];
        res.reverse();
        return res;
p = 1/3;
n = 18;
m = 47;
k = 1000;
nn = floor(log10(n-1))+1;
kn = floor(log10(k-1))+1;
res = [[] for _ in range(n+1)];
pval_true = [];
pval_euus = [];
bin = [nchoosek(n,_)*pow(p,_)*pow(1-p,n-_)*m for _ in range(n+1)];
print(bin);
for _ in range(k):
        sample = list(sum(random()<p for i in range(n)) for i in range(m));
        frq = freq(sample,n);
        for i,_ in enumerate(frq):
                if _:
                        res[i].append(_);
        chi2_true = sum((frq[i]-bin[i])**2/bin[i] for i in range(n+1));
        pval_true.append(gammaincreg(n,chi2_true));
        chi2_euus = 0;
        cbin = bin.copy();
        dir = 0;
        while frq:
                cf = 0; cb = 0;
                while cf < 5 and frq:
                        cf += frq.pop(dir);
                        cb += cbin.pop(dir);
                chi2_euus += (cf-cb)**2/cb;
                dir = -1-dir;
        pval_euus.append(gammaincreg(n,chi2_euus));
ma = max(max(_ or [0]) for _ in res);
for i,_ in enumerate(res):
        frq = freq(_,ma);
        #frq.pop(0);
        print(('%%%ii'%nn)%i,*[('%%%ii'%kn)%_ if _ else ' '*kn for _ in frq]);
qval_true = bonferroni(pval_true);
qval_euus = bonferroni(pval_euus);
print(qval_true[:10]);
print(qval_euus[:10]);
 

Случайный результат:
код: [ скачать ] [ спрятать ]
Используется синтаксис Text
[0.03180205577614669, 0.2862185019853202, 1.2164286334376107, 3.2438096891669606, 6.08214316718805, 8.515000434063268, 9.224583803568539, 7.906786117344461, 5.4359154556743166, 3.0199530309301754, 1.3589788639185787, 0.49417413233402846, 0.1441341219307583, 0.033261720445559605, 0.005939592936707071, 0.0007919457248942759, 7.424491170883835e-05, 4.367347747578727e-06, 1.2131521521052015e-07]
 0      29   1
 1     191  30   6
 2     358 226  93  29   7
 3     115 201 227 189 116  68  29  12   5
 4       8  46  82 116 162 171 145 115  73  42  25   8   3   2   1
 5       3   2  15  35  68 107 155 152 146 119  73  57  35  13  10   8   2
 6           4   6  23  42  74 122 138 165 125 115  71  57  31  13   8   4           2
 7       3  11  26  45  92 121 160 152 147  93  64  39  27  16   1   2   1
 8      13  55 115 144 178 161 141 100  52  23   9   5       1
 9     136 253 238 158 112  46  17   7   1   2
10     349 244 106  30   7
11     331  66  10   4
12     125  12
13      30   1
14       5
15
16
17
18
[5.821224868270593e-62, 2.3683389915136235e-52, 2.8638576754084622e-52, 3.1680027649741014e-51, 3.437970018054003e-51, 7.935494135117459e-35, 3.7278478276964663e-32, 1.1297967371001123e-09, 1.4492970613923624e-08, 3.370692415812659e-07]
[0.0013065709459327412, 0.001971770931721222, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
 

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 21:25 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645169 писал(а):
Да. Но не верно - для той ф-ции в экселе нужны массивы одинакового размера, а Ваш пункт 6 этого не гарантирует.

Чей-та не гарантирует? В пункте 6 мы суммируем не до достижения 5, а ровно тоже количество, как в пп 3 и 4.
Ровно как и предполагается при применении критерия Пирсона.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 21:32 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645172 писал(а):
Ровно как и предполагается при применении критерия Пирсона.

При "применении" предлагается ровно наоборот....

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 21:33 
Аватара пользователя


11/12/16
14035
уездный город Н
По коду и результатам пояснения нужны :cry:
В первом массиве в результатах узнал биномиальное распределение, ОК.
А дальше что?

-- 04.07.2024, 21:37 --

Geen в сообщении #1645174 писал(а):
При "применении" предлагается ровно наоборот....


Что наоборот? Куда наоборот?
При применении предполагается группировка по конечному числу непересекающихся подмножеств носителя.
На первом шаге определяем группировку (то есть разбиение носителя на непересекающиеся подмножества) такую, чтобы в наборе ожидаемых значений все были больше пяти. А потом и ожидаемые значения, и фактические группируем одинаково - по одинаковому разбиению носителя.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 21:53 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645175 писал(а):
А дальше что?

sample это массив из m случайных чисел с биномиальным распределением...
freq подсчитывает частоту встречаемости каждого значения из заданного диапазона.
chi2_aaa - статистика, pval_aaa - p-value, считая, что статистика распределена как $\chi^2$ (массив всех k значений)
res - массив с накопленными частотами встречаемости.
Соответственно, второй блок в результатах это (как я понимаю) практически тоже самое, что sergey zhukov публиковал ранее, только не в относительных, а в абсолютных цифрах.
Далее, к накопленным значениям p-value применяется поправка на множественный тест. Результат выводится в результатах.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 22:16 
Аватара пользователя


11/12/16
14035
уездный город Н
1. Вот тут:
Код:
pval_euus.append(gammaincreg(n,chi2_euus));


вместо $n$ должно быть получившееся количество групп минус 1.

2. Правильно ли я понимаю, что выводятся 10 худших результатов из 1000?

3. Можно ли вывести для таких же 10 результатов значения без поправки Бонферрони?

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 22:21 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645188 писал(а):
вместо $n$ должно быть получившееся количество групп минус 1.

Да, согласен. Позже пересчитаю, но станет только хуже (существенно хуже).
EUgeneUS в сообщении #1645188 писал(а):
10 результатов значения без поправки Бонферрони?

Грубо, разделите на $k$ (и умножьте на номер)...
Но вывести могу, когда пересчитывать буду.

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 22:38 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645189 писал(а):
Но вывести могу, когда пересчитывать буду.


Если не сложно.

А пока, что мы видим?
Видим ровно то, что написано в Замечание 20 в приведенной ссылке.
А именно: если $np_i$ малы, то и распределение статистики существенно отличается от хи-квадрат с соответствующим количеством степеней свободы. Откуда эти выбросы в $5.8 \cdot 10^{-62}$, даже с учётом множественных выборок :wink:

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 22:43 
Заслуженный участник
Аватара пользователя


01/09/13
4676
EUgeneUS в сообщении #1645191 писал(а):
А пока, что мы видим?

Что (даже без учёта Вашей поправки) Ваш тест отвергает "истинную" нулевую гипотезу...

 Профиль  
                  
 
 Re: Можно ли вычислить " саботажника"
Сообщение04.07.2024, 22:45 
Аватара пользователя


11/12/16
14035
уездный город Н
Geen в сообщении #1645193 писал(а):
Что (даже без учёта Вашей поправки) Ваш тест отвергает "истинную" нулевую гипотезу...


Посмотрим, что будет с поправкой.
А пока тест отверг нулевую гипотезу в 2-х случаях из 1000. Ну, бывают в жизни огорчения :lol:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Stratim


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group