Содержание

Опрос за пару минут

Насколько вероятно, что вы нас порекомендуете?

Собрать ответы Есть бесплатный тариф
Лого WebAsk

Хи-квадрат по данным опроса

Как разобрать результаты
Хи-квадрат по данным опроса

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

Ситуация, в которой он нужен, выглядит одинаково почти в любом исследовании. Вы разрезали ответы по сегменту, увидели, что одна группа отвечает не так, как остальные, и застряли на вопросе: это реальное различие или обычный разброс, который на другой выборке развернётся в другую сторону. Ниже разбираем весь путь от выгрузки ответов до строчки в отчёте, а расчётную часть с формулой, ожидаемыми частотами и степенями свободы можно отдать калькулятору хи-квадрата.

Что тест отвечает, а что нет

Тест берёт вашу таблицу и сравнивает её с той, которая получилась бы, будь два признака совсем не связаны. Чем сильнее реальные частоты расходятся с ожидаемыми, тем больше итоговое число. Как именно оно считается и откуда берутся ожидаемые частоты, разобрано на странице калькулятора, здесь важнее другое.

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

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

Шаг первый: вопрос до того, как открыли выгрузку

Гипотеза формулируется одной фразой вида «зависит ли B от A», и рядом сразу записываются оба решения: что делаем, если связь есть, и что делаем, если её нет. Если на второй вариант ответа нет, тест не нужен, потому что он ни на что не повлияет.

WebAsk · сервис опросов Спросите свою аудиторию Готовые шаблоны, ветвления по ответам и отчёты — опрос собирается за пару минут Создать опрос

Выглядит это так. «Зависит ли оформление подписки от канала, по которому человек пришёл» превращается в разрез «канал привлечения» и отклик «оформил или нет». «Зависит ли намерение сменить работу от подразделения» превращается в разрез «отдел» и отклик «рассматриваю предложения». В обоих случаях видно, что делать с результатом: перераспределять бюджет между каналами, идти разговаривать с конкретным отделом.

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

Шаг второй: из выгрузки в таблицу сопряжённости

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

Как из плоской выгрузки ответов получается таблица сопряжённости

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

Правило обработки пропусков и варианта «затрудняюсь ответить» принимается один раз и сразу на обе переменные. Число выброшенных строк стоит записать, оно потом пойдёт в отчёт.

Дальше идёт механика сводной таблицы в Excel или Google Таблицах: первый вопрос в строки, второй в столбцы, а в область значений кладётся «Количество» по колонке с идентификатором ответа, не сумма и не среднее. Это место, где ошибаются чаще всего.

Готовую таблицу проверяют одним действием: сумма всех ячеек должна совпасть с числом респондентов, у которых заполнены оба вопроса. Не со всеми строками файла, потому что пропуски и логические переходы законно уменьшают базу. Перед кросстабом полезно ещё посмотреть частоты по каждому вопросу отдельно, это ловит перекосы, которые в свёрнутом виде уже не видны; как это делается, описано в статье про дескриптивный анализ ответов.

Шаг третий: привести оба вопроса к категориям

Тест работает с ярлыками, поэтому вопросы почти всегда приходится готовить. Открытые ответы кодируются вручную в три-пять групп. Числовой возраст режется на интервалы. Пятибалльная шкала схлопывается до трёх позиций, согласен, нейтрально и не согласен, иначе таблица расползается и в ячейках остаётся по два человека; готовые группы по шкале удобно взять из калькулятора шкалы Лайкерта.

Разумный размер таблицы это две-четыре категории на сторону. Каждая лишняя строка или колонка увеличивает нужную выборку, а выигрыш в точности обычно нулевой.

Отдельно про укрупнение редких вариантов, потому что тут проходит граница между нормальной работой и подгонкой. Склеивать категории можно, это стандартный приём, но при двух условиях. Первое: склейка должна быть осмысленной, три редких мессенджера объединяются в «прочие мессенджеры», а не сваливаются в «прочее» вместе с ответом «не пользуюсь». Второе: решение принимается до расчёта. Перебор вариантов склейки, пока p не упадёт ниже 0,05, ломает сам тест, фактический уровень ошибки становится неизвестным, а вывод не воспроизводится на следующей волне. Что и почему объединили, пишется в отчёт.

Что проверить до расчёта

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

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

Почему вопрос с множественным выбором нарушает независимость наблюдений

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

