?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
Отношение двух случайных целочисленных величин.
nyaload
_winnie
Должен признать, что пики на графиках не являются безоговорочным признаком фальсификаций (здесь обсуждаю только пики, и факт их наличия, а не их размер или преступления с подделкой протоколов).

Если взять отношение двух ЦЕЛОЧИСЛЕННЫХ случайных величин, то на на простых дробях с небольшим знаменателем (напр. 1/2, 1/3, 1/4,1/5,...) образуются пики сами собой.

Так что пики могут взяться не только из-за искусственной подгонки результатов, а просто в силу того, что на 4 делится больше чисел, чем на 39 или 41.

Простой пример, дискретное распределение отношения двух случайных целых чисел i/j, i от 1 до 300, j от 0 до i (код для желающих)
Получается вот такой фрактал:

Заметьте, пики не только на 3/4 = 75%, но и на таких менее "круглых" числах как 1/7, 2/7, 6/7.
Когда мы на такой фрактал накладываем целочисленную решетку, мы получаем на ней пики там где находятся делители размера решётки (50%, 25%, 20%, 5%, 2%).

Попытка промоделировать выборы. Количество проголосовавших на участке берётся из файла с данными голосования (можно взять похожее log-normal, пики будут такие же). Биноминальная случайная величина B(n,p) для процента голосов за партию с p характерным для конкретного региона, выбирается как нормальная с центром в 40% +- sigma=20%.) Биноминальная лучше чем нормальная подходит для описания распределения на конкретном участке на концах интервала 0-100%. Если взять нормальную, то за Яблоко иногда будет отрицательное количество голосов, а за КПРФ иногда больше 100% (код, требует файл с данными об участках).

Через шаг в 1%:


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


  • 1
Хех, сам только-что хотел такое же промоделировать.

Для каждого конкретного размера участка распределения голосов будет биномиальным, P(k)=Cnk pk qn-k (q=1-p). В пределе k≫1 (для Яблока это не выполняется), n-k≫1 это даёт нормальную с центром pn и сигмой √p̅q̅n̅ (в относительных единицах явки — p и √p̅q̅/√n̅). Т.е. сигма зависит от размера участка. В сумме гауссианы с одинаковым центром и разной ширины сложатся в нечто похожее на гауссиану с тем же центром (около 0 и 100% приближение становится неверным).

Как видно на модели, хоть заусеницы и есть, им далеко до наблюдаемых на практике. Непросто будет подобрать модель, дающую такие же выбросы.

Ещё бы нарисовать двумерное распределение (размер участка — голоса) для реальных данных и модельных и посмотреть насчёт горизонтальных полос.

там довольно напряженно моделировать, поскольку распределение голосов за сами-знаете-какую партию довольно... гм, интересное, и я только недавно смог подобрать хоть какую-то благоразумную модель -- и то после того, как сделал двуразмерную гистограмму.

я постараюсь завтра напечатать результаты.

я уж сдалал все давно, да вы не посмотрели

извините, забегался.
уже посмотрел.
вы молодец.

Если всё, что нам дано - это целочисленные проценты по участкам, то всё уже совсем печально загрублено.
Если есть исходные данные - списочный состав и количество проголосовавших - то результат деления (скажем, R = 344/1020 = 0.3373) надо класть не в округлённый бин (34, если в процентах, или 334, если до тысячных долей), а в два соседних бина с коэффициентами:

N = 1000 // number of bins
R = float(344)/1020
R_accounting = 1000 * R
R_floor = R_accounting - int(R_accounting); //R_floor:[0..1[
ys[int(R_accounting)] += R_floor;
ys[int(R_accounting) + 1] += (1 - R_floor);

Очень ослабляет пики, оставляя валидными интегральные величины.

я ошибся, надо класть в бины наоборот, но суть, думаю. ясна...

> ratio_in_percent = int(100*ratio)/1.0

Попробуй заменить на

ratio_in_percent = int(100*(ratio+0.5))/1.0

С днём рождения!

С наилучшими пожеланиями!

Re: С днём рождения!

Спасибо!

Re: С днём рождения!

Главное - крепкого здоровья и постоянной жажды жизни!
Остальное - можно купить...

Re: С днём рождения!

Присоединяюсь.

Эту версию успешно проверили

http://oude-rus.livejournal.com/542533.html#cutid1
И на маленьких участках результаты много ближе к нормальному распределению, чем на больших.

Re: Эту версию успешно проверили

Ну, дело не в маленьких участках. А в том, что все числа делятся на 1, половина чисел делится на два, треть чисел делится на три, ...
Поэтому в точке 1.0 будет столбик высотой в N пикселей, в точке 0.5 будет столбик N/2 пикселей, в точке 1/3 и 2/3 столбик высотой в N/3 пикселей ...
Если из кода, который рисует распределение отношения двух дискретных величин все i, которые меньше 50, то получаем такой же фрактал:

import pylab

stat = {}

for i in xrange(1, 300):
    if i<50:
        continue
    for j in xrange(i+1):
        proc = float(j) / i
        stat[proc] = stat.get(proc,0) + 1

a = '1/3 2/3 1/2 3/4 3/7  2/7 1/7 6/7'.split()
b = [eval(x.replace('/', '.0/')) for x in a]

pylab.xticks(b, a)

pylab.yticks([0])
pylab.grid()

xs, ys = map(list, zip(*sorted(stat.items()))) #list of pairs to pair of lists

pylab.vlines(xs, [0], ys, 'g')

pylab.show()





Re: Эту версию успешно проверили

Но такой метод не дает специальные пики всех значениях, кратных 5 вместо делителей размера решетки, плюс для больших участков (>100 человек) пики из-за квантования при бине в полпроцента меньше, чем в вашем примере.

Re: Эту версию успешно проверили

Ваш вариант в подробностях:
http://kobak.livejournal.com/102646.html?style=mine#cutid1
Гипотеза не подтвердилась

Похожую картинку

(с большим элементом случайности) нарисовал Петя Митричев, у него тоже есть некоторые пики на рациональных числах.

Но в общем-то это мало похоже на данные с выборов. См. также забавные данные по Стерлитамаку, это уже совсем цирк kireev.livejournal.com/703723.html

Re: Эту версию успешно проверили

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

с днем рождения вас, кстати!

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


если числа небольшие, то видно "зубы", но они не "на красивых процентах", а где попало:


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


если интересно, код здесь: https://sites.google.com/site/n9621569140/stuff/voting.py

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

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

http://dobrokot.ru/pics/i2011-12-12__15-55-12_40kb.png




действительно, если сильно приблизить, то видны пики:

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

кстати, вчера понял, что перемудрил с явкой. если не выбирать случайное значение для участка, а написать просто
t = r.randint(0, 99) < TURNOUT
получаются те же картинки, только еще более гладкие (больше выборка просто). там от пиков уже почти ничего не остается:


Спасибо!

Я разобрался в ситуации и могу утверждать наверное, что пики на графике результатов ЕР -- это не артефакты. Вот, посмотрите: http://kobak.livejournal.com/102646.html

  • 1