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é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
a településen adót fizetők aránya (ez a munkával rendelkezők aránya)
a legfeljebb általános iskolai végzettségűek (iskolázattlanok) aránya
a település mérete (a választókörúak számával jellemezve)
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 *
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
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.
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.
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 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 (és az ellenzék támogattsága) csak részben azonos dolgoktól függ, mint a részvétel.
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
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.
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é.
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.
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
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.
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
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, ]