Как погрешность превращается в грех

    Одна городская легенда гласит, что создатель сахарных пакетиков-палочек повесился, узнав, что потребители не разламывают их пополам над чашкой, а аккуратно отрывают кончик. Это, разумеется, не так, но если следовать такой логике, то один британский любитель пива "Гиннесс" по имени Уильям Госсет должен был не просто повеситься, но и своим вращением в гробу уже пробурить Землю до самого центра. А все потому, что его знаковое изобретение, опубликованное под псевдонимом Стьюдент, уже десятки лет используют катастрофически неправильно.


    image


    Рисунок выше приведен из книги С. Гланц. Медико-биологическая статистика. Пер. с англ. — М., Практика, 1998. — 459 с. Мне неизвестно, проверял ли кто-нибудь на статистические ошибки расчеты для этой диаграммы. Однако и ряд современных статей по теме, и мой собственный опыт говорят о том, что t-критерий Стьюдента остается самым известным, и оттого — самым популярным в применении, по поводу и без.


    Причиной этому является поверхностное образование (строгие преподаватели учат, что надо "проверять статистику", иначе уууууу!), простота использования (таблицы и онлайн-калькуляторы доступны во множестве) и банальное нежелание вникать в то, что "и так работает". Большинство людей, хоть раз применявших этот критерий в своей курсовой или даже научной работе, скажут что-то вроде: "ну вот, мы сравнивали 5 злых школьников и 7 школьников-геймеров по уровню агрессии, у нас значение по таблице выходит близко к р=0,05 и это значит, что игры — зло. Ну да, не точно, а с вероятностью 95%". Сколько логических и методологических ошибок они уже сделали?


    Основы


    На чем основан t-критерий Стьюдента? Логика берется из теоремы Байеса, математическая основа — из распределения Гаусса, методология базируется на дисперсионном анализе:


    image


    где параметр μ — математическое ожидание (среднее значение) распределения, а параметр σ — среднеквадратическое отклонение (σ ² — дисперсия) распределения.


    Что такое дисперсионный анализ? Представим себе аудиторию Хабра, сортированную по числу людей каждого из определенных возрастов. Количество людей по возрасту, скорее всего, будет подчиняться нормальному распределению — согласно функции Гаусса:


    image


    Нормальное распределение имеет интересное свойство — почти все его значения лежат в пределе трех стандартных отклонений от среднего значения. А что такое стандартное отклонение? Это корень из дисперсии. Дисперсия, в свою очередь — это сумма квадратов разности всех членов генеральной совокупности и среднего значения, деленная на число этих членов:


    $ σ_{n}^{2}={\frac {1}{n}}\sum \limits _{{i=1}}^{n}\left(X_{i}-{\bar {X}}\right)^{2} $


    То есть, каждое значение вычли из среднего, возвели в квадрат, чтобы убить минусы, и затем взяли среднее, тупо просуммировав и поделив на число этих значений. Получилась мера средней разбросанности значений относительно среднего — дисперсия.


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


    image


    Для наглядности я показал зеленые отрезки — расстояния от точек распределения до среднего значения. Если длины этих зеленых отрезков возвести в квадрат, просуммировать и усреднить — это и будет дисперсия.


    А теперь — внимание. Мы можем охарактеризовать генеральную совокупность через эти две маленькие выборки. С одной стороны, дисперсии выборок характеризуют дисперсию всей генеральной совокупности. С другой стороны, средние значения самих выборок — это тоже числа, для которых можно вычислить дисперсию! Итак: у нас есть среднее от дисперсий выборок и дисперсия средних значений выборок.


    Тогда мы можем провести дисперсионный анализ, грубо представив его в виде логической формулы:


    $F={\frac {дисперсия\:совокупности\:по\:средним\:значениям\:выборок}{дисперсия\:совокупности\:по\:дисперсиям\:выборок}}$


    Что нам даст вышеозначенная формула? Очень просто. В статистике все начинается с "нулевой гипотезы", которую можно сформулировать как "нам показалось", "все совпадения случайны" — по смыслу, и "не существует связи между двумя наблюдаемыми событиями" — если строго. Так вот, в нашем случае, нулевой гипотезой будет отсутствие значимых различий между возрастным распределением наших пользователей в двух хабах. В случае нулевой гипотезы наша диаграмма будет выглядеть как-то так:



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


    $F={\frac {дисперсия\:совокупности\:по\:средним\:значениям\:выборок}{дисперсия\:совокупности\:по\:дисперсиям\:выборок}}=1$


    А вот если дисперсии выборок равны, но возраста хабраюзеров действительно сильно отличаются, то числитель (дисперсия средних значений) будет большим, и F будет намного больше единицы. Тогда и диаграмма будет выглядеть скорее как на предыдущем рисунке. А что нам это даст? Ничего, если не обратить внимание на формулировку: нулевой гипотезой будет отсутствие значимых различий.


    А вот значимость… ее мы задаем сами. Она обозначается как α и имеет следующий смысл: уровень значимости есть максимальная приемлемая вероятность ошибочно отвергнуть нулевую гипотезу. Иными словами, мы будем рассматривать наше событие как достоверное отличие одной группы от другой, только если вероятность Р нашей ошибки меньше α. Это и есть пресловутое р<0,05, потому как обычно в медико-биологических исследованиях уровень значимости задают в 5%.


    Ну а дальше — все просто. В зависимости от α существуют критические значения F, начиная с которых мы отвергаем нулевую гипотезу. Они и выпускаются в виде таблиц, которыми мы так привыкли пользоваться. Это — что касается дисперсионного анализа. А что со Стьюдентом?


    Так говорил Студент


    А критерий Стьюдента — это просто частный случай дисперсионного анализа. Я опять не буду перегружать вас формулами, которые легко гуглятся, а передам суть:


    $t={\frac {разность\:средних\:значений\:выборок}{стандартная\:ошибка\:разности\:выборочных\:средних}}$


    Так вот, все это длинное объяснение нужно было, чтобы очень грубо и бегло, но наглядно показать, на чем основан t-критерий. И соответственно, из каких его неотъемлемых свойств напрямую вытекают ограничения его использования, на которых так часто ошибаются даже профессиональные ученые.


    Свойство первое: нормальность распределения.


    image


    Это — пару лет как гуляющий по Интернету график распределения баллов сдачи польского государственного экзамена. Какой можно из него сделать вывод? Что этот экзамен не сдают только совсем отбитые гопники? Что преподаватели "дотягивают" учеников? Нет, только один — к распределению, отличному от нормального, нельзя применять параметрические критерии анализа, вроде Стьюдента. Если у вас однобокий, зубчатый, волнистый, дискретный график распределения — забудьте про t-критерий, его использовать нельзя. Тем не менее, это иногда успешно игнорируется даже серьезными научными работами.


    Что же делать в таком случае? Использовать так называемые непараметрические критерии анализа. В них реализуется другой подход, а именно ранжирование данных, то есть уход от значений каждой из точек к присвоенному ей рангу. Эти критерии менее точны, чем параметрические, но по крайней мере их использование корректно, в отличие от ничем не оправданного использования параметрического критерия на ненормальной совокупности. Из таких критериев наиболее известен U-критерий Манна-Уитни, причем зачастую его используют как критерий "для малой выборки". Да, он позволяет иметь дело с выборками до 5 точек, но это, как уже должно быть понятно, не основное его назначение.


    Свойство второе: вы же помните формулу? Значения F-критерия менялись при отличии (увеличенной дисперсии) средних значений выборок. А вот знаменатель, то есть, сами дисперсии, меняться не должны. Поэтому еще одним критерием применимости должно быть равенство дисперсий. О том, что эта проверка соблюдается еще реже, говорится например, тут: Ошибки статистического анализа биомедицинских данных. Леонов В.П. Международный журнал медицинской практики, 2007, вып. 2, стр.19-35.


    Свойство третье: сравнение двух выборок. t-критерий очень любят использовать для сравнения более, чем двух групп. Делается это, как правило, следующим образом: попарно сравниваются отличия группы А от В, В от С и А от С. Затем на основании этого делается некий вывод, что является абсолютно некорректным. В этом случае возникает эффект множественных сравнений.
    Получив достаточно высокое значение t в каком либо из трех сравнений исследователи сообщают что «P < 0,05». Но на самом же деле вероятность ошибки значительно превышает 5%.


    Почему?


    Разбираемся: допустим, в исследовании был принят уровень значимости 5%. Значит, максимальная приемлемая вероятность ошибочно отвергнуть нулевую гипотезу при сравнении групп А и В — 5%. Казалось бы, все правильно? Но ведь точно такая же ошибка произойдет в случае сравнения групп В и С, и при сравнении групп А и С тоже. Следовательно, вероятность ошибиться в целом при такого рода оценке составит не 5%, а значительно больше. В общем случае эта вероятность равна
    P′ =1 − (1- 0,05 )^k
    где k — число сравнений.


    Тогда в нашем исследовании вероятность ошибиться при отвергании нулевой гипотезы составляет примерно 15%. При сравнении четырех групп число пар и соответственно возможных попарных сравнений равно 6. Поэтому при уровне значимости в каждом из сравнений 0,05
    вероятность ошибочно обнаружить различие хотя бы в одном равна уже не 0,05, а 0,31.


    Такую ошибку все же несложно устранить. Один из способов — это введение поправки Бонферрони. Неравенство Бонферрони указывает нам, что если k раз применить критерии
    с уровнем значимости α, то вероятность хотя бы в одном случае найти различие там, где его нет не превышает произведения k на α. Отсюда:
    α′ < αk,
    где α′ — вероятность хотя бы один раз ошибочно выявить различия. Тогда наша проблема решается очень просто: нужно разделить наш уровень значимости на поправку Бонферрони — то есть, на кратность сравнений. Для трех сравнений нам необходимо взять из таблиц t-критерия значения, соответствующие α = 0,05/3 = 0,0167. Повторюсь — очень просто, но эту поправку нельзя игнорировать. Да, кстати, увлекаться этой поправкой тоже не стоит, уже после деления на 8 значения t-критерия излишне устрожаются.


    Далее идут "мелочи", которые очень часто вообще не замечают. Я сознательно не привожу тут формул, чтобы не снижать читаемость текста, но следует помнить, что расчеты t-критерия варьируются для следующих случаев:


    • Различный размер двух выборок (вообще, нужно помнить, что в общем случае мы сравниваем две группы по формуле для двухвыборочного критерия);


    • Наличие зависимых выборок. Это — случаи, когда измеряют данные у одного больного в различные интервалы времени, данные у группы животных до и после эксперимента, и т. д.



    Напоследок, чтобы вы представили весь масштаб происходящего, я привожу более свежие данные по неправильному использованию t-критерия. Цифры приведены для 1998 и 2008 года для ряда китайских научных журналов, и говорят сами за себя. Очень хочется, чтобы это оказалось в большей степени небрежностью оформления, чем недостверными научными данными:


    image


    Источник: Misuse of Statistical Methods in 10 Leading Chinese Medical Journals in 1998 and 2008. Shunquan Wu et al, The Scientific World Journal, 2011, 11, 2106–2114


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


    Про логическую интерпретацию, в том числе неправильную, статистических данных, я, пожалуй, расскажу отдельно.


    Считайте правильно.

    Поддержать автора
    Поделиться публикацией

    Похожие публикации

    Комментарии 32

      0
      Отлично написано, но маленькие придирки:

      1. «квадрат разности всех членов генеральной совокупности и среднего значения» я бы заменил на «сумма квадратов разностей каждого члена генеральной совокупности и среднего значения».

      Потому что «разность всех членов и среднего значения» звучит как «разность суммы всех членов и среднего значения», что не верно.

      2. Линии нельзя возвести в квадрат. Можно возвести в квадрат «длины отрезков».
        0
        Спасибо, поправил.
        +1
        Буквально только что страдал этим вопросом (надо было сравнить результаты двух тестов — «похоже или нет» методом гадания на медиане и stddev).

        Угадайте, можно ли это сравнивать с использованием методов для нормального распределения:



        (Пока что думаю про использование теста Колмогорова-Смирнова).
          0

          Сравнивать-то что? Тип распределения? Моменты?

            +1
            Надо ответить на вопрос «достаточно ли хороша bad по сравнению с good». Вот слово «хороша» открыто для интерпретации, но этот график показывает, что тупо сравнив avg или медиану, внятного ответа не получишь.
              0
              В ряде задач достаточно сравнить 95 или 99 перцентили, особенно если речь о каком-то SLA.
                0
                Я пробовал. Но почему 99 персентиль? Я понимаю, что можно сказать «так написано в SLA», но если пишешь SLA, то почему 99% персентиль, а не 99.9% или даже max?

                Более того, я могу представить себе два устройства, у которых персентиль будет одинаковым, а mean различаться раз в 10.
                  0
                  Если вам важнее, сколько данных вы обработаете за сутки, то mean важнее.

                  Если вам важно на большинство запросов ответить быстро, то важнее перцентиль. Если хард риалтайм — то да, сотый, макс, то бишь.

                  Рано или поздно придется брать какой-то критерий или порог из внешних соображений. Та самая открытость вашего вопроса.
                    0
                    У меня на самом деле задача была (вначале) проще: дано mean и stddev образца, mean и stddev кандидата, надо было ответить, различаются ли они (т.е. есть ли статистически значимая разница между результатами). Попытка потрогать это осиное гнездо оставила меня в полной уверенности, что этого сделать нельзя. Придётся на глазок придумывать критерии, хотя хотелось «как лучше».
                0

                Скорее вопрос в слове "достаточно". Методом "быстрой интерпретации", как ниже писали, и так понятно, что у bad есть некая статистически показательная причина задержек (даже 2), которая отсутствует для good. Также можно поставить вопросы к методике эксперимента. Сколько случайно выбранных по времени запусков каждой серии, на каких стендах. Визуально как будто по одному запуску было.

                  +1
                  Это разные устройства. У одного такой профиль производительности, у другого другой.

                  Кстати, у good эти (вторичные) пики тоже есть, просто они поджаты к основному.
                    0

                    Дополнительные пики первого я назвал "статистически непоказательными" :).
                    Для корректного сравнения разных устройств требуется исключить все факторы, кроме этой разницы (путём серий экспериментов в разных условиях).
                    Меня смущают качественные различия распределений. Сумма 3х аккуратных ситуаций у bad и каша у good. Есть уверенность, что это именно свойства дисков?

                      +1
                      Да, потому что тест Колмогорова-Смирнова для устройств одной серии в разных серверах утверждает, что D > 0.3 (при crit (0.01)=0.02) и p=0.8. (Я знаю, что KS нельзя использовать для подтверждения null-hypothesis, но это лучшее, что у меня есть).

                      Дело в том, что сами устройства внутри — это компьютеры с фирмварью (все SSD такие), и разные алгоритмы дают разные результаты.

                      (Я как-то с одним вендором ругался, и они апдейтом фирмвари latency в 4 раза снизили).
                        0
                        А зачем вообще Смирнова делать, если у вас выборка такая здоровенная. Тут же миллионы. По идее и глазом будет видно, одинаковые распределения или нет. Если они глазом расходятся — значит, разные распределения. Т.е. good и bad вообще бессмысленно сравнивать.

                        >>KS нельзя использовать для подтверждения null-hypothesis
                        Как это нельзя. А для чего он нужен тогда? :) Или я не понял чего-то?
                  0

                  Про критерий — я бы в этой ситуации взял бы не плотность, а вероятность того, задержка не превысит некий нужный порог. Тут хорошие и показательные графики могут быть.

                    0
                    А как порог рассчитать? Из «необходимо» или из свойств кривой?
                      0

                      Всегда в итоге приходишь к субъективному "необходимо". Уровень значимости тот же. В данном случае получится что-то вроде "в 20% случаев у второго задержка выше в 3 раза".

                0
                Выглядит так, словно Bad группа на самом деле 2 или три отдельных кластера. Такая фигня обычно бывает, когда в изначальную выборку напихиваешь разнородные элементы.
                  +1
                  Удивительно, но нет. Это одинокая SSD.
                    0

                    А что измерял?

                      +1
                      Написано же на графике — latency. Если параметры теста интересны, вот они: fio --name `hostname` --blocksize=4k --ioengine=libaio --iodepth=32 --direct=1 --buffered=0 --fsync=0 --rw=randwrite --filename=/test --runtime=900 --time_based=1 --invalidate=1 --output-format=json
                        0
                        Хм. Тем не менее напрашивается предположение о попадании в ячейки с разной latency или в разные циклы работы контроллера. То есть в каждом измерении явно в фоне присутствует некое дискретное состояние железа. Условно «свободный кэш» и «кэш исчерпался». Или «доступ к медленному чипу» и «доступ к быстрому чипу»
                        Чем график рисовал? Похоже на seaborn, но цвета интереснее. Или это R?
                          +1

                          Да, примерно так и есть. (Надо понимать, что это график вероятностей, а не хронологический график).


                          Рисовалось в R по советам коллег (я не сварщик, только маску нашёл).


                          graf <- function (path1, path2, name1, name2){
                              sample1=fromJSON(file=path1)
                              sample2=fromJSON(file=path2)
                              return(ggplot(rbind(data.frame(latency=sample1,category=name1), data.frame(latency=sample2, category=name2)), aes(latency, fill=category)) + geom_density(alpha=0.2) + scale_x_continuous(trans='log2'))
                          }

                          На вход нужен вывод и fio, который процессится вот так вот (берётся lat_log), силами ansible и шелла:


                             - name: Fetching results
                               shell: "shuf -n 10000 lat_clat.1.log|awk '{print $2}'|awk -F, '{print $1}'"
                               register: latency_log
                             - copy:
                                content: '{{ latency_log.stdout_lines|to_json|from_json|map("int")|list|to_json }}'
                                dest: '{{ latency_dest }}'
                               delegate_to: localhost
                               vars:
                                 latency_dest: 'output/latency_{{ inventory_hostname }}.json'
                0
                Негодование автора по этой теме понятно, но стоит всё же сделать оговорку.

                Иногда вот просто сейчас нужен ответ, и нет времени на длинные теоретические разбирательства, а готовый способ дать быстрый ответ — есть. Да, он не гарантирует быть правильным (хотя и может таковым оказаться), а ещё он может оказаться совсем неправильным (не повезёт). Но такой ответ всё равно лучше чем ничего, особенно если риск его неверности вы держите в голове (но это не обязательно, если другого выхода у вас всё равно нет).

                Это конечно не относится к написанию научных статей (там всегда много времени и не может быть реальной критической срочности).
                  0

                  Быстрый ответ можно дать и без стьюдента. "Вроде похожи". :) При достаточном количестве выборок можно ошибку среднего оценить, это тоже быстро..

                    0
                    Если вы получаете ответ не по методике, обычно вы не можете оценить каков процент ошибки
                    И вообще это превращается не в научный метод, а в субъективное мнение эксперта
                    0
                    Хотелось бы лучше понимать значимость
                    Если мы берем 5%, это значит результат каждого двадцатого исследования можно выкидывать в мусорку?
                    Если нет, то какой процент исследований в среднем даст неправильный результат при использовании значимости 5%? А 1%?
                      0
                      Значимость — это вероятность того, что числа скажут «наше предположение неверно», но это будет не так. В целом можно сказать, что при бесконечно большом количестве выборок 5% будут говорить «гипотеза не верна», но только в том случае, если она верна.
                      Чего мы, естественно, не знаем. Так что привязывать качество исследований к значимости не стоит.
                      0
                      Еще непонятно про равенство дисперсий
                      Если мы тестируем, отличается ли подбрасывание монетки в Москве от подбрасывания в Париже
                      Выбираем значимость
                      Получаем 52/100 орлов в Москве, 49/100 в Париже
                      как тут могут быть равны дисперсии
                      А если не равны, то нельзя применять метод?
                        +1
                        Дисперсию чего мы здесь измеряем? Если одного подбрасывания, то она в обоих случаях будет равной (и равной 1/4), если серии из ста подбрасываний, то надо провести много таких серий в Москве и в Париже и рассматривать количество орлов как случайную величину. Тут требуется что-то пояснить более развёрнуто, или направление мысли уже понятно?
                          +2
                          Строго говоря, эксперимент с подбрасыванием монетки характеризуется другим видом распределения, довольно далёким от нормального, и нужно чётко представлять себе, что является измеряемой величиной. Если результат каждого отдельного эксперимента в серии — «орёл» или «решка», то это дискретное распределение, и сравнение двух величин, имеющих дискретное распределение, нельзя делать с помощью параметрического теста (хотя дисперсии для них тоже можно вычислить, но не будет смысла сравнивать их описанным в статье способом). Если же результат эксперимента — это числа вида «52 из 100» и «49 из 100», то у нас тут только две точки, которые можно сравнить между собой непосредственно, без применения статистических методов.
                            0
                            Дисперсия в обоих случаях, естественно, будет разной, но очень близкой к 0,25. И как раз эту естественную для выборочной дисперсии разницу и можно оценить с точки зрения значимости, взяв в качестве гипотезы предположение, что дисперсии генеральных совокупностей этих выборок равны.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое