Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум врачей-аспирантов _ Медицинская статистика _ Критерий Коновера

Автор: Игорь 27.01.2023 - 12:46

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

Автор: 100$ 27.01.2023 - 16:11

Для дисперсионного комплекса InsectSprays (тестовый пример дисперсионного анализа в R, независимые выборки)

функция ConoverTest() из пакета {DescTools} выдает буквально следующее

Код
> library(DescTools)
> ConoverTest(count~spray,InsectSprays,method="none")

Conover's test of multiple comparisons : none  

    mean.rank.diff    pval    
B-A      2.6666667  0.5314    
C-A    -40.7083333 3.7e-14 ***
D-A    -26.5833333 3.1e-08 ***
E-A    -32.8333333 7.5e-11 ***
F-A      3.4583333  0.4175    
C-B    -43.3750000 3.0e-15 ***
D-B    -29.2500000 2.4e-09 ***
E-B    -35.5000000 5.6e-12 ***
F-B      0.7916667  0.8524    
D-C     14.1250000  0.0014 **
E-C      7.8750000  0.0676 .  
F-C     44.1666667 1.4e-15 ***
E-D     -6.2500000  0.1451    
F-D     30.0416667 1.1e-09 ***
F-E     36.2916667 2.6e-12 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


Результаты своих самоделок
- процедуры DSCF (Dwass - Steel - Critchlow - Fligner)
- Conover - Iman (1979) процедуры
прикрепил в файле.

В процедуре DSCF уверен.
В процедуре Conover - Iman - уже нет. Но C - I дает согласованный c DSCF результат.

Что касается Conover'а для связанных выборок (пост-хок для теста Фридмана), то там когда-то рассчитывал только критическое значение разности. Как считать достигнутый уровень значимости - до сих пор не знаю.

 Conover_test.rar ( 8,6 килобайт ) : 174
 

Автор: Игорь 27.01.2023 - 17:20

Дико извиняюсь - возможно, неточно выразился. В данном случае интересует двухвыборочный критерий, представленный на с. 300 монографии Conover W.J. Practical nonparametric statistics. - New York, NY: John Wiley & Sons, 1999, под наименованием A test for equal variances. Автор пишет, что критерий реализован в StatXact, где называется Conover's test. В книге есть пример, и он в точности соответствует нашему расчету. Проблема в том, что с другими исходными данными результаты эквивалентных тестов сильно не бьются.

Хотя данные расчета, приведенные выше, пригодятся в дальнейшем тестировании. У меня многовыборочный критерий Коновера тоже проверять нужно. Спасибо. Добавление: в программе сейчас доступен критерий Шеффе. Результаты очень похожи.

Автор: 100$ 27.01.2023 - 23:25

Цитата(Игорь @ 27.01.2023 - 17:20) *
Дико извиняюсь - возможно, неточно выразился. В данном случае интересует двухвыборочный критерий, представленный на с. 300 монографии Conover W.J. Practical nonparametric statistics. - New York, NY: John Wiley & Sons, 1999, под наименованием A test for equal variances. Автор пишет, что критерий реализован в StatXact, где называется Conover's test. В книге есть пример, и он в точности соответствует нашему расчету. Проблема в том, что с другими исходными данными результаты эквивалентных тестов сильно не бьются.


Да нет, это я,похоже, зациклился на пост-хоках. Вот сейчас пролистал ваш мануал MEcomMethod Guide и вот пож-ста 4.2.3.1.11 "Критерий Коновера".

Что до формул, то привык доверять NCSS'овским мануалам. Вот https://www.ncss.com/wp-content/themes/ncss/pdf/Procedures/PASS/Conover_Test_of_Variances-Simulation.pdf

Формулы похожи на ваши.

А можно ваш тестовый пример?

И что конкретно там "не бьется"? Клотц? Бартлетт? Левене? Браун - Форсайт? Что то еще, о чем я слыхом не слыхал?

P.S. Имеющийся у меня путеводитель по StatXact'у (за авторством Меты и Пейтеля) упоминаний о критерии Коновера не содержит. Видимо, по причине своей ветхости.

Автор: nokh 27.01.2023 - 23:36

У меня есть архивы со StatXact (пиратка 6-ой версии и 30-дневный trial 8-ой версии). Могу установить и проверить нужные примеры именно в StatXact. На оф. сайте доступна trial 12-ой версии, требуется регистрация.

Автор: Игорь 28.01.2023 - 09:29

