Проверка гипотезы о естественном появлении пиков на круглых значениях явки

Проверка гипотезы о естественном появлении пиков на круглых значениях явки

throwawayyourtelevision

В статье про анализ итогов выборов на Хабре приведен график распределения явки избирателей (по оси X - процент явки, по оси Y - число участков с такой явкой). На нем видны пики на "круглых" значениях вроде 70, 75, 80, 85, 90, 95%. Вот этот график с пиками:

График числа участков (ось Y) с определенным процентом явки (ось X). Размер бина 0,1%.

В комментарии https://habrahabr.ru/post/352424/#comment_10733144 пользователь @fediq со ссылкой на свой блог http://fediq.ru/fraction-distribuiton-plot/ утверждает, что пики могут объясняться естественными причинами, за счет того, что число выданных бюллетеней и число избирателей - это целые числа и при делении целых чисел определенные "красивые" дроби появляются с большей вероятностью.

Однако, эта гипотеза вызывает сомнения. Такое возможно при делении малых чисел, но в России среднее число избирателей на один участок составляет около 1200 чел (в городах делают УИКи по 2000 чел.), и показатели явки тоже в большинстве случаев - большие числа (50-70% избирателей). При делении таких больших чисел вероятность получить "красивое" соотношение должна быть невысока.

Проверка

Для проверки была написана программа на PHP. Исходный код: https://pastebin.com/bWBufn05

Все параметры задаются в начале программы и прокомментированы.

Программа моделирует 50 000 УИКов (в России более 90 000 УИК). На каждом участке генерировалось случайное целое число избирателей (от 1000 до 2000, равномерное распределение) и дробная явка в процентах с нормальным распределением. Среднее - 55% - было взято у независимых наблюдателей, а стандартное отклонение (сигма) было "взято с потолка" и равно 10%. То есть почти вся явка лежала в диапазоне 3 сигм, от 25% до 85%, с центром в 55%. Сгенерированная случайно явка в процентах, дробное число, переводилась в число человек, округленное до целого, сохранялось это целое число, после чего процент отбрасывался. Для каждого УИК, таким образом, сохранялось целое число избирателей в списках и целое число проголосовавших.

Затем по каждому УИК делением вычислялся процент явки и считалось распределение этого процента по бинам размером в 1%. Результат был сохранен в CSV-файл 50000-uiks-55-10-mt-rand.csv: https://pastebin.com/xQxYWh9k

Также, было сделано несколько дополнительных экспериментов (для их проведения в программе оставлены флаги):

  • (CSV файл 50000-uiks-55-10-norm-voters.csv: https://pastebin.com/AqaSp3uf ) было сгенерировано число избирателей на участке не с равномерным, а с нормальным распределением
  • (CSV файл 50000-uiks-55-10-random-int.csv: https://pastebin.com/HfcPXPDa ) при генерации явки использовался не ГСЧ на алгоритме Вихря Месенна (mt_rand), а на PHP-функции random_int(), которая использует /dev/random и может давать "более" случайные числа
  • (CSV файл 50000-uiks-55-10-bin-0.2.csv: https://pastebin.com/4wbgkeBr ) использовался размер бина 0.2%

Для всех 4 CSV файлов были построены и изучены графики с помощью первого попавшегося сервиса plot.ly. Там приведены и исходные данные, и графики: https://plot.ly/~Sanda-san/5/ . Вот, как они выглядят (подробнее изучить их можно, зайдя по ссылке):

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

Таким образом, гипотеза @fediq о пиках из-за естественных "круглых" соотношений случайных чисел при большом числе избирателей не подтвердилась.

Приглашаю всех перепроверить результаты. 

На случай, если какие-то ссылки перестанут работать, прикладываю копию архива с программой и CSV файлами: http://rgho.st/62DZRnGTq

Дополнения

UPD 1.04.2018: Были мнения, что пики могли появляться из-за наличия маленьких участков. Пользователь @modos189 построил в комментарии график без учета участков менее 500 человек, и пики на круглых значениях остались:

График количества участков с определенной явкой без участков менее 500 чел.

UPD 4.04.2018: Пользователь @fediq в комментарии к статье выложил файл iPython Notebook с программой и графиками, на которых эффект "пиков" на круглых дробях более выражен. Вот график оттуда, где число избирателей распределено с использованием гамма-, а явка - с использованием бета-распределения (которое ближе к реально получившемуся). Точные параметры распределения можно увидеть в файле. Светлыми полосами выделены "круглые" дроби вроде 3/5 или 2/3:

График распределения числа участков с определенной явкой с гамма-распределением числа избирателей и бета-распределением явки.


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

  • на графике @fediq самые заметные пики находятся на верхушке колокола, а на краях они почти не заметны. В то время как на графике с выборов пики находятся далеко справа от верхушки
  • на графике @fediq, если сравнить отношение высоты пика к высоте окружающей его части колокола, то (на глаз) получаются соотношения до 5:4, или 1,25. В то время как на графике с выборов это соотношение (на глаз) доходит до 7:2 или 3,5.

Ссылка на notebook: https://github.com/fediq/fraction-distribution-plot/blob/master/Fraction%20distribution%20plots.ipynb

UPD 4.04.2018: Также, высказывались замечания, что картинки графиков маленькие, и из-за этого мелкие особенности графиков могут теряться, а пики могут стать менее заметными. Чтобы проверить это, в программе размер бина был изменен на 0,1% (так, что всего стало 1000 бинов) и был сгенерирован график с шириной примерно 2400 пикс., так, что каждая точка по оси X соответствует примерно 2,4 пикселям и мелкие детали не теряются. Полная картинка: https://i.imgur.com/mfgcPEU.png (размер 3000x3000 пикс., PNG). Вот она в уменьшенном виде:

UPD 4.04.2018: в комментарии пользователя @Druu была высказана мысль, что если "сперва генерировать размер участка, потом количество людей, которые на этот участок пришло (т.о. получается дробь) и уже потом считать процент", то пики будут заметны. Для проверки этой гипотезы был доработан iPython notebook от @fediq, код: https://pastebin.com/rAC7CqJd , получившийся график (ссылка на картинку в полном размере: https://i.imgur.com/Egv4Nz1.png):

"Круглые" дроби на графике помечены белыми линиями. Пики на этом графике есть, но:

  • отношение высоты пика к средней высоте окружения не превышает (на глаз) 3:2, или 1,5, в то время, как на графике с выборов оно доходит до 3,5
  • пики распределены более-менее равномерно и не выделяются пики на числах 75%, 80%, 85%, 90%, 95% и т.д. Более того, для чисел 70% (на графике 7/10) или 80% (помечено как 4/5), значения ниже, чем на окружающих их "некруглых" значениях.
  • на картинке с выборов пики поменьше "тяготеют" к целому числу процентов, например, 91%, 92%, 93%, 94%, 96%, а здесь такого не наблюдается.

Report Page