Malá analýza výsledkov referenda

Čo spraví programátor, keď uvidí výsledky referenda? Porozmýšľa, potom zoberie výsledky druhého kola prezidentských volieb a nakreslí si tabuľku. Takúto.

Riadky sú možnosti hlasovania v prezidentských voľbach, stĺpce sú referendové možnosti. Čísla sú verejne dostupné výsledky.

Prečo? Lebo keby niekto vedel vyplniť tie prázdne políčka, tak vie odpovedať na celkom zaujímavé otázky. Napríklad:

  • Ako hlasovali v referende Kiskovi priaznivci?
  • Je tam nejaký rozdiel oproti Ficovcom?
  • Koho volili za prezidenta Chromíkovci? (stĺpec — homoadopcie nie)
  • Koľko ľudí si radšej spravilo pekný víkend a nešlo hlasovať ani raz?

Otázka za sto bodov znie:

Ako tie prázdne políčka vyplniť, aby súčty čo najlepšie sedeli?”

No, napríklad takto:

Chyba označuje rozdiel súčtu buniek od reálneho počtu.

Vyzerá, že to celkom pasuje a nič mi už nebráni robiť unáhlené závery. Stačí tabuľku normalizovať po riadkoch a je jasné, že:

  • 75% Kiskovcov a 70% Ficovcov nešlo hlasovať do referenda.
  • 28% Ficovcov hlasovalo proti adopciám homosexuálnymi pármi.

Keď to znormalizujem po stĺpcoch tak:

Dúhoví sú prvý stĺpec.
  • 28% Chromíkovcov volilo Fica, 34% Kisku.
  • 28% dúhových sú Kiskovci.

A mohol by som pokračovať, keby toto celé nemalo jeden zásadný háčik: Tie čísla sú strašne nepresné a vlastne neviete odkiaľ som ich zobral. Ďalšie čítanie je len pre náročných.


Ak ste dávali na strednej škole pozor na matematike, tak iste viete, že vyriešiť rovnicu, kde je 9 neznámych (buniek tabuľky) a máte len 6 rovníc (výsledky referenda a volieb) je problém. Resp. nie je to žiadny problém, lebo to má nekonečne veľa riešení. To znamená, že ak dám akékoľvek číslo hocikde do tej tabuľky, tak viem nájsť ostatné čísla tabuľky tak, aby sedeli počty. A to je ten problém.

Čo s tým?

Prvá vec je, že tie rovnice majú ešte jednu podmienku. Všetky bunky musia byť nezáporné čísla. Otázka znie, či nám toto nejako zásadne obmedzí to nekonečno riešení a bude sa s tým niečo dať urobiť.

Kedže som ako programátor tvor lenivý a analyticky sa mi to riešiť nechce, tak použijem metódu Monte Carlo. Táto sofistikovane nazvaná metóda nie je nič iné ako blbé náhodné skúšanie možností a zapisovanie si výsledkov. Ok, idem skúšať výpĺňať tú (kontingenčnú) tabuľku náhodne, ale hneď mám problém. Všetky možnosti sa mi skúšať nechce lebo väčšina z nich budú blbosti, ktorým nebudú pasovať súčty.

Prvý nápad je náhodne inicializovať tabuľku a pozrieť, ktorú bunku treba upraviť, aby sa chyba v sumách zmenila čo najviac. Ukazuje sa, že je dobré použiť strednú kvadratickú chybu, aby som mal chyby v stĺpcoch a riadkoch približne rovnako veľké. Táto sofistikovaná metóda sa volá gradientový zostup a je plná derivácii. Naštastie derivácia nie je nič strašné, len odpočítanie dvoch čísel. Toto opakujem až kým sa to neustáli alebo chyba nie je dostatočne malá.

Ok, kedže to náhodne inicializujem, tak je dobré to pustiť tak 100.000 krát nech vidím kde sa hýbu jednotlivé premenné. Za pár sekúnd mám výsledok a kreslím si to v Rku.

Riešenia pre jednotlivé bunky môžu nadobúdať takéto hodnoty.

Tabuľka možných riešení kontingenčnej tabuľky hľadaných gradientovou metódou.

Toto znamená, že tá tabuľka má síce veľa riešení, ale približne vidím, kde sa hýbu a aké sú rozdiely medzi riadkami. Úplne na zahodenie to nevyzerá. Tie čísla v tabuľke v úvode článku sú priemerné hodnoty.

Nasledujú normalizované verzie riešení tabuľky, ale interpretáciu nechávam na diskusiu.

Po riadkoch normalizované hodnoty riešení kontingenčnej tabuľky.[%]
Po stĺpcoch normalizované hodnoty riešení kontingenčnej tabuľky.[%]

Poznámky pod čiarou

  • Z letmého pohľadu na histogramy je zrejmé, že tie rozdiely v priemeroch nebudú signifikantné a usudzovať sa z toho dá veľmi málo.
  • Histogramy reprezentujú hodnoty riešení kontingenčnej tabuľky, do ktorých najčastejšie dokonverguje gradientový algoritmus. Nie nutne všetky možné riešenia.
  • Na tento problém existujú aj sofistikovanejšie metódy. Klúčové slovo je ecological inference.
  • Počet voličov sa medzi voľbou prezidenta a referendom trochu zmenil, ale je tak malý, že ho zámerne ignorujem.
  • Pravdepodobnosť, že som sa pri tejto analýze nikde nepomýlil je asi 1%.

Zdrojáky: