Bevezető

A választási eredmények alapvetően két dologtól függenek: hogy hányan mennek el szavazni a szavazókörökben, és melyik pártot választják. Hiába népszerű egy párt, ha nem mennek el a támogatói szavazni. És hiába magas a részvétel egy adott szavazókörben, ha pont ott nem a vizsgált pártot támogatják az emberek.

A magyar választási előrejelzések legnagyobb problémája a választási részvételre vonatkozó egyedi adatok teljes hiánya (az exit poll hiánya) és emiatt a részvétel előrejelzésének teljes hiánya.

Az alábbiakban területileg aggregált adatokból, és kizárólag az egy szavazókörös kistelepülések esetében igyekszem megérteni azt, hogy milyen tényezők befolyásolják (de nem feltétlenül jól magyarázzák) a részvételt és a Fidesz támogatottságát. Értelemszerűen a bemutatott modellek egyúttal a távolmaradást és az ellenzék támogatottságát is mutatják egyidejűleg.

A részvétel modellezése

A részvételt befolyásoló tényezők bemutatására a regressziós döntési fák modelljét használom. Ez a modell viszonylag jól érthető eredményt ad. A legfontosabb változóknak

bizonyultak.

Úgy gondolom, hogy a G7 által bemutatott hatás a vállalkozások számával amiatt lehet, hogy a kistelepüléseken nincsenek igazi foglalkoztatók, és a munkával rendelkezők jelentős része vállalkozási formában dolgozik.

## [1] "megye', 'telep', 'oevk', 'szavazokor', 'fidesz_rate', 'jobbik_rate', 'mszp_rate', 'lmp_rate', 'dk_rate', 'momentum_rate', 'mkkp_rate', 'egyutt_rate', 'ervenytelen_rate', 'megye_ido_km', 'budapest_ido_km', 'megyeszekhely_km', 'budapest_km', 'megyeszekhely_min', 'budapest_min', 'ujszulott_rate', 'idosek_rate', 'nepesseg', 'vandorlas_rate', 'altisk_rate', 'nepesseg_2014_18p', 'nepesseg_2015_18p', 'nepesseg_18p', 'adofizeto_rate', 'reszvetel_est', 'n"

## n= 1545 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 1545 10.48947000 0.6300582  
##    2) altisk_rate>=0.2595 749  4.34401300 0.5861599  
##      4) adofizeto_rate< 0.5704873 511  2.63393000 0.5688298  
##        8) adofizeto_rate< 0.3790838 17  0.09545547 0.4439657 *
##        9) adofizeto_rate>=0.3790838 494  2.26430500 0.5731268  
##         18) altisk_rate>=0.4285 137  0.84139900 0.5443998 *
##         19) altisk_rate< 0.4285 357  1.26646200 0.5841508 *
##      5) adofizeto_rate>=0.5704873 238  1.22710500 0.6233686 *
##    3) altisk_rate< 0.2595 796  3.34394100 0.6713646  
##      6) altisk_rate>=0.1645 489  1.88940300 0.6534476 *
##      7) altisk_rate< 0.1645 307  1.04752000 0.6999034 *

Lineáris regresszió

Az egyszerűbb összevethetőség kedvéért a mások által közölt eredményekkel mindezt lineáris regresszió formájában is bemutatom.

## 
## Call:
## lm(formula = reszvetel_est ~ adofizeto_rate + iskolazottsag + 
##     nepesseg_18p, data = kistelepulesek_lm)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.22823 -0.03915  0.00065  0.03581  0.38025 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     2.283e-01  1.203e-02   18.98   <2e-16 ***
## adofizeto_rate  3.863e-01  2.104e-02   18.36   <2e-16 ***
## iskolazottsag   2.916e-01  1.136e-02   25.68   <2e-16 ***
## nepesseg_18p   -4.861e-05  4.498e-06  -10.81   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06195 on 1925 degrees of freedom
## Multiple R-squared:  0.4293, Adjusted R-squared:  0.4284 
## F-statistic: 482.7 on 3 and 1925 DF,  p-value: < 2.2e-16

A változók közötti korreláció

Az általam elemzett adatok sajnos nem egyedi (választói) szintű adatok, hanem települési szinten aggregált adatok, amelyek sajnos sok fontos részletet elfednek (de jóval kevésbé, mint a járási vagy megyei adatok.) A tényleges korreláció mérték az egyedi, szavazói szinten minden bizonnyal alacsonyabb, mint a területileg aggregált adatokban.

Az adófizetők arányának hatása a részvételre a falvakban

A legnagyobb hatása az adófizetők számának van. Minél több embernek van munkája, annál nagyobb arányban vett részt a választáson.

Az iskolázottság hatása a részvételre a falvakban

A második legnagyobb hatása az iskolázottságnak van. Minél több embernek van 8 általánosnál magasabb végzettsége, annál többen vettek részt a választáson. Mivel azonban a kistelepüléseket vizsgáljuk csak, ez a hatás nagyon csekély (de szignifikáns.)

A településméret hatása a részvételre a falvakban

A legcsekélyebb hatása a népességszámnak van. Minnél nagyobb a település, annál kevesebben vettek részt a választáson a falusi mintában. Ez a kapcsolat azonban nagyon gyenge, bár szignifikáns.

A Fidesz támogatottsága

A Fidesz támogatottsága (és az ellenzék támogattsága) csak részben azonos dolgoktól függ, mint a részvétel.

A Fidesz támogatottságának regressziós fája

A Fidesz támogatottsága lineáris regresszióval

Ismét felállítva a lineáris regressziós modellt a mások munkáival való összehasonlítás végett, annyit változtatunk, hogy az idősek arányát logaritmikus formában adjuk a modellhez. Ez nagyjából azt jelenti, hogy a Fidesz támogatottságát a településen élő nagyszámú idős ember (vagy kis számú fiatal- és középkorú) nem lineárisan, hanem exponenciálisan növeli. Az ábrán egyébként látható, hogy ez nem egy igazán lineáris összefüggés.

## 
## Call:
## lm(formula = fidesz_rate ~ nepesseg_18p + budapest_km + log(idosek_rate) + 
##     altisk_rate + vas + baranya + borsod, data = kistelepulesek)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39236 -0.06105  0.00250  0.06183  0.30149 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       4.646e-01  1.310e-02  35.475  < 2e-16 ***
## nepesseg_18p     -4.482e-05  7.346e-06  -6.100 1.28e-09 ***
## budapest_km       2.691e-04  3.982e-05   6.758 1.85e-11 ***
## log(idosek_rate) -2.808e-02  9.628e-03  -2.917  0.00358 ** 
## altisk_rate       2.723e-01  2.024e-02  13.453  < 2e-16 ***
## vas1              7.271e-02  7.822e-03   9.296  < 2e-16 ***
## baranya1         -1.063e-01  6.977e-03 -15.238  < 2e-16 ***
## borsod1          -7.675e-02  6.648e-03 -11.544  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09355 on 1921 degrees of freedom
## Multiple R-squared:  0.2919, Adjusted R-squared:  0.2893 
## F-statistic: 113.1 on 7 and 1921 DF,  p-value: < 2.2e-16

A településméret hatása a Fidesz támogatottságára a falvakban

Függetlenül attól, hogy hol van a település, minél nagyobb, annál kisebb a Fidesz, és nagyobb az ellenzék támogatottsága.

A Budapesttől való távolság hatása a Fidesz támogatottságára a falvakban

Minél nagyobb a kistelepülés Budapesttől való távolsága, annál nagyobb a Fidesz támogatottsága, és annál kisebb az ellenzéké.

Az elöregedettség hatása a Fidesz támogatottságára a falvakban

Minél elöregedettebb a kistelepülés, annál többen szavaznak a Fideszre, és kevesebben az ellenzékre. A lineáris modellben logaritmikusan szerepel ez a változó, de a könnyebb vizuális értelmezhetőség miatt lineáris formában raktam az ábrára.

Elszigetelődés

Az alábbiakban csak az “elszigetelődés” hatását mutatom be. Az elszigetelődés alatt azt értem, hogy Budapest és a megyeszékhely csak hosszú idő alatt, nagy költséggel érhető el, a településen kevés más ember él, akivel vitatkozni lehet, és magas a 60 felettiek aránya, akik már se iskolában, se munkahelyen nemigen találkoznak új információkkal, vitapartnerekkel. Ezeken a helyeken az emberek akár kétharmada is a Fideszre szavaz.

## n= 1545 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##   1) root 1545 18.9543500 0.5904307  
##     2) idosek_rate>=0.1255631 1506 17.2720500 0.5862157  
##       4) vas1< 0.5 1365 15.3031200 0.5773341  
##         8) budapest_km< 265.135 1276 13.9099200 0.5708998  
##          16) baranya1>=0.5 180  2.9192510 0.5275710  
##            32) budapest_km< 218.965 108  1.6223590 0.4885717  
##              64) nepesseg_18p>=129.5 90  1.1157620 0.4638670 *
##              65) nepesseg_18p< 129.5 18  0.1770246 0.6120948 *
##            33) budapest_km>=218.965 72  0.8862369 0.5860699 *
##          17) baranya1< 0.5 1096 10.5972400 0.5780158  
##            34) borsod1>=0.5 193  2.2712250 0.5330504  
##              68) budapest_km< 193.79 82  0.7695352 0.4928732  
##               136) budapest_min>=136.25 43  0.2945446 0.4409140 *
##               137) budapest_min< 136.25 39  0.2309047 0.5501615 *
##              69) budapest_km>=193.79 111  1.2715420 0.5627308 *
##            35) borsod1< 0.5 903  7.8523880 0.5876264  
##              70) budapest_min< 82.39 117  0.7629742 0.5316926 *
##              71) budapest_min>=82.39 786  6.6688820 0.5959524  
##               142) nepesseg_18p>=285.5 550  3.6329940 0.5848370 *
##               143) nepesseg_18p< 285.5 236  2.8095680 0.6218569 *
##         9) budapest_km>=265.135 89  0.5829821 0.6695838 *
##       5) vas1>=0.5 141  0.8188621 0.6721973 *
##     3) idosek_rate< 0.1255631 39  0.6223735 0.7531936 *
## 
## Call:
## lm(formula = fidesz_rate ~ nepesseg_18p + budapest_min + megyeszekhely_min + 
##     +log(idosek_rate) + +vas + baranya + borsod, data = kistelepulesek)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39148 -0.06079 -0.00117  0.06555  0.32107 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        4.144e-01  1.496e-02  27.699  < 2e-16 ***
## nepesseg_18p      -6.669e-05  7.510e-06  -8.880  < 2e-16 ***
## budapest_min       3.675e-04  6.722e-05   5.467 5.16e-08 ***
## megyeszekhely_min  6.062e-04  1.176e-04   5.157 2.77e-07 ***
## log(idosek_rate)  -1.009e-01  8.613e-03 -11.712  < 2e-16 ***
## vas1               6.099e-02  8.498e-03   7.177 1.01e-12 ***
## baranya1          -9.230e-02  7.503e-03 -12.302  < 2e-16 ***
## borsod1           -7.815e-02  6.971e-03 -11.210  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09747 on 1921 degrees of freedom
## Multiple R-squared:  0.2314, Adjusted R-squared:  0.2286 
## F-statistic: 82.64 on 7 and 1921 DF,  p-value: < 2.2e-16

A megyeszékhelytől való távolság

Minél messzebb van egy település a megyeszékhelytől, annál többen szavaznak a Fideszre. Az utazási idő optimális esetre van megadva, ennél a tömegközelekdés általában lényegesen rosszabb elérést ad.

Konkluziók

A Fidesz kistelepülési támogatottságát, és az ellenzék támogatottságának a hiányát nagymértékben meghatározza a szavazók földrajzi helyzete, a település elöregedettsége és mérete. Minél több a fiatal, aktív ember, minél közelebb van a főváros, annál nagyobb a vélemények és a szavazatok pluralitása.

Magyarország településszerkezete meglehetősen sajátságos, és természetesen a földrajzi lakóhely nagymértékben összefügg a szociológiai jellemzőkkel, hiszen minőségi munkahelyek elsősorban Budapesten, és néhány fejlett nagyvárosban, például Győrött, Kecskeméten, Budaörsön van nagy számban.

Ezzel együtt úgy gondolom, hogy mindez óvatosságra int a szociológiai determinációval kapcsolatban, és sokkal nagyobb figyelmet kellene adni az „elszigeteltség” értelmezésének, vagyis annak, hogy mennyi esélye van az embereknek eltérő nézetekkel, plurális hírforrásokkal találkozni. Vagyis a szociológiai, gazdasági meghatározottság mellett fontos volna valahogyan a politikai aktivitást, a tájékozódás lehetőségét is vizsgálni.

A vizsgálatom csak az egy szavazókörös kistelepülésekre terjedt ki, aminek több oka van. Egyrészt ezeknek a településeknek a lakói meglehetősen homogén módon, nagy többséggel választották a Fideszt, és az ellenzéki pártok közül is legfeljebb a Jobbikot és az MSZP-t vették számításba. A nagy elemszámú minta, az aggregációs problémák kisebb mértéke, és az egyszerűbb választói magatartás ezeket a településeket jobban elemezhetővé tette. Ugyanakkor a legtöbb szavazatot nem ezeken a kistelepüléseken adták le. A városok elemzése sokkal nagyobb munkát igényel

Az adatelőkészítő kód

require(tidyverse)
tstat_1 <- readxl::read_excel("data-raw/Telepulesadatok_tidy.xls", 
                            sheet = 1 )
names (tstat_1)[2]= "telepuleskod"
names ( tstat_1)[1] = "telep"

tstat_2 <- readxl::read_excel("data-raw/kiegeszito_telepules_adat.xls", 
                              sheet = 1 )
names (tstat_2)[2]= "telepuleskod"
adofizetok <- readxl::read_excel("data-raw/adofizetok_szama.xls", 
                                 sheet = 1 )
names (adofizetok)[2]= "telepuleskod"

nepesseg <- readxl::read_excel(
  "data-raw/allando_nepesseg_18_felett_2014_16_tidy.xls", 
  sheet = 1 )
names (nepesseg)[2]= "telepuleskod"
names (nepesseg)[1] = "telep"

tstat <- left_join (tstat_1, tstat_2, by = c("telep", "telepuleskod", "nepesseg")) %>%
  left_join( ., adofizetok, by = c("telep", "telepuleskod")) %>%
  left_join(., nepesseg, by = c("telep", "telepuleskod")) %>%
  mutate ( adofizeto_rate = adofizetok / nepesseg_18p )


szavazatok <- szavazatok_raw %>%
  select ( megyeid, megye, telepid, telep, oevk, 
           szavazokor, ervenyes, ervenytelen, orsz_fidesz, 
           orsz_jobbik, 
           orsz_lmp, orsz_mszp, orsz_dk,
           orsz_egyutt, orsz_momentum, orsz_mkkp ) %>%
  mutate ( fidesz_rate = orsz_fidesz / (ervenyes + ervenytelen), 
           jobbik_rate = orsz_jobbik   / (ervenyes + ervenytelen),
           mszp_rate  =  orsz_mszp  /  (ervenyes + ervenytelen),
           lmp_rate    = orsz_lmp   / (ervenyes + ervenytelen), 
           dk_rate  =    orsz_dk  / (ervenyes + ervenytelen), 
           momentum_rate = orsz_momentum / (ervenyes + ervenytelen), 
           mkkp_rate = orsz_mkkp /  (ervenyes + ervenytelen), 
           egyutt_rate = orsz_egyutt /  (ervenyes + ervenytelen), 
           ervenyelen_rate = ervenytelen / (ervenyes + ervenytelen)) %>%
  mutate ( id = paste0(tolower(telep), "-", 
                       tolower(as.character(szavazokor))))

szavstat <- left_join ( szavazatok, tstat, by = "telep") %>%
   add_count(telep)
szavazatok_raw <- readxl::read_excel(path = "data-raw/2018-04-08--egyéni és listás voksok szavazókör szerint_stata_fv.xlsx")

szavazatok <- szavazatok_raw %>%
  select ( megyeid, megye, telepid, telep, oevk, 
           szavazokor, ervenyes, ervenytelen, orsz_fidesz, 
           orsz_jobbik, 
           orsz_lmp, orsz_mszp, orsz_dk,
           orsz_egyutt, orsz_momentum, orsz_mkkp ) %>%
  mutate ( fidesz_rate = orsz_fidesz / (ervenyes + ervenytelen), 
           jobbik_rate = orsz_jobbik   / (ervenyes + ervenytelen),
           mszp_rate  =  orsz_mszp  /  (ervenyes + ervenytelen),
           lmp_rate    = orsz_lmp   / (ervenyes + ervenytelen), 
           dk_rate  =    orsz_dk  / (ervenyes + ervenytelen), 
           momentum_rate = orsz_momentum / (ervenyes + ervenytelen), 
           mkkp_rate = orsz_mkkp /  (ervenyes + ervenytelen), 
           egyutt_rate = orsz_egyutt /  (ervenyes + ervenytelen), 
           ervenytelen_rate = ervenytelen / (ervenyes + ervenytelen)) %>%
  mutate ( id = paste0(tolower(telep), "-", 
                       tolower(as.character(szavazokor))))

szavstat <- left_join ( szavazatok, tstat, by = c("telep")) %>% 
  mutate (reszvetel_est = (ervenyes + ervenytelen)/nepesseg_18p) %>%
  mutate (jovedelem_fo = jovedelem / nepesseg ) %>%
  mutate (lakas_fo = lakas / nepesseg) %>%
   add_count(telep)

saveRDS(szavstat, "data/szavstat.rds")
write.csv(szavstat, "data/szavstat.csv")

szavstat <- readRDS("data/szavstat.rds") %>%
  select ( -megyeid, -telepid, -ervenytelen, -ervenyes, 
           - starts_with("orsz_"), -id, -telepuleskod, 
           -odavandorlas, -elvandorlas, -idosek, 
           -lakas, -jovedelem, -adofizetok, -jovedelem_fo, 
           -ujszulottek, -lakas_fo, -kabeltv, -kabeltv_rate) 

kistelepulesek <- szavstat %>% filter ( n == 1) %>%
  filter ( complete.cases(.))

training.samples <- kistelepulesek$reszvetel_est %>%
  createDataPartition(p = 0.8, list = FALSE)
train.data  <- kistelepulesek[training.samples, ]
test.data <- kistelepulesek[-training.samples, ]

paste (names(kistelepulesek), collapse = "', '")

variable_reszvetel <- c('megye', 'oevk',
                    'ervenytelen_rate', 'megye_ido_km', 
                    'budapest_ido_km', 'megyeszekhely_km', 
                    'budapest_km', 'megyeszekhely_min',
                    'budapest_min', 'ujszulott_rate',
                    'idosek_rate', 'nepesseg', 
                    'vandorlas_rate', 'altisk_rate',
                    'nepesseg_18p', 'adofizeto_rate')

kistelepulesek <- kistelepulesek %>%
  mutate ( baranya = as.factor(ifelse (megye == "BARANYA", 1,0))) %>%
  mutate ( vas = as.factor(ifelse (megye == "VAS", 1,0))) %>%
  mutate ( borsod = as.factor(ifelse ( grepl("BORSOD", megye), 1, 0))) %>%
  mutate ( elidosodott = as.factor (ifelse ( idosek_rate > 0.28528, 1, 0))) 

variable_fidesz <- c('baranya', 'vas', 'borsod', 
                    'fidesz_rate', 
                    'ervenytelen_rate', 'megye_ido_km', 
                    'budapest_ido_km', 'megyeszekhely_km', 
                    'budapest_km', 'megyeszekhely_min',
                    'budapest_min', 'ujszulott_rate',
                    'idosek_rate', 'nepesseg', 
                    'vandorlas_rate', 'altisk_rate',
                    'nepesseg_18p', 'adofizeto_rate')

training.samples.fidesz <- kistelepulesek$reszvetel_est %>%
  createDataPartition(p = 0.8, list = FALSE)
train.data.fidesz  <- kistelepulesek[training.samples.fidesz, ]
test.data.fidesz <- kistelepulesek[-training.samples.fidesz, ]