Отсюда же следует, что в ячейках должны стоять именно абсолютные частоты. Проценты, доли и средние баллы в тест не подставляют, и вот почему это не придирка. Возьмём две группы по двадцать человек, в первой пятнадцать ответов «да», во второй восемь. На частотах получается хи-квадрат 5,01 и p = 0,025. Те же самые данные, записанные процентами по строкам, 75 против 25 и 40 против 60, дают 25,06 и p около 0,0000006. Данные не изменились, изменилась только сумма введённых чисел, а статистика ей прямо пропорциональна.

Третья проверка касается размера ячеек, и тут важно не перепутать, на что смотреть. Ограничение относится к ожидаемым частотам, а не к наблюдаемым, поэтому наблюдаемый ноль сам по себе ничего не нарушает. Ходовое правило восходит к работе Кокрана 1954 года: ни одна ожидаемая частота не ниже единицы и не более 20% ячеек ниже пяти. Само число пять пришло ещё от Фишера и всегда обсуждалось как условность, а не как закон природы. Практический вывод такой: нарушение это повод насторожиться, а не приговор, но на таблице 2×2 надёжнее сразу посчитать точный тест Фишера.

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

Сквозной пример: канал привлечения и подписка

Сервис доставки продуктов «Грядка» спрашивает новых клиентов, откуда они узнали о сервисе, и отдельно смотрит, оформили ли они подписку на регулярные заказы. Пришло 512 анкет, после чистки осталось 480. Вопрос простой: зависит ли подписка от канала.

КаналОформили подпискуНе оформилиВсегоДоля подписок
Контекстная реклама6213820031,0%
Соцсети6010016037,5%
Рекомендации знакомых586212048,3%
Всего18030048037,5%

Ожидаемая частота для ячейки считается как итог строки, умноженный на итог столбца и делённый на общий итог. Для контекста и подписки это 200 × 180 / 480 = 75. Остальные пять ожидаемых: 125, затем 60 и 100 у соцсетей, затем 45 и 75 у рекомендаций. Минимальная ожидаемая равна 45, правило выполняется с большим запасом.

Дальше складываем вклады ячеек: 2,2533 плюс 1,3520 у контекста, ровно по нулю у соцсетей, 3,7556 плюс 2,2533 у рекомендаций. Сумма даёт хи-квадрат 9,61 при двух степенях свободы, критическое значение на уровне 0,05 равно 5,99, а p получается 0,008.

Отдельно считают размер эффекта, чаще всего это V Крамера: корень из хи-квадрата, делённого на произведение числа наблюдений и меньшей из двух величин, числа строк минус один и числа столбцов минус один. В нашем случае это корень из 9,6142 / 480, то есть 0,14.

Руками это показано один раз, чтобы было видно, откуда берутся числа. В работе таблица вбивается в калькулятор, который сразу возвращает ожидаемые частоты, степени свободы и p. Принимает он целые неотрицательные числа и таблицы от двух до пяти строк и столбцов, что совпадает с разумным размером кросстаба.

Как читать результат: три слоя вместо одного числа

Первый слой это p. Значение 0,008 означает, что при полном отсутствии связи такой или ещё более резкий перекос выпадал бы примерно в восьми случаях из тысячи. Различие вряд ли случайно. Что именно стоит за этой вероятностью, подробно разобрано в глоссарии, в карточках про p-value и статистическую значимость.

Второй слой это доли по строкам, и именно они несут содержание вывода: 31,0% против 48,3%, разрыв в семнадцать процентных пунктов. Само по себе значение 9,61 не говорит читателю отчёта ничего.

Третий слой это размер эффекта. V Крамера 0,14 означает слабую связь: ориентировочно 0,1 слабая, 0,3 средняя, выше 0,5 сильная. Эти пороги годятся для таблиц вида 2 на сколько-то, как в нашем примере; на таблицах побольше их принято делить на корень из меньшей стороны минус один. Слой нужен потому, что значимо не равно важно. На выборке в 8000 ответов значимой становится уже разница около двух процентных пунктов, а V при этом порядка 0,02, и перестраивать работу на таком основании бессмысленно. Коротко: p отвечает на вопрос, отличить ли находку от случайности, а V на вопрос, стоит ли ради неё что-то менять.

Отдельно про незначимый результат, который обычно оставляют без объяснений. Если p получилось 0,06, это не «связи нет», а «на таком объёме данных её не видно». В отчёт идёт формулировка «различие не достигло значимости», направление различия и оценка выборки, на которой его можно было бы поймать. Чего делать нельзя: добирать респондентов до тех пор, пока p не перейдёт черту, и задним числом объявлять, что уровень был 0,1.

