(С дополнениями от 17.08.2026, рекомендуется прочитать перед знакомством со второй частью)

В чате Polygraph зашла речь о статье Поповичева С.В. "Ложь как психофизиологический феномен", Детекция лжи, 2020. Было высказано сомнение в результате исследования на основании того, что:

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

Замечания представляются статистически обоснованными и заслуживают серьезного анализа. В данной статье мы проверим эту критику, исследуем альтернативные методы анализа. Можно было бы от критики в адрес исследования Поповичева С.В. отмахнуться, сославшись на ангажированность критика, но в силу того, что само исследование принципиально важно для нас, это было бы неправильно. И дело ещё в том, что действительно в статье тест критерия Хи2 был использован неправомерно. Неправомерно — это ещё не означает, что итоговый вывод неверен. И тем более важно провести все статистические тесты правильным образом.

В статье есть имеются следующие данные:

PS OSS(1) OSS(2) OSS(3) OSS(4) OSS(5)
Ложь > Правда 17 13 16 18 18 17
Правда > ложь 3 7 4 2 2 3

В каждом столбце результаты применения одного бинарного алгоритма к одной и той же выборке. К данным, которые находятся в строках таблицы, был применён тест критерия Хи2, который дал очень низкое p-значение < 0.001. Ожидалось, что при отсутствии эффекта в каждой ячейке таблицы должно быть число 10. То есть предполагается равномерное распределение. В 4 ячейках нижней строки наблюдаемые частоты меньше 5, что является препятсвием к применению классического критерия Хи2, так как в этом случае ожидаемые частоты будут меньше 5. Такие проблемы решались объединением ячеек, и в этом случае пришлось бы от 6 признаков перейти всего к 2. А там уж и до одного недалеко. То есть просто просуммировать все результаты и провести классический биномиальный тест. Но в данном случае это было бы неправильно, так как данные, имеющиеся в столбцах, являются связанными. Результаты алгоритмов связаны между собой одной выборкой из 20 тестов. По этой же причине нельзя проводить и тест критерия Хи2. Его применение в данном случае приведёт к занижению p-значения, что может привести к ошибке первого рода.

Давайте вспомним, какие гипотезы проверяются с помощью Хи2:

  1. Тест согласия — с одной переменной;
  2. Тест на независимость — для связи между двумя переменными;
  3. Тест на однородность — из одной ли генеральной совокупности данные двух независимых выборок.

В рассматриваемом исследовании 2-я и 3-я гипотезы отпадают совершенно, рассматриваться может только первая. Об этом я писал выше — данные таблицы проверялись на совпадение с ожидаемым (теоретическим) равномерным, когда в каждой ячейке 10 наблюдений.

Вторая гипотеза о наличии зависимости между двумя переменными. Пример: связаны ли пол человека (муж/жен) и его мнение о продукте (нравится/не нравится). Если Н0 отклоняется, значит пол влияет на мнение.

Тест на однородность проверяет, одинаково ли распределена одна категориальная переменная в нескольких независимых группах (популяциях, выборках). То есть он отвечает на вопрос: «Имеют ли разные группы одинаковое распределение по данному признаку?» «Однородность» здесь означает равенство распределений, а не равенство средних или дисперсий.

Математика применения Хи2 в каждом случае различна. Важно это помнить, иначе тест будет проведён некорректно. Некорректность, связанная с малыми частотами < 5, в настоящее время преодолевается легко посредством использования метода Монте-Карло — Хи2 объединяется с пермутационным тестом. (Примечание: в основе алгоритма "Сокол" лежит пермутационный тест). В языке R есть отдельная команда resultmc <- chisq.test(mydata, simulate.p.value = TRUE, B = 10000). Тут mydata — матрица частот, simulate.p.value = TRUE — включает "Монте-Карло", B = 10000 — задаёт количество симуляций. В Python придётся написать небольшой скрипт — и проблема с малыми частотами решена.

Рассмотрим условия применения Хи2 подробнее.

Условия применения (Требования к данным)

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

  1. Тип данных:
  • Данные должны быть категориальными (номинальными или порядковыми).
  • Это должны быть частоты (счетчики), а не проценты или средние значения.
    Пример: количество людей, выбравших вариант А, Б, В.
    Не подходит: рост в сантиметрах (нужен t-критерий), оценки от 1 до 10 (лучше ранговые критерии, если распределение не нормальное).
  1. Независимость наблюдений:

Каждый объект (человек, случай) может быть отнесен только к одной ячейке таблицы. ❗

Один и тот же человек (данные измерений на одном человеке, объекте) не может быть учтен дважды в разных категориях.

  1. Случайная выборка:

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

  1. Достаточный объем выборки (Критическое условие!)

Критерий Хи-квадрат асимптотический, то есть он работает корректно только на больших выборках.
Правило 5: Ожидаемая частота () в каждой ячейке таблицы должна быть не менее 5.
Некоторые статистики допускают правило 20%: Не более 20% ячеек могут иметь наблюдаемую частоту меньше 5, при этом ни одна ячейка не должна иметь ожидаемую частоту меньше 1.

Как можно видеть, почти все условия либо соблюдаются, либо обходятся, учитывая численный ресэмплинг (Монте-Карло), но вот условие 2 является непреодолимым. Данные в каждой категории таблицы тесно связаны между собой. Этого бы не было, если бы каждым тестом оценивались результаты тестов отдельных 20 человек. То есть в выборке должно быть 120 человек, разбитых на шесть двадцаток, и ни один человек не должен присутвовать более чем в одной группе.

Есть ещё один казус, который исключает применение критерия Хи2 для исходных данных при проверке гипотезы на согласие. Мы не можем сранвивать таблицу исходных данных с таблицей такой же размерности в которой во всех ячейка стоят 10. Дело в маргинальных частотах. Если по столбцам маргинальные частоты будут все равны и равны 20, то построкам совпадения нет. Суммы по строкам должны быть равны 60, а, например, в первой таблице они равны 99 и 21. Единственная возаможность обойти его это разбить данные на 12 категорий, по две на каждый алгоритм, получив таким образом таблицу в одну строку. Но тогда получим кроме связи в результате псевдорепликации, попарную жесткую связь между категориями. И исключить, например, вторую строку из таблицы, для срванения первой строки с такой же строкой из десяток, нельзя. Опять получим несовпадение маргинальных сумм.

Что же делать в такой ситуации? Можно было бы взять один алгоритм, например, о котором известно, что он самый точный, и в силу малости выборки провести точный (не асимптотический) биномиальный тест. Стоило ли использовать результаты шести алгоритмов? Моё мнение, стоило, так как каждый алгоритм — это отдельный "взгляд на решение задачи", и, объединяя их результаты, мы получаем больше информации. Подтверждение правильности этого мнения будет дано позже — немного терпенья. Лучшим решением при объединении алгоритмов было бы использование метода Монте-Карло.

  1. Для каждого из 20 элементов считаем долю алгоритмов, выдавших A > B (или просто число успехов по всем алгоритмам для этого элемента).
  2. Наблюдаемая статистика: T_obs = 99 / 120 = 0.825
  3. Генерируем B = 10 000 ресемплированных выборок: с вероятностью p = 0.5 для всех алгоритмов одновременно инвертируем их результаты для каждого из 20 элементов выборки, пересчитываем долю A > B в каждой выборке. p_value = доля ресемплированных выборок, где T_resemp ≥ T_obs

Такой алгоритм называют **знаковый перестановочный тест (permutation test) для связанных выборок**. Он учитывает связность данных и корреляцию результатов алгоритмов. Но тут опять-таки придётся написать небольшой скрипт на Python (ну или на другом языке). На рассматриваемых данных (с моделированием распределения результатов алгоритмов на каждом элементе выборки, с сохранением мапгинальных частот) результат такого теста даёт р-значение = 0,0009. Это когда **Ложь** против **Правды**. А вот, например, **Ложь** против **Лжи**:

PS OSS(1) OSS(2) OSS(3) OSS(4) OSS(5)
Ложь1 > Ложь2 9 10 13 8 9 11
Ложь2 > Ложь1 11 10 7 12 11 9

перестановочный тест выдал р-значение = 0.5372

И Правда против Правды:

PS OSS(1) OSS(2) OSS(3) OSS(4) OSS(5)
Правда1 > Правда2 9 5 13 12 11 10
Правда2 > Правда1 11 15 7 8 9 10

перестановочный тест выдал р-значение = 0.5329

Получается, что хотя в статье критерий Хи2 был использован неправомерно, но тем не менее результат был получен верный. Бывает и так в жизни. Получилось это благодаря тому, что в общем-то и без статистических тестов, даже учитывая малость выборки, по самим данным видно, что в случае Правда против Лжи они сильно отличаются от "равномерного распределения" (по 10 в ячейке). А в оставшихся двух случаях от равномерного отличаются слабо. И если провести точный биномиальный тест для каждого алгоритма в отдельности, то получим следующие p-значения: 0.001, 0.132, 0.006, 0.0002, 0.0002, 0.001. Один алгоритм — OSS(1) выбивается из общего ряда, не давая подтвердить гипотезу исследования. Но пять алгоритмов голосуют "за". И решение такого комитета очевидно — не отвергать/подтвердить гипотезу исследования подавляющим большинством. В статье можно было бы ограничиться именно таким результатом. Но! И тут важный момент! Именно такой результат биномиальных тестов зависит от конкретных полученных данных. А так как выборка мала, данные могли бы быть иными, такими, что подбный комитет перестал бы быть таким согласованным. Этот момент будет отправной точкой, на основании которой, я в следущей части покажу, что использовать все шесть алгоритмов, объединяя их результаты, это более правильное решение, нежели использовать один из них, или все, но не объединяя.

Проведённый анализ показывает, что строгий статистический подход не просто "подтверждает" результат, а позволяет получить его корректным путём. Это повышает доверие к исследованию и защищает его от справедливой критики. Использование методов ресэмплинга, таких как **перестановочный тест**, открывает возможности для работы со сложными, связанными данными, особенно в условиях малых выборок, характерных для многих прикладных исследований.

А какие есть ещё решения у этой задачи? Думаю, что в следующей части мы их рассмотрим.