Вот пара примеров, где результаты "гуляют" относительно эквивалентных тестов. Хотя, может, и в их реализациях ошибки. Немного удручает такая ситуация. В источниках проходит мысль, что критерии для тестирования одних и тех же параметров должны показывать одинаковые выводы.

Код
23  21
18  28
17  32
25  30
22  41
19  24
31  35
26  34
29  27
22  39
      36

Критерий Ансари-Бредли (рассеяние): t = 59, p = 0.417123
Критерий Зигеля-Тьюки (рассеяние): t = 113, p = 0.416345
Критерий Клотца (рассеяние): t = 0.606973, p = 0.456131
Критерий Коновера (рассеяние): t = 1284.5, p = 0.182109 ***

Код
1.96    2.03
2.89    2.60
2.61    2.16
1.83    2.17
1.56    1.65
2.12    2.65
1.44    2.13
2.04    2.16
1.65    2.09
1.12    1.16
1.33    2.16
0.79    1.10

Критерий Ансари-Бредли (рассеяние): t = 77.5, p = 0.476818
Критерий Зигеля-Тьюки (рассеяние): t = 147.5, p = 0.442617
Критерий Клотца (рассеяние): t = 1.49046, p = 0.136103
Критерий Коновера (рассеяние): t = 2881, p = 0.16642 ***

Пример из книги Коновера (у него вывод p < 0.01):
Код
10.8    10.8
11.1    10.5
10.4    11.0
10.1    10.9
11.3    10.8
        10.7
        10.8

Критерий Ансари-Бредли (рассеяние): t = 11.5, p = 0.0228411
Критерий Зигеля-Тьюки (рассеяние): t = 20.5, p = 0.02566
Критерий Клотца (рассеяние): t = 3.52585, p = 0.000422126
Критерий Коновера (рассеяние): t = 462, p = 0.00997383 ***

Автор: 100$ 31.01.2023 - 18:17

Для тестового примера NCSS дает p-value=.019947 (см. рис)
Вы, похоже, опять одностороннюю (***) вероятность выдаете...

 

Автор: Игорь 31.01.2023 - 20:35

Вернее всего, так. Программы, скорее всего, считают правильно (тестировались как-никак), но нужно с выдачей разобраться. Не всегда понятно, что имели в виду авторы источников.

Тут вот такая мысль. Пусть сравниваем некоторые параметры. Назовем их А и В.
1. Предполагаем, что А > В. Пускай получаем p = 0,01. Т.е. действительно A > B. Это левое односторонне значение.
2. Другой случай, при том же предположении получаем p = 0,99. Оказывается, что на самом деле A < B. Наше предположение было неверным. И проверив гипотезу A < B, мы получили бы p = 0,01. Это правое односторонне значение.
3. Левое + правое = 0,02. Это двустороннее значение (т.е. проверяем A не равно B).

В программе можно либо спросить пользователя, что он желает тестировать (так сделано в некоторых пакетах программ) и реализовать алгоритм, показанный выше, либо вычислить A и B и проверить все гипотезы. А можно сделать иначе. Вычислить p-значение формально из функции распределения статистики критерия, и объявить односторонним Min (p, 1 - p) (для симметричной функции распределения статистики критерия, для несимметричной* - вычислить правое и левое), а двусторонним - удвоенное одностороннее (сумму односторонних).

Может быть, данный алгоритм необходимо реализовать при выводе результатов расчета, чтобы пользователь не гадал, что там на самом деле посчиталось?

* Пример несимметричной - точный метод Фишера.

Автор: 100$ 31.01.2023 - 22:27

Цитата(Игорь @ 31.01.2023 - 20:35) *
Не всегда понятно, что имели в виду авторы источников.


Ну, что касается многовыборочной проверки дисперсий, то тут как раз все понятно:
H0: var1=var2=...=var(n)
против альтернативы о том, что имеется хотя бы одна пара индексов i и j, для которых var(i) не равно var(j). https://manuals.pqstat.pl/en:statpqpl:porown3grpl:nparpl:conovervar#fnt__1

Цитата
Тут вот такая мысль. Пусть сравниваем некоторые параметры. Назовем их А и В.
1. Предполагаем, что А > В. Пускай получаем p = 0,01. Т.е. действительно A > B. Это левое односторонне значение.
2. Другой случай, при том же предположении получаем p = 0,99. Оказывается, что на самом деле A < B. Наше предположение было неверным. И проверив гипотезу A < B, мы получили бы p = 0,01. Это правое односторонне значение.
3. Левое + правое = 0,02. Это двустороннее значение (т.е. проверяем A не равно B).


Нет.
Подобные рассуждения нахожу мелкобуржуазными и попросту вредными smile.gif
П.ч. p-value - это, вообще-то, вероятность, полученная из условного распределения статистики критерия. Условие: справедливость нулевой гипотезы.
А нулевая гипотеза у нас формулируется консервативно: var1=var2.
Для подавляющего большинства статистических критериев их распределение при альтернативе неизвестно.
Ergo, из того что p<.05 вовсе не следует, что var1>var2, A < B, etc.

Цитата
В программе можно либо спросить пользователя, что он желает тестировать (так сделано в некоторых пакетах программ) и реализовать алгоритм, показанный выше, либо вычислить A и B и проверить все гипотезы. А можно сделать иначе. Вычислить p-значение формально из функции распределения статистики критерия, и объявить односторонним Min (p, 1 - p) (для симметричной функции распределения статистики критерия, для несимметричной* - вычислить правое и левое), а двусторонним - удвоенное одностороннее (сумму односторонних).

Может быть, данный алгоритм необходимо реализовать при выводе результатов расчета, чтобы пользователь не гадал, что там на самом деле посчиталось?


Я за то, чтобы проверить все гипотезы. По образу и подобию того, как это сделано https://www.statsdirect.com/help/analysis_of_variance/homogeneity_of_variance.htm

Автор: nokh 1.02.2023 - 00:31

Критерий Коновера реализован исключительно точно, ну если для односторонней вероятности.... Я выставил максимум знаков в StatXact - 8, всё сошлось. По остальным статистика совпадает, а р не идентично, но близко. Клотц как-то иначе считается в StatXact.

 Nonparametric_in_StatXact.doc ( 558 килобайт ) : 161
 

Автор: Игорь 1.02.2023 - 07:28

Спасибо большое. Без сравнения с другими программамаи не обошлось. smile.gif

Цитата(100$ @ 31.01.2023 - 23:27) *
Я за то, чтобы проверить все гипотезы. По образу и подобию того, как это сделано https://www.statsdirect.com/help/analysis_of_variance/homogeneity_of_variance.htm

Очень рад видеть это мнение. Как раз сегодня тоже осенило - действительно, нужно проверять ВСЕ гипотезы. Схема будет такая.
Выводим значения параметров A и B , соответственно, выборок, X и Y, подлежащих проверке (среднее, дисперсия, медиана и т.д.). Пусть функция для тестирования называется FUNC и выдает одностороннее значение (кстати, оказалось, что все реализованные функции выдают одностороннее значение, а путаница понятна из следующего).
1. Проверяем гипотезу A > B. Вызываем FUNC (X,Y). Выводим одностороннее P-значение. Также вычисляем и сохраняем p1 = MIN(p,1 - p).
2. Проверяем гипотезу A < B. Вызываем FUNC (Y,X). Выводим одностороннее P-значение. Также вычисляем и сохраняем p2 = MIN(p,1 - p).
3. Проверяем гипотезу A != B. Ничего не вызываем. Выводим p1 + p2 под названием "двустороннее p-значение".

Таким образом, каждый тест вызываем 2 раза, а пользователь получет исчерпывающую информацию и остается доволен простотой интерфейса.

Обнаружилась проблема, имеющая отдаленное отношение к рассматриваемой теме, но имеющая. В программе есть несколько т.н. точных (перестановочных) критериев. При анализе выборок уже средней численности (до 12-13-14) резко увеличивается время счета, что для диалоговой программы неприемлемо. Придется ограничить использование перестановочных критериев численностью выборок. В принципе, данные критерии для малых выборок и нужны, когда плохо работают аппроксимации. Это заметно на критерии Вилкококсона, для которого есть и асимптотический, и точный вариант. Чем больше численность, тем более близки p-значения. Уже где-то с численности около 10 они различаются в 4 знаке после запятой.

Автор: 100$ 1.02.2023 - 12:31



Цитата
Обнаружилась проблема, имеющая отдаленное отношение к рассматриваемой теме, но имеющая.
Придется ограничить использование перестановочных критериев численностью выборок...


Ну да. По образу и подобию того, как для критерия Макнемара считают точную биномиальную вероятность, если сумма элементов антидиагонали таблицы (b+c)<25. Если больше - пользуются хи-квадрат аппроксимацией.

Игорь, а мы о какой программе говорим? StatAnt? А с какого ресурса вы ее раздаете?

Автор: 100$ 1.02.2023 - 16:25

Цитата(Игорь @ 28.01.2023 - 09:29) *
Пример из книги Коновера (у него вывод p < 0.01):
Код
10.8    10.8
11.1    10.5
10.4    11.0
10.1    10.9
11.3    10.8
        10.7
        10.8

Критерий Ансари-Бредли (рассеяние): t = 11.5, p = 0.0228411
Критерий Зигеля-Тьюки (рассеяние): t = 20.5, p = 0.02566
Критерий Клотца (рассеяние): t = 3.52585, p = 0.000422126
Критерий Коновера (рассеяние): t = 462, p = 0.00997383 ***


Не нравицца мне что-то ваш Клотц...

Зато очень нравится мой (см. ручной счет в файле)
Давайте "сверим часы".

P.S. У Айвазяна ошибки, у Кобзаря ошибки, у Лемешко ошибки (потому как списали у Кобзаря), из оригинальной статьи Клотца (1962) вообще ничего не понятно...
Как жить дальше?

 Критерий__Клотца.rar ( 237,05 килобайт ) : 131
 

Автор: Игорь 1.02.2023 - 19:41

Сделал, как планировал. Вот результаты для тех же данных Коновера. Теперь нравится больше.

Критерий Ансари-Бредли (масштаб):
левостороннее t = 30.5, p = 0.977159
правостороннее t = 11.5, p = 0.0228411
двустороннее p = 0.0456821
Критерий Зигеля-Тьюки (масштаб):
левостороннее t = 57.5, p = 0.97434
правостороннее t = 20.5, p = 0.02566
двустороннее p = 0.0513199
Критерий Клотца (масштаб):
левостороннее t = 6.1485, p = 0.999789
правостороннее t = 1.58914, p = 0.0386933
двустороннее p = 0.0389044
Критерий Коновера (масштаб):
левостороннее t = 462, p = 0.990026
правостороннее t = 186, p = 0.00997383
двустороннее p = 0.0199477

Опубликованные формулы некоторых других критериев дают двухстороннее значение. Не знаю, пересчитывать ли из них левое и правое или так оставить ...

Программа раздается с ресурса https://sourceforge.net/projects/statant/. Пока не нужно скачивать, т.к. последние исправления еще не внесены. Нужно еще переводы изменений сделать (базовый - английский + еще 6).

Посмотрел, откуда брал формулы для Клотца: Hajek J., Sidak Z., Sen P.K. Theory of rank tests. - New York, NY: Academic Press, 1999. (есть русский перевод более раннего издания) и Conover W.J. Practical nonparametric statistics. - New York, NY: John Wiley & Sons, 1999. Формулы для Зигеля-Тьюки с поправками на объединение рангов брал в книге Петрович М.Л., Давидович М.И. Статистическое оценивание и проверка гипотез на ЭВМ. - М.: Финансы и статистика, 1989 (там есть ссылка на Холлендера).

Автор: 100$ 2.02.2023 - 01:30

Цитата(Игорь @ 1.02.2023 - 19:41) *
Сделал, как планировал. Вот результаты для тех же данных Коновера. Теперь нравится больше.


Критерий Клотца (масштаб):
левостороннее t = 6.1485, p = 0.999789
правостороннее t = 1.58914, p = 0.0386933
двустороннее p = 0.0389044


Не-а. nea.gif

У меня получилось:
1) t=6.1485 p=.011635
2) t=1.58914 p=.0077357

Итого 2-tailed p=.0193703.

Что хоть немного напоминает результаты StatXact: asympt p=.02098

А вот, что дает пакет {coin} из R


Код
>library(coin)

> x<-c(10.8,11.1,10.4,10.1,11.3,10.8,10.5,11,10.9,10.8,10.7,10.8)
> gr<-factor(c(rep(1,5),rep(2,7)))

> set<-data.frame(x,gr)

> klotz_test(x ~ gr, data = set)


        Asymptotic Two-Sample Klotz Test

data:  x by gr (1, 2)
Z = 2.2877, p-value = 0.02216
alternative hypothesis: true ratio of scales is not equal to 1

       Точное распределение

> pvalue(klotz_test(x ~ gr, data = set,distribution='exact'))

[1] 0.01515152


Застрелицца можно.


Цитата
Посмотрел, откуда брал формулы для Клотца: Hajek J., Sidak Z., Sen P.K. Theory of rank tests. - New York, NY: Academic Press, 1999. (есть русский перевод более раннего издания) и Conover W.J. Practical nonparametric statistics. - New York, NY: John Wiley & Sons, 1999.


Да, в старом издании формулы тоже правильные. Я их и программировал, да только уже и забыл.

Автор: Игорь 2.02.2023 - 17:37

Это круто - пять вариантов, и все разные.

Нашел у себя ошибку (при суммировании не добавлялась 1 к счетчику цикла). Результат получился, как у Вас. Формулы из Гаека (в переводном и английском изданиях совпадают).

Критерий Клотца (масштаб):
левостороннее t = 6.1485, p = 0.988365
правостороннее t = 1.58914, p = 0.00773574
двустороннее p = 0.0193703

А теперь возьмем формулы со с. 401 монографии Коновера (для вычислении среднего и дисперсии берется не номер, как у Гаека, а ранг). P-значение совпадает с асимптотическим вариантом из R.

Критерий Клотца (масштаб):
левостороннее t = 6.1485, p = 0.988922
правостороннее t = 1.58914, p = 0.0110785
двустороннее p = 0.022157

Казалось бы, какая разница, если суммирование по всему объединенному массиву? Предположу, что разница образуется при совпадающих вариантах выборок (= равных рангах). Отличие от StatXact, предположительно, может зависеть от способа ранжирования.

Что делать будем? smile.gif

Автор: 100$ 2.02.2023 - 22:45

Цитата(Игорь @ 2.02.2023 - 17:37) *
Нашел у себя ошибку (при суммировании не добавлялась 1 к счетчику цикла). Результат получился, как у Вас. Формулы из Гаека (в переводном и английском изданиях совпадают).

Критерий Клотца (масштаб):
левостороннее t = 6.1485, p = 0.988365
правостороннее t = 1.58914, p = 0.00773574
двустороннее p = 0.0193703



Браво, маэстро! (Бурные продолжительные аплодисменты, местами переходящие в овацию)


Цитата
Что делать будем? smile.gif


Поскольку в оригинальной статье Клотц работает с номерами и на их основе вычисляет соответствующие нормальные метки (см. ф-лу (2.3) и табл.3). то... Правильно: оставим себе Гаека - Шидака, а R-ное - R-щикам.

Цитата
Отличие от от StatXact, предположительно, может зависеть от способа ранжирования.


Что касается exact распределения, то:
1) для объединенной выборки объемом 12 вариант существует 792 способа разбросать их по группам n1=5 и n2=7.
2) если парни из StaXact 8 раз наблюдали превышение пермутированного значения статистики критерия над эмпирическим, то их оценка 2-tailed p-value=8/792=.01010101...
3) если парни из R наблюдали то же самое 12 раз, то у них 2-tailed p-value=12/792=.015151515...

И разница 12-8 являет собой связку длины 4.

P.S. Но это был Клотц. А что не так с Коновером?

У меня по NCSS'овским формулам с аппроксимацией хи-квадрат 2-sided p=.019947656.
Точь-в-точь, как у корифеев.

И все 4 критерия вроде бы рапортуют согласованно (p~.02, нулевая гипотеза отвергается на 5%-ном уровне и не отвергается на 1%-ном).

Автор: Игорь 3.02.2023 - 10:23

Цитата(100$ @ 2.02.2023 - 22:45) *
Браво, маэстро! (Бурные продолжительные аплодисменты, местами переходящие в овацию)
Для того и затевалось обсуждение - дать народу правильно считающее ПО, при этом бесплатное и с открытыми исходниками. А тут еще импортозамещение в научных и образовательных учреждениях ... Нужно закрывать проблему (как было в свое время с AtteStat).
Цитата(100$ @ 2.02.2023 - 22:45) *
P.S. Но это был Клотц. А что не так с Коновером?
С Коновером все нормально. Это про его монографию речь была.

Сейчас смотрю остальные методы проверки гипотез (Стьюдент, Вилкоксон и другие, методы на основе сравнения распределений). Нужно протестировать.

Благодарность коллегам за помощь и идеи, появившиеся в результате обсуждения проблемы. От меня и от пользователей программ. Если можно, для следующей проблемы, более важной для пользователей, о том, что на самом деле тестируют статистические методы, сделаю другую тему.

Автор: 100$ 4.02.2023 - 14:44

Цитата(Игорь @ 3.02.2023 - 10:23) *
Если можно, для следующей проблемы, более важной для пользователей, о том, что на самом деле тестируют статистические методы, сделаю другую тему.


Буде новая беда -
Прямиком спеши сюда:
Чай, мы тут в лесу не звери,
Чай, поможем завсегда! (с)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)