Где именно сидит эффект

Хи-квадрат глобален: он говорит, что таблица в целом неоднородна, но не указывает ячейку. Из-за этого после значимого теста на таблице 4×5 легко назвать не ту клетку и уйти в отчёт с выводом, которого в данных нет.

Три слоя таблицы: наблюдаемые частоты, ожидаемые и стандартизованные остатки

Рабочий инструмент это скорректированные стандартизованные остатки. Остаток показывает, насколько ячейка разошлась с ожидаемым, приведённое к сопоставимому масштабу, поэтому остатки разных ячеек можно сравнивать между собой. Значение по модулю больше двух означает, что ячейка заметно выбивается; если ячеек много, порог поднимают, потому что при шести ячейках уже работает та же арифметика множественных сравнений, о которой речь ниже.

В нашем примере по столбцу подписок остатки такие: минус 2,49 у контекста, ровно ноль у соцсетей и плюс 2,83 у рекомендаций. По второму столбцу они те же по модулю и обратные по знаку. То есть соцсети сработали точно по среднему и к результату отношения не имеют, а весь эффект держится на двух краях.

Проверить это можно вторым способом, разбив таблицу на попарные сравнения и поделив порог на число сравнений. При трёх парах порог становится 0,017. Контекст против рекомендаций даёт p = 0,0019 и проходит, соцсети против рекомендаций дают 0,069, контекст против соцсетей 0,195, и обе пары не проходят. В отчёт после такой проверки идёт узкая формулировка: пришедшие по рекомендации подписываются заметно чаще пришедших из контекста. Общая фраза про влияние канала данным уже не соответствует.

Когда хи-квадрат не тот инструмент

Шесть ситуаций, где тест либо неприменим, либо считает не то, что нужно.

Развилка выбора теста в зависимости от типа данных опроса

СитуацияЧто взять вместоПочему
Одни и те же люди до и послеТест МакнемараНаблюдения связаны, смотреть надо только на сменивших ответ
Вопрос «отметьте всё подходящее»Серия таблиц 2×2 с поправкой на множественностьРеспондент попадает в несколько ячеек сразу
Порядковая шкала с трендомКритерий Краскела-Уоллиса, тау-b Кендалла, тест на трендХи-квадрат не видит порядка категорий и теряет мощность
Выборка взвешена под структуру населенияПоправка Рао-СкоттаОбычный тест принимает сумму весов за размер выборки
Таблица 2×2 с мелкими ожидаемымиТочный тест ФишераПриближение на малых частотах становится неточным
Два числовых показателяКорреляцияКатегории тут не нужны, есть шкала

Про последнюю строку отдельно: если обе переменные числовые, работать надо с коэффициентом корреляции Пирсона, а если задача сводится к сравнению двух конверсий, быстрее закрыть её калькулятором статзначимости A/B-теста.

Где чаще всего ошибаются

Главная ошибка по частоте это множественные сравнения. Аналитик прогоняет тридцать кроссов, каждый демографический признак против каждого вопроса, находит три значимых и отчитывается о находках. Между тем при пороге 0,05 и тридцати тестах вероятность получить хотя бы одно ложное срабатывание составляет около 78%, при двадцати тестах 64%, при десяти 40%. Лечится это заранее заявленными тремя-пятью гипотезами, поправкой на множественность при широком скрининге и честной пометкой остального как гипотез для следующей волны. Число просмотренных кроссов тоже пишется в отчёт.

Вторая ошибка встречается при сверке с R или SPSS на таблицах 2×2: числа не совпадают, и аналитик решает, что калькулятор врёт. На самом деле chisq.test в R по умолчанию применяет поправку Йейтса, а SPSS печатает её отдельной строкой Continuity Correction. Сравнивать надо со строкой Pearson Chi-Square.

Остальные три ошибки короче. Произвольно выброшенные «Другое» и «Затрудняюсь ответить», из-за чего база меняется от строки к строке. Проценты, перенесённые в тест прямо из готового слайда. И речевые обороты в выводах: «хи-квадрат доказал, что пол влияет», «связь сильная, потому что хи-квадрат равен 48», «значимо, значит меняем продукт». Первый оборот подменяет связь причиной, второй путает значение статистики с силой связи, третий пропускает вопрос о размере эффекта.

Как записать вывод и что делать дальше

Отчётная строка выглядит так: хи-квадрат = 9,61; df = 2; p = 0,008; V Крамера = 0,14; N = 480. Рядом кладётся таблица с частотами и долями по строкам.

Ниже пишется вывод на языке решения, а не статистики: клиенты по рекомендации оформляют подписку в 48,3% случаев против 31,0% у контекстной рекламы, соцсети держатся на уровне среднего. Затем ограничения: опрос добровольный, ответили 480 человек, 32 анкеты исключены при чистке, и это связь, а не причина, за ней может стоять третий фактор вроде готовности к покупке. И только потом решение: масштабировать рефералку, а контекст не резать, а чинить посадочную и первое письмо.

Как это сделано в WebAsk

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

Дальше ответы выгружаются в таблицу, сворачиваются в кросстаб и вбиваются в калькулятор хи-квадрата, который сам считает ожидаемые частоты, степени свободы и p. Если сравнивать надо не доли, а средние по числовым показателям, и сегментов при этом много, пригодится автопоиск значимых различий между сегментами: он считает критерий Уэлча, показывает размер эффекта и сам применяет поправку Бонферрони, то есть закрывает множественные сравнения ровно так, как описано выше. Открытые ответы, которые предстоит кодировать в категории, можно предварительно разобрать встроенным ИИ, он собирает из них сводку и подсказывает, какие группы вообще есть в данных.

Частые вопросы

Сколько ответов нужно собрать, чтобы тест имел смысл?

Считать можно и на сотне, но правило про ожидаемые частоты быстро упрётся в размер таблицы. Ориентир простой: чем больше ячеек, тем больше нужно людей, и на таблице 3×3 сотни ответов уже мало. Для таблицы 3×2 с не слишком редкими категориями рабочий минимум это несколько сотен ответов.

У меня выгрузка в Excel, строка на человека. Как получить таблицу сопряжённости?

Сводной таблицей. Первый вопрос кладётся в строки, второй в столбцы, а в значения ставится «Количество» по колонке с идентификатором ответа. Проверка: сумма всех ячеек должна совпасть с числом респондентов, у которых заполнены оба вопроса.

Куда девать «затрудняюсь ответить» и «другое»?

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

Я объединил три редких варианта в «прочее». Это нормально или подгонка?

Нормально, если склейка осмысленная и сделана до расчёта. Признак подгонки простой: если вы вернулись к группировке после того, как увидели p, и стали пробовать другие варианты, результат уже не имеет заявленного уровня ошибки. В отчёте состав группы «прочее» стоит расписать, чтобы читатель мог оценить решение сам.

У меня вопрос «отметьте всё подходящее». Можно по нему хи-квадрат?

Обычный тест независимости неприменим: один человек попадает сразу в несколько ячеек, и сумма таблицы окажется больше числа респондентов. Рабочий обходной путь это отдельная таблица 2×2 на каждый вариант, «выбрал или не выбрал» против сегмента, с поправкой на число проверок.

Я и так вижу по процентам, что группа отвечает иначе. Зачем ещё тест?

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

p получилось 0,06. Считать, что связи нет?

Нет, корректная формулировка это «различие не достигло значимости на текущем объёме данных». Стоит указать направление различия и прикинуть, какая выборка нужна, чтобы поймать эффект такого размера. Добирать ответы до перехода через порог нельзя, это ломает интерпретацию p.

У меня три тысячи ответов, и значимым выходит всё подряд. Так бывает?

Да, это нормальное поведение теста: чем больше выборка, тем более мелкие различия он улавливает. Именно поэтому рядом с p всегда смотрят размер эффекта. Если V Крамера около 0,02, различие реальное, но настолько мелкое, что решений на нём не строят.

Опросил одних и тех же людей до и после запуска. Хи-квадрат подойдёт?

Нет, наблюдения в таком дизайне связаны. Обычный тест примет две волны за независимые выборки, переоценит разброс и выдаст завышенный p, то есть реальный сдвиг может просто не увидеть. Для двух замеров на одних и тех же людях используют тест Макнемара, который смотрит только на тех, кто сменил ответ.

Я прогнал пол, возраст и город против двадцати вопросов. Какая часть находок настоящая?

При шестидесяти проверках и пороге 0,05 около трёх значимых результатов ожидаются просто по случайности. Без поправки на множественность отличить их от настоящих нельзя, поэтому такой прогон честнее описывать как генерацию гипотез, а не как результат.

1
Опрос за пару минут

Насколько вероятно, что вы нас порекомендуете?

Собрать ответы Есть бесплатный тариф
Еще больше интересного в нашем Telegram канале!

Никакого спама, только самое актуальное