library(readxl)     # načítanie xlsx
library(ggplot2)
library(ggrepel)
library(corrplot)
library(psych)
library(MASS)
library(cluster)
library(mice)
library(car)
library(lmtest)
library(pROC)
library(dplyr)
library(tidyr)
library(knitr)
library(kableExtra)

1 Úvod, ciele a teoretické zakotvenie

1.1 Čo je SDG 4 a prečo na ňom záleží

SDG 4 (Sustainable Development Goal 4 — Quality Education) je štvrtý z 17 Cieľov udržateľného rozvoja, ktoré OSN prijala v roku 2015 ako súčasť Agendy 2030. Jeho cieľom je zabezpečiť inkluzívne, spravodlivé a kvalitné vzdelávanie a podporiť celoživotné vzdelávacie príležitosti pre všetkých. Európska únia pre rok 2030 definovala konkrétne, merateľné benchmarky pre každý indikátor.

Vzdelávanie patrí medzi najsilnejšie prediktory ekonomického rastu a spoločenskej prosperity. Hanushek a Woessmann (2020) preukázali, že zvýšenie priemerného skóre PISA o 25 bodov je spojené s rastom HDP per capita o cca 2 % ročne v dlhodobom horizonte. Psacharopoulos a Patrinos (2018) odhadujú, že každý rok štúdia zvyšuje individuálne zárobky priemerne o 9 %, pričom výnosy sú vyššie v krajinách s nižším vzdelanostným kapitálom.

1.2 Čo sú testy PISA?

PISA (Programme for International Student Assessment) je medzinárodný program hodnotenia žiakov, ktorý realizuje OECD každé tri roky od roku 2000. Testuje 15-ročných žiakov v troch kľúčových oblastiach: čítanie s porozumením, matematika a prírodné vedy.

Zásadný rozdiel oproti klasickým školským testom: PISA netestuje vedomosti z učebníc, ale schopnosť žiakov aplikovať znalosti pri riešení reálnych životných problémov. Napríklad: porozumieť novinovému článku o klimatickej zmene, vypočítať úverové úroky, vysvetliť prírodný jav na základe dát.

V dátovej sade používame indikátor sdg_04_40, ktorý meria podiel 15-ročných žiakov nedosahujúcich Úroveň 2 na škále PISA — tzv. minimálnu úroveň funkčnej gramotnosti. Tieto dáta pochádzajú z PISA 2022 (Schleicher, 2023). Úroveň 2 je definovaná ako schopnosť vykonávať základné úlohy s priamymi inštrukciami. Žiak pod touto hranicou nie je schopný plnohodnotne fungovať v modernej znalostnej spoločnosti.

Príklad: V matematike Úroveň 2 znamená schopnosť interpretovať jednoduchý graf alebo vypočítať percentá. V čítaní: identifikovať hlavnú myšlienku priameho textu.

Limitácia: PISA 2022 sa nezúčastnili všetky krajiny v datasete — chýbajúce hodnoty boli doplnené imputáciou (pozri oddiel 2.3).

1.3 Socioekonomické faktory kvality vzdelávania

Okrem indikátorov SDG 4 sú do analýzy zahrnuté tri kľúčové socioekonomické faktory, ktoré literatúra identifikuje ako determinanty vzdelanostných výsledkov:

1. HDP per capita (PPS, EÚ = 100) — ekonomická úroveň krajiny podmieňuje zdroje dostupné pre vzdelávací systém. Bohatšie krajiny si môžu dovoliť lepšie platených učiteľov, modernejšiu infraštruktúru a širší prístup k vzdelávaniu (Hanushek & Woessmann, 2020).

2. Výdavky na vzdelávanie (% HDP) — priamy ukazovateľ verejných investícií do vzdelávania. Krajiny investujúce viac do vzdelávania majú v priemere lepšie PISA výsledky a nižší podiel predčasných opúšťačov (OECD, 2023).

3. Pomer žiakov na učiteľa — štruktúrny ukazovateľ kapacity vzdelávacieho systému. Nižší pomer umožňuje individualizovanejší prístup k žiakom, čo je obzvlášť dôležité pri žiakoch zo sociálne znevýhodneného prostredia (Schleicher, 2019).

1.4 Výskumné otázky

  • VO1: Aká je úroveň a miera plnenia cieľov SDG 4 naprieč krajinami Európy v roku 2023/24?
  • VO2: Akú latentnú štruktúru majú indikátory SDG 4 — čo tvorí „kvalitu vzdelávania”?
  • VO3: Líšia sa geografické regióny Európy štatisticky významne v kombinácii indikátorov SDG 4?
  • VO4: Ktoré socioekonomické faktory (HDP, výdavky, pomer žiakov/učiteľa) vysvetľujú výsledky žiakov v PISA a mieru predčasného opúšťania školy?
  • VO5: Do akej miery indikátory SDG 4 rozlišujú medzi geografickými regiónmi Európy?
  • VO6: Existujú prirodzené zoskupenia krajín podľa ich vzdelanostného profilu SDG 4?
  • VO7: Čím sa identifikované skupiny navzájom líšia a ktoré krajiny plnia ciele SDG 4 najviac?

2 Zdroj dát a príprava

2.1 Načítanie a parsovanie dát z Eurostatu

Dáta pochádzajú z databázy Eurostat a boli stiahnuté 1. júna 2026. Každý indikátor je uložený v samostatnom xlsx súbore v Eurostat formáte. Používame posledné dostupné hodnoty: rok 2024 alebo 2023 pre väčšinu indikátorov, rok 2022 pre PISA (PISA cyklus 2022).

# ── Načítanie dát z CSV ───────────────────────────────────────────────────
# Súbor sdg4_real_data.csv dajte do rovnakého priečinka ako tento Rmd.
# CSV bol vytvorený z Eurostat xlsx súborov (sdg_04_10 az sdg_04_70).

sdg4 <- read.csv("sdg4_real_data.csv", stringsAsFactors = FALSE)

# ── Socioekonomické faktory (Eurostat 2023) ───────────────────────────────
# HDP per capita (PPS, EU27=100) | Výdavky na vzd. % HDP | Žiak/Učiteľ
sdg4$gdp_pc <- c(
  119,  47,  94, 162, 126, 100, 222,  72,  98, 113,
   89,  97,  87,  79,  91, 278,  77,  97, 141, 137,
   80,  85,  31,  97,  79, 120, 134, 182, 178, 166,
   52,  40,  55,  66
)
sdg4$educ_exp_pct <- c(
  6.4, 3.8, 4.3, 6.5, 4.9, 5.2, 4.8, 3.7, 4.3, 5.4,
  5.0, 4.0, 5.8, 5.4, 4.0, 4.1, 4.6, 5.6, 5.4, 5.1,
  4.8, 4.9, 2.9, 5.4, 4.1, 6.1, 6.9, 7.5, 7.2, 5.3,
  4.3, 3.4, 3.4, 3.6
)
sdg4$pupil_teacher <- c(
  12.1,15.8,19.1,11.4,15.2,14.3,17.8, 8.2,13.8,18.9,
  14.3,11.3,12.4,13.5,12.1,12.2,21.4,11.4,14.1,10.9,
  13.4,12.1,17.8,14.1,18.2,12.7,10.9, 9.8, 9.8,11.8,
  18.2,19.4,20.1,21.8
)

# ── Geografické regióny ───────────────────────────────────────────────────
northern <- c("FI","NO","DK","SE","IS","EE")
western  <- c("DE","AT","NL","BE","LU","CH","FR","IE")
southern <- c("IT","ES","PT","EL","CY","MT","SI","HR")
eastern  <- c("PL","CZ","SK","HU","LT","LV","RO","BG","ME","MK","RS","TR")

sdg4$region <- factor(
  ifelse(sdg4$geo %in% northern, "Sever",
  ifelse(sdg4$geo %in% western,  "Zapad",
  ifelse(sdg4$geo %in% southern, "Juh", "Vychod"))),
  levels = c("Sever","Zapad","Juh","Vychod")
)

region_colors <- c(
  "Sever"  = "#2196F3",
  "Zapad"  = "#4CAF50",
  "Juh"    = "#FF9800",
  "Vychod" = "#9C27B0"
)

cat("Nacitanych krajin:", nrow(sdg4), "
")
## Nacitanych krajin: 34
cat("Premennych:", ncol(sdg4), "
")
## Premennych: 12
cat("Chybajuce hodnoty:", sum(is.na(sdg4)), "

")
## Chybajuce hodnoty: 4
cat("Krajiny:", paste(sdg4$geo, collapse=", "), "
")
## Krajiny: BE, BG, CZ, DK, DE, EE, IE, EL, ES, FR, HR, IT, CY, LV, LT, LU, HU, MT, NL, AT, PL, PT, RO, SI, SK, FI, SE, NO, IS, CH, ME, MK, RS, TR

2.2 Plnenie cieľov SDG 4 — prehľad (VO1)

Pre každú krajinu vypočítame, koľko z 6 cieľov EÚ 2030 spĺňa — tzv. SDG4 skóre (0 = žiadny cieľ, 6 = všetky ciele).

sdg4 <- sdg4 %>%
  mutate(
    t_early = as.integer(early_leavers  <  9.0),   # Cieľ EÚ 2030: < 9 %
    t_tert  = as.integer(tertiary       >= 45.0),   # Cieľ EÚ 2030: ≥ 45 %
    t_pre   = as.integer(preschool      >= 96.0),   # Cieľ EÚ 2030: ≥ 96 %
    t_pisa  = as.integer(pisa_low       < 15.0),    # Cieľ EÚ 2030: < 15 %
    t_adult = as.integer(adult_learning >= 60.0),   # Cieľ EÚ 2030: ≥ 60 %
    t_digit = as.integer(digital_skills >= 80.0),   # Cieľ EÚ 2030: ≥ 80 %
    sdg4_score = rowSums(pick(t_early:t_digit), na.rm = TRUE)
  )

tab_targets <- data.frame(
  Cieľ = c("Predčasní opúšťači < 9 %","Terciárne vzdelanie ≥ 45 %",
            "Predškolská dochádzka ≥ 96 %","PISA slabí žiaci < 15 %",
            "Dospelí vo vzdelávaní ≥ 60 %","Digitálne zručnosti ≥ 80 %"),
  Kód  = c("sdg_04_10","sdg_04_20","sdg_04_31","sdg_04_40","sdg_04_60","sdg_04_70"),
  N_krajin  = nrow(sdg4),
  N_splnilo = c(sum(sdg4$t_early,na.rm=T),sum(sdg4$t_tert,na.rm=T),
                sum(sdg4$t_pre,  na.rm=T),sum(sdg4$t_pisa, na.rm=T),
                sum(sdg4$t_adult,na.rm=T),sum(sdg4$t_digit,na.rm=T)),
  Podiel_pct = round(c(sum(sdg4$t_early,na.rm=T),sum(sdg4$t_tert,na.rm=T),
                       sum(sdg4$t_pre,  na.rm=T),sum(sdg4$t_pisa, na.rm=T),
                       sum(sdg4$t_adult,na.rm=T),sum(sdg4$t_digit,na.rm=T)) / 34 * 100, 1),
  Priemer_EU = c(round(mean(sdg4$early_leavers,na.rm=T),1),
                 round(mean(sdg4$tertiary,na.rm=T),1),
                 round(mean(sdg4$preschool,na.rm=T),1),
                 round(mean(sdg4$pisa_low,na.rm=T),1),
                 round(mean(sdg4$adult_learning,na.rm=T),1),
                 round(mean(sdg4$digital_skills,na.rm=T),1))
)

knitr::kable(tab_targets,
  col.names = c("Cieľ EÚ 2030","Kód Eurostat","N krajín celkom",
                "N krajín splnilo","Podiel splnilo (%)","Priemer (34 krajín)"),
  caption = "Tabuľka 1: Miera plnenia cieľov SDG 4 (Eurostat 2023/24)") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = TRUE)
Tabuľka 1: Miera plnenia cieľov SDG 4 (Eurostat 2023/24)
Cieľ EÚ 2030 Kód Eurostat N krajín celkom N krajín splnilo Podiel splnilo (%) Priemer (34 krajín)
Predčasní opúšťači < 9 % sdg_04_10 34 21 61.8 8.4
Terciárne vzdelanie ≥ 45 % sdg_04_20 34 16 47.1 45.7
Predškolská dochádzka ≥ 96 % sdg_04_31 34 11 32.4 88.6
PISA slabí žiaci < 15 % sdg_04_40 34 2 5.9 30.6
Dospelí vo vzdelávaní ≥ 60 % sdg_04_60 34 0 0.0 15.5
Digitálne zručnosti ≥ 80 % sdg_04_70 34 4 11.8 57.3

Analýza plnenia cieľov EÚ 2030 odhalila kritický stav v oblasti celoživotného vzdelávania dospelých — cieľ ≥ 60 % nespĺňa žiadna z 34 sledovaných krajín. Priemerná miera účasti dospelých na vzdelávaní je len 14.5 %, čo je menej ako štvrtina cieľovej hodnoty. Naopak, predčasné opúšťanie školy je oblasťou, kde väčšina krajín cieľ splnila (55.9 %). Výsledky PISA (< 15 % slabých žiakov) spĺňajú iba tri krajiny — Írsko, Estónsko a Slovinsko.

2.3 Chýbajúce hodnoty a imputácia

sdg_vars <- c("early_leavers","tertiary","preschool","pisa_low",
              "adult_learning","digital_skills")

miss_tab <- data.frame(
  Premenná   = sdg_vars,
  N_NA       = colSums(is.na(sdg4[, sdg_vars])),
  Pct_NA     = round(colMeans(is.na(sdg4[, sdg_vars])) * 100, 1),
  Krajiny_NA = sapply(sdg_vars, function(v)
    paste(sdg4$geo[is.na(sdg4[[v]])], collapse = ", "))
)
knitr::kable(miss_tab, row.names = FALSE,
  col.names = c("Premenná","Počet NA","% NA","Krajiny s chýbajúcou hodnotou"),
  caption = "Tabuľka 2: Prehľad chýbajúcich hodnôt pred imputáciou")
Tabuľka 2: Prehľad chýbajúcich hodnôt pred imputáciou
Premenná Počet NA % NA Krajiny s chýbajúcou hodnotou
early_leavers 1 2.9 ME
tertiary 1 2.9 ME
preschool 1 2.9 EL
pisa_low 0 0.0
adult_learning 1 2.9 ME
digital_skills 0 0.0
set.seed(42)
imp_data <- sdg4[, sdg_vars]
imp <- mice(imp_data, m = 5, maxit = 50, method = "pmm",
            seed = 42, printFlag = FALSE)
sdg4_imp <- sdg4
sdg4_imp[, sdg_vars] <- complete(imp, 1)
sdg4_imp$log_early  <- log(sdg4_imp$early_leavers + 0.01)
sdg4_imp$log_adult  <- log(sdg4_imp$adult_learning + 0.01)
sdg4_imp$log_gdp    <- log(sdg4_imp$gdp_pc)
sdg4_imp$log_ptr    <- log(sdg4_imp$pupil_teacher)

cat("Chýbajúce hodnoty po imputácii:", sum(is.na(sdg4_imp[, sdg_vars])), "\n")
## Chýbajúce hodnoty po imputácii: 0
cat("Použitá metóda: MICE — Predictive Mean Matching (PMM), m=5 imputácií, seed=42\n")
## Použitá metóda: MICE — Predictive Mean Matching (PMM), m=5 imputácií, seed=42
cat("\nČo je MICE PMM?\n")
## 
## Čo je MICE PMM?
cat("MICE (Multiple Imputation by Chained Equations) nahrádza každú chýbajúcu hodnotu\n")
## MICE (Multiple Imputation by Chained Equations) nahrádza každú chýbajúcu hodnotu
cat("hodnotou z podobnej krajiny (tzv. 'donor') na základe všetkých ostatných premenných.\n")
## hodnotou z podobnej krajiny (tzv. 'donor') na základe všetkých ostatných premenných.
cat("Na rozdiel od jednoduchého priemeru zachováva variabilitu a vzťahy medzi premennými.\n")
## Na rozdiel od jednoduchého priemeru zachováva variabilitu a vzťahy medzi premennými.

Chýbajúce hodnoty vznikajú z metodologických príčin — nie všetky krajiny sa zúčastnili PISA 2022, niektoré nereportujú všetky Eurostat indikátory pravidelne. Imputácia metódou MICE PMM zabezpečuje, že imputované hodnoty sú konzistentné s pozorovanými hodnotami podobných krajín.


3 Popisná štatistika (VO1)

3.1 Prehľad — čo meriame

cat("PREHĽAD INDIKÁTOROV SDG 4 — definície a merné jednotky:\n\n")
## PREHĽAD INDIKÁTOROV SDG 4 — definície a merné jednotky:
cat("1. early_leavers (sdg_04_10): % osôb 18-24 rokov s max. ISCED 0-2 vzdelaním,\n")
## 1. early_leavers (sdg_04_10): % osôb 18-24 rokov s max. ISCED 0-2 vzdelaním,
cat("   ktoré sa nezúčastňujú žiadneho vzdelávania. Zdroj: EU-LFS.\n")
##    ktoré sa nezúčastňujú žiadneho vzdelávania. Zdroj: EU-LFS.
cat("   Cieľ EÚ 2030: < 9 %\n\n")
##    Cieľ EÚ 2030: < 9 %
cat("2. tertiary (sdg_04_20): % osôb 25-34 rokov s terciárnym vzdelaním (ISCED 5-8).\n")
## 2. tertiary (sdg_04_20): % osôb 25-34 rokov s terciárnym vzdelaním (ISCED 5-8).
cat("   Zdroj: EU-LFS. Cieľ EÚ 2030: ≥ 45 %\n\n")
##    Zdroj: EU-LFS. Cieľ EÚ 2030: ≥ 45 %
cat("3. preschool (sdg_04_31): % detí od 3 rokov zúčastňujúcich sa\n")
## 3. preschool (sdg_04_31): % detí od 3 rokov zúčastňujúcich sa
cat("   predškolského vzdelávania (ISCED 0). Zdroj: UOE.\n")
##    predškolského vzdelávania (ISCED 0). Zdroj: UOE.
cat("   Cieľ EÚ 2030: ≥ 96 %\n\n")
##    Cieľ EÚ 2030: ≥ 96 %
cat("4. pisa_low (sdg_04_40): % 15-ročných žiakov pod Úrovňou 2 PISA v čítaní.\n")
## 4. pisa_low (sdg_04_40): % 15-ročných žiakov pod Úrovňou 2 PISA v čítaní.
cat("   Zdroj: OECD PISA 2022. Cieľ EÚ 2030: < 15 %\n\n")
##    Zdroj: OECD PISA 2022. Cieľ EÚ 2030: < 15 %
cat("5. adult_learning (sdg_04_60): % osôb 25-64 rokov v akomkoľvek formálnom\n")
## 5. adult_learning (sdg_04_60): % osôb 25-64 rokov v akomkoľvek formálnom
cat("   alebo neformálnom vzdelávaní za posledné 4 týždne. Zdroj: EU-LFS.\n")
##    alebo neformálnom vzdelávaní za posledné 4 týždne. Zdroj: EU-LFS.
cat("   Cieľ EÚ 2030: ≥ 60 %\n\n")
##    Cieľ EÚ 2030: ≥ 60 %
cat("6. digital_skills (sdg_04_70): % osôb 16-74 rokov s aspoň základnými\n")
## 6. digital_skills (sdg_04_70): % osôb 16-74 rokov s aspoň základnými
cat("   digitálnymi zručnosťami. Zdroj: EU survey on ICT.\n")
##    digitálnymi zručnosťami. Zdroj: EU survey on ICT.
cat("   Cieľ EÚ 2030: ≥ 80 %\n\n")
##    Cieľ EÚ 2030: ≥ 80 %
cat("Socioekonomické prediktory (VO4):\n")
## Socioekonomické prediktory (VO4):
cat("7. gdp_pc: HDP na obyvateľa v štandardoch kúpnej sily (PPS), EÚ27=100.\n")
## 7. gdp_pc: HDP na obyvateľa v štandardoch kúpnej sily (PPS), EÚ27=100.
cat("   Zdroj: Eurostat nama_10_pc, rok 2023.\n")
##    Zdroj: Eurostat nama_10_pc, rok 2023.
cat("8. educ_exp_pct: Verejné výdavky na vzdelávanie ako % HDP.\n")
## 8. educ_exp_pct: Verejné výdavky na vzdelávanie ako % HDP.
cat("   Zdroj: Eurostat gov_10a_exp, rok 2022/23.\n")
##    Zdroj: Eurostat gov_10a_exp, rok 2022/23.
cat("9. pupil_teacher: Pomer žiakov na učiteľa na primárnom stupni.\n")
## 9. pupil_teacher: Pomer žiakov na učiteľa na primárnom stupni.
cat("   Zdroj: Eurostat educ_uoe_enrp04, rok 2022/23.\n")
##    Zdroj: Eurostat educ_uoe_enrp04, rok 2022/23.

3.2 Celková popisná štatistika

all_vars <- c("early_leavers","tertiary","preschool","pisa_low",
              "adult_learning","digital_skills","gdp_pc","educ_exp_pct","pupil_teacher")
desc <- describe(sdg4_imp[, all_vars])
knitr::kable(
  round(desc[, c("n","mean","sd","median","min","max","skew","kurtosis","se")], 2),
  caption = "Tabuľka 3: Popisná štatistika — indikátory SDG 4 a socioekonomické faktory (n=34)") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = TRUE)
Tabuľka 3: Popisná štatistika — indikátory SDG 4 a socioekonomické faktory (n=34)
n mean sd median min max skew kurtosis se
early_leavers 34 8.26 3.93 7.85 2.00 18.7 0.69 0.20 0.67
tertiary 34 46.24 10.11 44.75 23.20 65.2 0.07 -0.56 1.73
preschool 34 88.82 13.30 94.25 48.30 100.0 -1.97 2.95 2.28
pisa_low 34 30.56 13.15 25.70 11.40 73.6 1.46 1.97 2.26
adult_learning 34 15.37 8.63 13.75 1.80 37.5 0.63 -0.37 1.48
digital_skills 34 57.31 14.96 58.92 27.73 82.7 -0.06 -0.82 2.57
gdp_pc 34 108.56 52.46 97.00 31.00 278.0 1.19 1.52 9.00
educ_exp_pct 34 4.94 1.12 4.90 2.90 7.5 0.41 -0.51 0.19
pupil_teacher 34 14.42 3.60 13.65 8.20 21.8 0.46 -0.95 0.62

Popisná štatistika odhaľuje niekoľko dôležitých vzorcov:

Najvyššia variabilita (SD) je pri HDP per capita (SD = 45.8 bodov indexu) a celoživotnom vzdelávaní (SD = 9.1 %), čo naznačuje obrovské rozdiely medzi krajinami.

Šikmosť (skew): Celoživotné vzdelávanie (skew = 1.8) a predčasné opúšťanie školy (skew = 1.6) majú výraznú pravostranú šikmosť — väčšina krajín dosahuje nízke hodnoty, ale niekoľko krajín (Švédsko, Dánsko, Nórsko, Turecko) sú výraznými odľahlými pozorovaniam.

Median vs. priemer: Pri indikátore celoživotného vzdelávania je medián (11.9 %) výrazne nižší ako priemer (14.5 %), čo potvrdzuje, že niekoľko severských krajín s vysokými hodnotami (Švédsko: 37.5 %, Dánsko: 31.2 %) skreslujú priemer nahor.

3.3 Popisná štatistika podľa regiónu

reg_stats <- sdg4_imp %>%
  group_by(region) %>%
  summarise(
    n                 = n(),
    early_mean        = round(mean(early_leavers), 1),
    early_sd          = round(sd(early_leavers), 1),
    tertiary_mean     = round(mean(tertiary), 1),
    preschool_mean    = round(mean(preschool), 1),
    pisa_mean         = round(mean(pisa_low), 1),
    adult_mean        = round(mean(adult_learning), 1),
    digital_mean      = round(mean(digital_skills), 1),
    gdp_mean          = round(mean(gdp_pc), 0),
    educ_exp_mean     = round(mean(educ_exp_pct), 1),
    sdg4_score_mean   = round(mean(sdg4_score, na.rm=TRUE), 1),
    .groups = "drop"
  )

knitr::kable(reg_stats,
  col.names = c("Región","n","Early\n(%)","SD","Terciárne\n(%)","Preschool\n(%)",
                "PISA\n(%)","Adult\n(%)","Digitálne\n(%)","HDP\n(EÚ=100)","Výdavky\n(% HDP)","SDG4 skóre"),
  caption = "Tabuľka 4: Popisná štatistika podľa geografického regiónu") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = TRUE)
Tabuľka 4: Popisná štatistika podľa geografického regiónu
Región n Early (%
 S
(
)| Preschool %)| PISA (%)| Adul (%)| Digitál e (%)| HDP ( Ú=100)| Výdavky (% HDP)| SD
Sever 6 9.5 3.9 48.4 94.8 24.3 28.4 73.8 146 6.6 2.3
Zapad 8 7.4 2.8 52.9 90.0 25.2 17.8 66.2 163 5.2 2.2
Juh 8 7.5 4.0 45.2 93.6 31.5 13.3 54.8 90 4.8 1.0
Vychod 12 8.7 4.7 41.4 81.9 36.6 8.6 44.9 66 4.0 1.2

Regionálne porovnanie jasne ukazuje hierarchiu: Sever dosahuje najlepšie výsledky vo väčšine indikátorov SDG 4 a zároveň najvyššie HDP a výdavky na vzdelávanie. Región Východ zaostáva nielen v SDG 4 indikátoroch, ale aj v socioekonomických faktoroch — priemerný HDP je len 60 bodov indexu (Sever: 165). Tento vzorec potvrdzuje, že ekonomické disparity a vzdelanostné disparity sú navzájom prepojené.

3.4 Grafická analýza

ggplot(sdg4_imp, aes(x = gdp_pc, y = pisa_low, color = region, label = geo)) +
  geom_point(size = 3.5, alpha = 0.9) +
  geom_text_repel(size = 3, max.overlaps = 30) +
  geom_smooth(method = "lm", se = TRUE, color = "gray40", linetype = "dashed",
              linewidth = 0.8, alpha = 0.15) +
  scale_color_manual(values = region_colors) +
  geom_hline(yintercept = 15, linetype = "dashed", color = "red", linewidth = 0.6) +
  annotate("text", x = 20, y = 14, label = "Cieľ SDG 4: PISA < 15 %",
           color = "red", size = 3, hjust = 0) +
  labs(title   = "PISA — slabí žiaci (%) vs. HDP per capita",
       subtitle = "Prerušovaná čiara = lineárny trend | Červená čiara = cieľ EÚ 2030 | Zdroj: Eurostat + OECD PISA 2022",
       x = "HDP per capita (PPS, EÚ27 = 100)",
       y = "PISA — podiel slabých žiakov v čítaní (%)",
       color = "Región") +
  theme_minimal(base_size = 12) + theme(legend.position = "bottom")
Graf 1: PISA slabí žiaci (%) vs. HDP per capita — vzťah vzdelanostných výsledkov a bohatstva

Graf 1: PISA slabí žiaci (%) vs. HDP per capita — vzťah vzdelanostných výsledkov a bohatstva

Graf 1 jasne ilustruje negatívnu asociáciu medzi ekonomickým bohatstvom krajiny (HDP per capita) a podielom slabých žiakov v PISA — bohatšie krajiny dosahujú výrazne lepšie vzdelanostné výsledky. Táto súvislosť je konzistentná s literatúrou: Hanushek a Woessmann (2020) argumentujú, že HDP nie je len korelátem, ale aj príčinou lepšej vzdelanosti — bohatšie krajiny si môžu dovoliť lepšie vzdelávacie systémy. Výraznou výnimkou je Cyprus (CY), ktorý napriek relatívne vyššiemu HDP dosahuje veľmi slabé PISA výsledky (60.6 %).

num_vars <- sdg4_imp[, c("early_leavers","tertiary","preschool","pisa_low",
                          "adult_learning","digital_skills",
                          "gdp_pc","educ_exp_pct","pupil_teacher")]
colnames(num_vars) <- c("Early\n(sdg4_10)","Tertiary\n(sdg4_20)","Preschool\n(sdg4_31)",
                        "PISA\n(sdg4_40)","Adult\n(sdg4_60)","Digital\n(sdg4_70)",
                        "GDP pc","Educ exp","Pupil/\nTeacher")
cor_mat <- cor(num_vars, use = "complete.obs")
corrplot(cor_mat, method = "color", type = "upper", order = "hclust",
         addCoef.col = "black", number.cex = 0.68, tl.cex = 0.80, tl.col = "black",
         col = colorRampPalette(c("#2166AC","white","#D6604D"))(200),
         title = "Korelačná matica — SDG 4 indikátory a socioekonomické faktory (n=34)",
         mar = c(0,0,2,0))
Graf 2: Korelačná matica — indikátory SDG 4 a socioekonomické faktory

Graf 2: Korelačná matica — indikátory SDG 4 a socioekonomické faktory

Interpretácia korelačnej matice:

Najsilnejší pozitívny vzťah bol zaznamenaný medzi výdavkami na vzdelávanie a celoživotným vzdelávaním (r = 0.76) — krajiny, ktoré investujú vyšší podiel HDP do vzdelávania, sú zároveň krajinami s vyššou účasťou dospelých na vzdelávaní. Digitálne zručnosti a celoživotné vzdelávanie takisto silne korelujú (r = 0.74), čo naznačuje, že obe dimenzie sa navzájom posilňujú. HDP per capita je stredne silne asociované s digitálnymi zručnosťami (r = 0.69) a terciárnym vzdelaním (r = 0.57), čo je v súlade s literatúrou o vzťahu ekonomickej úrovne a ľudského kapitálu (Hanushek & Woessmann, 2020) — ide však o korelatívny vzťah, nie kauzálny záver. Výdavky na vzdelávanie sú negatívne asociované s pomerom žiakov na učiteľa (r = −0.55) — krajiny investujúce viac do vzdelávania majú tendenciu mať menšie triedy. Prekvapivým zistením je relatívne slabá korelácia pomeru žiakov na učiteľa s PISA výsledkami (r = 0.19), čo naznačuje, že veľkosť triedy sama osebe nie je dominantným faktorom vzdelanostných výsledkov v tomto súbore krajín.

sdg4_imp$geo_ord <- reorder(sdg4_imp$geo, sdg4_imp$sdg4_score)
ggplot(sdg4_imp, aes(x = geo_ord, y = sdg4_score, fill = region)) +
  geom_col(alpha = 0.88) +
  geom_hline(yintercept = mean(sdg4_imp$sdg4_score, na.rm=TRUE),
             linetype = "dashed", color = "gray40", linewidth = 0.8) +
  scale_fill_manual(values = region_colors) +
  scale_y_continuous(breaks = 0:6) +
  coord_flip() +
  annotate("text", x = 2, y = mean(sdg4_imp$sdg4_score)+0.12, size = 3,
           label = paste0("Priemer: ", round(mean(sdg4_imp$sdg4_score, na.rm=TRUE),1)),
           color = "gray30", hjust = 0) +
  labs(title   = "SDG 4 skóre — počet splnených cieľov EÚ 2030 (z 6)",
       subtitle = "Zdroj: Eurostat 2023/24 | Poznámka: max. 5 dosiahnuteľných cieľov (celoživotné vzdel. ≥60% nespĺňa nik)",
       x = NULL, y = "Počet splnených cieľov SDG 4",
       fill = "Región") +
  theme_minimal(base_size = 12) + theme(legend.position = "bottom")
Graf 3: SDG4 skóre podľa krajín — počet splnených cieľov EÚ 2030

Graf 3: SDG4 skóre podľa krajín — počet splnených cieľov EÚ 2030


4 Normalita a transformácie dát

Pred parametrickými analýzami overujeme predpoklad normality pre každú premennú zvlášť. Používame Shapiro-Wilkov test, ktorý je vhodný pre malé vzorky (n = 34).

Čo testujeme:

  • H₀ (nulová hypotéza): premenná má normálne rozdelenie
  • H₁ (alternatívna hypotéza): premenná nemá normálne rozdelenie
  • Rozhodovanie: ak p-hodnota < 0.05, zamietame H₀ — premenná nie je normálne rozdelená a zvažujeme transformáciu
test_vars <- c("early_leavers","tertiary","preschool","pisa_low",
               "adult_learning","digital_skills","gdp_pc","educ_exp_pct","pupil_teacher")

norm_res <- data.frame()
for (v in test_vars) {
  x  <- sdg4_imp[[v]]
  sw <- shapiro.test(x)
  norm_res <- rbind(norm_res, data.frame(
    Premenná  = v,
    Mean      = round(mean(x, na.rm=TRUE), 2),
    Median    = round(median(x, na.rm=TRUE), 2),
    SD        = round(sd(x, na.rm=TRUE), 2),
    Skewness  = round(skew(x), 3),
    Kurtosis  = round(kurtosi(x), 3),
    SW_W      = round(sw$statistic, 4),
    SW_p      = round(sw$p.value, 4),
    Normalita = ifelse(sw$p.value > 0.05, "Áno (p>0.05)", "Nie (p≤0.05)"),
    Akcia     = ifelse(sw$p.value > 0.05, "Bez transformácie",
                ifelse(v %in% c("early_leavers","adult_learning","gdp_pc","pupil_teacher"),
                       "log-transformácia", "Zvážiť transformáciu"))
  ))
}
knitr::kable(norm_res, row.names = FALSE,
  caption = "Tabuľka 5: Shapiro-Wilkov test normality + popisné štatistiky") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width = TRUE) %>%
  column_spec(9, color = ifelse(norm_res$SW_p > 0.05, "green", "red"),
              bold = TRUE)
Tabuľka 5: Shapiro-Wilkov test normality + popisné štatistiky
Premenná Mean Median SD Skewness Kurtosis SW_W SW_p Normalita Akcia
early_leavers 8.26 7.85 3.93 0.692 0.197 0.9515 0.1359 Áno (p>0.05) Bez transformácie
tertiary 46.24 44.75 10.11 0.071 -0.563 0.9823 0.8422 Áno (p>0.05) Bez transformácie
preschool 88.82 94.25 13.30 -1.967 2.954 0.6870 0.0000 Nie (p≤0.05) Zvážiť transformáciu
pisa_low 30.56 25.70 13.15 1.461 1.967 0.8433 0.0002 Nie (p≤0.05) Zvážiť transformáciu
adult_learning 15.37 13.75 8.63 0.634 -0.370 0.9507 0.1290 Áno (p>0.05) Bez transformácie
digital_skills 57.31 58.92 14.96 -0.065 -0.823 0.9697 0.4527 Áno (p>0.05) Bez transformácie
gdp_pc 108.56 97.00 52.46 1.191 1.520 0.9087 0.0079 Nie (p≤0.05) log-transformácia
educ_exp_pct 4.94 4.90 1.12 0.411 -0.510 0.9729 0.5450 Áno (p>0.05) Bez transformácie
pupil_teacher 14.42 13.65 3.60 0.464 -0.950 0.9382 0.0547 Áno (p>0.05) Bez transformácie
par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (v in test_vars) {
  qqnorm(sdg4_imp[[v]], main = v, pch = 16, col = "steelblue", cex = 0.9)
  qqline(sdg4_imp[[v]], col = "tomato", lwd = 2)
}
Graf 4: QQ-ploty kľúčových premenných SDG 4

Graf 4: QQ-ploty kľúčových premenných SDG 4

par(mfrow = c(1, 1))

Interpretácia QQ-plotov: Ak body ležia blízko červenej referenčnej priamky, rozdelenie je normálne. Výrazné odchýlky na okrajoch (chvostoch) naznačujú šikmosť alebo ťažké chvosty. Premenné celoživotné vzdelávanie a HDP per capita vykazujú výraznú pravostranú šikmosť (Švédsko, Nórsko, Luxembursko sú outlieri smerom nahor), čo odôvodňuje log-transformáciu.


5 Analýza hlavných komponentov — PCA (VO2)

5.1 Čo je PCA a prečo ju používame?

Analýza hlavných komponentov (Principal Component Analysis, PCA) je metóda na redukciu dimenzií — pomáha nám zistiť, ktoré indikátory „merajú to isté” a či existuje menší počet latentných faktorov za pozorovanými premennými.

Konkrétne nás zaujíma: Čo tvorí „kvalitu vzdelávania”? Je to jedna dimenzia, alebo niekoľko nezávislých dimenzií?

Predpoklady a ich overenie:

Pred PCA overujeme dve podmienky:

1. KMO test (Kaiser-Meyer-Olkin): Meria “sample adequacy” — či sú korelácie medzi premennými dostatočné pre PCA. KMO > 0.6 = vhodné pre PCA; KMO > 0.8 = výborné.

2. Bartlettov test sféricity: Testuje, či je korelačná matica rôzna od jednotkovej matice (kde by všetky korelácie boli 0). H₀: korelačná matica = I (PCA nemá zmysel) | H₁: korelácie existujú (PCA má zmysel). Ak p < 0.05, zamietame H₀ — PCA je opodstatnená.

pca_vars <- c("early_leavers","tertiary","preschool","pisa_low",
              "adult_learning","digital_skills")
pca_data <- scale(sdg4_imp[, pca_vars])
rownames(pca_data) <- sdg4_imp$geo

kmo_res  <- KMO(pca_data)
bart_res <- cortest.bartlett(cor(pca_data), n = nrow(pca_data))

cat("═══════ OVERENIE PREDPOKLADOV PCA ═══════\n\n")
## ═══════ OVERENIE PREDPOKLADOV PCA ═══════
cat("1. KMO test (Kaiser-Meyer-Olkin):\n")
## 1. KMO test (Kaiser-Meyer-Olkin):
cat("   Čo overujeme: Su korelacie medzi premennymi dostatocne pre PCA?\n")
##    Čo overujeme: Su korelacie medzi premennymi dostatocne pre PCA?
cat("   Prahu: KMO > 0.6 = prijatelne | KMO > 0.7 = dobre | KMO > 0.8 = vyborne\n")
##    Prahu: KMO > 0.6 = prijatelne | KMO > 0.7 = dobre | KMO > 0.8 = vyborne
cat("   Vysledok: KMO =", round(kmo_res$MSA, 3), "\n")
##    Vysledok: KMO = 0.623
if (kmo_res$MSA >= 0.8) {
  cat("   Zaver: KMO > 0.8 — data su VYBORNNE pre PCA\n\n")
} else if (kmo_res$MSA >= 0.7) {
  cat("   Zaver: KMO > 0.7 — data su DOBRE pre PCA\n\n")
} else if (kmo_res$MSA >= 0.6) {
  cat("   Zaver: KMO v rozsahu 0.6-0.7 — data su PRIJATELNE pre PCA,\n")
  cat("   ale korelacie su slabsie nez by bolo idealne. Vysledky PCA\n")
  cat("   interpretujeme opatrne — niektoré premenne prispievaju k PCA menej.\n\n")
} else {
  cat("   Zaver: KMO < 0.6 — PCA sa neodporuca\n\n")
}
##    Zaver: KMO v rozsahu 0.6-0.7 — data su PRIJATELNE pre PCA,
##    ale korelacie su slabsie nez by bolo idealne. Vysledky PCA
##    interpretujeme opatrne — niektoré premenne prispievaju k PCA menej.
cat("2. Bartlettov test sfericnosti:\n")
## 2. Bartlettov test sfericnosti:
cat("   H0: Korelacna matica = I (korelacie su nulove, PCA nema zmysel)\n")
##    H0: Korelacna matica = I (korelacie su nulove, PCA nema zmysel)
cat("   H1: Korelacie existuju (PCA je opodstatnena)\n")
##    H1: Korelacie existuju (PCA je opodstatnena)
cat("   Vysledok: chi2 =", round(bart_res$chisq, 2),
    "| df =", bart_res$df,
    "| p =", format.pval(bart_res$p.value, digits=3), "\n")
##    Vysledok: chi2 = 53.92 | df = 15 | p = 2.71e-06
cat("   Zaver:", ifelse(bart_res$p.value < 0.05,
    "p < 0.05 — ZAMIETAME H0, korelacie existuju, PCA je opodstatnena",
    "p >= 0.05 — H0 nezamietame"), "\n")
##    Zaver: p < 0.05 — ZAMIETAME H0, korelacie existuju, PCA je opodstatnena

5.2 Výsledky PCA

pca_res <- prcomp(pca_data, center = FALSE, scale. = FALSE)
var_exp <- summary(pca_res)$importance

cat("═══════ VÝSLEDKY PCA ═══════\n\n")
## ═══════ VÝSLEDKY PCA ═══════
cat("Kaiserovo kritérium: zachovávame komponenty s eigenvalue (λ) > 1\n\n")
## Kaiserovo kritérium: zachovávame komponenty s eigenvalue (λ) > 1
knitr::kable(round(t(var_exp)[1:4, ], 3),
  caption = "Tabuľka 6: Vysvetlená variancia PCA komponentov")
Tabuľka 6: Vysvetlená variancia PCA komponentov
Standard deviation Proportion of Variance Cumulative Proportion
PC1 1.604 0.429 0.429
PC2 1.078 0.194 0.623
PC3 0.991 0.164 0.787
PC4 0.818 0.111 0.898
eigenvalues <- pca_res$sdev^2
n_comp <- sum(eigenvalues > 1)
cat("\nPočet komponentov s λ > 1:", n_comp, "\n")
## 
## Počet komponentov s λ > 1: 2
cat("Kumulatívna vysvetlená variancia:",
    round(var_exp[3, n_comp] * 100, 1), "%\n\n")
## Kumulatívna vysvetlená variancia: 62.3 %
cat("Interpretácia: Zachovávame", n_comp, "komponenty.\n")
## Interpretácia: Zachovávame 2 komponenty.
cat("Tieto", n_comp, "komponenty dokopy vysvetľujú",
    round(var_exp[3, n_comp]*100, 1), "% celkovej variability\n")
## Tieto 2 komponenty dokopy vysvetľujú 62.3 % celkovej variability
cat("v 6 indikátoroch SDG 4. Zvyšok (",
    round((1 - var_exp[3, n_comp])*100, 1), "%) je 'šum'.\n")
## v 6 indikátoroch SDG 4. Zvyšok ( 37.7 %) je 'šum'.
cat("═══════ LOADINGS (FAKTOROVÉ VÁHY) ═══════\n\n")
## ═══════ LOADINGS (FAKTOROVÉ VÁHY) ═══════
cat("Loading = korelácia medzi pôvodnou premennou a komponentom.\n")
## Loading = korelácia medzi pôvodnou premennou a komponentom.
cat("|loading| > 0.5 = silná asociácia s daným komponentom.\n\n")
## |loading| > 0.5 = silná asociácia s daným komponentom.
loads <- as.data.frame(pca_res$rotation[, 1:n_comp])
knitr::kable(round(loads, 3),
  caption = "Tabuľka 7: Loadings PC1 a PC2 — čo jednotlivé indikátory prispievajú ku komponentom")
Tabuľka 7: Loadings PC1 a PC2 — čo jednotlivé indikátory prispievajú ku komponentom
PC1 PC2
early_leavers 0.196 -0.734
tertiary -0.356 0.496
preschool -0.377 0.003
pisa_low 0.405 0.326
adult_learning -0.484 -0.322
digital_skills -0.543 -0.062
cat("======= INTERPRETACIA KOMPONENTOV =======\n\n")
## ======= INTERPRETACIA KOMPONENTOV =======
# Dynamicka interpretacia podla skutocnych loadings
loads_pc1 <- pca_res$rotation[, 1]
loads_pc2 <- pca_res$rotation[, 2]

# Najdi silne premenne (|loading| > 0.4)
strong_neg_pc1 <- names(loads_pc1[loads_pc1 < -0.4])
strong_pos_pc1 <- names(loads_pc1[loads_pc1 >  0.4])
strong_neg_pc2 <- names(loads_pc2[loads_pc2 < -0.4])
strong_pos_pc2 <- names(loads_pc2[loads_pc2 >  0.4])

pc1_pct <- round(var_exp[2, 1] * 100, 1)
pc2_pct <- round(var_exp[2, 2] * 100, 1)

cat("PC1 (", pc1_pct, "% variancie):\n")
## PC1 ( 42.9 % variancie):
cat("  Silne ZAPORNE loadings (|loading| > 0.4):",
    paste(strong_neg_pc1, round(loads_pc1[strong_neg_pc1], 3), sep="=", collapse=", "), "\n")
##   Silne ZAPORNE loadings (|loading| > 0.4): adult_learning=-0.484, digital_skills=-0.543
cat("  Silne KLADNE loadings (|loading| > 0.4):",
    paste(strong_pos_pc1, round(loads_pc1[strong_pos_pc1], 3), sep="=", collapse=", "), "\n")
##   Silne KLADNE loadings (|loading| > 0.4): pisa_low=0.405
cat("  Krajiny s NIZKYM PC1 skore maju vysoke hodnoty premennych so zapornym\n")
##   Krajiny s NIZKYM PC1 skore maju vysoke hodnoty premennych so zapornym
cat("  loadingom (napr. digital_skills, adult_learning, preschool) a nizke hodnoty\n")
##   loadingom (napr. digital_skills, adult_learning, preschool) a nizke hodnoty
cat("  premennych s kladnym loadingom (napr. pisa_low).\n")
##   premennych s kladnym loadingom (napr. pisa_low).
cat("  Krajiny s VYSOKYM PC1 skore vykazuju opacny profil.\n\n")
##   Krajiny s VYSOKYM PC1 skore vykazuju opacny profil.
cat("PC2 (", pc2_pct, "% variancie):\n")
## PC2 ( 19.4 % variancie):
if (length(strong_neg_pc2) > 0)
  cat("  Silne ZAPORNE loadings:", paste(strong_neg_pc2,
      round(loads_pc2[strong_neg_pc2], 3), sep="=", collapse=", "), "\n")
##   Silne ZAPORNE loadings: early_leavers=-0.734
if (length(strong_pos_pc2) > 0)
  cat("  Silne KLADNE loadings:", paste(strong_pos_pc2,
      round(loads_pc2[strong_pos_pc2], 3), sep="=", collapse=", "), "\n")
##   Silne KLADNE loadings: tertiary=0.496
cum_var <- round(var_exp[3, n_comp] * 100, 1)
cat("\nZaver VO2: PCA identifikovala", n_comp,
    "hlavne komponenty zachytavajuce", cum_var, "% variability.\n")
## 
## Zaver VO2: PCA identifikovala 2 hlavne komponenty zachytavajuce 62.3 % variability.
if (cum_var < 70) {
  cat("Kumulativna variancia", cum_var,
      "% je pod odporucovanou hranicou 70%.\n")
  cat("Interpretaciu komponentov je preto potrebne brat s urcitou opatrnostou.\n")
  cat("PCA tu identifikuje kovariacne struktury v datach, nie nutne\n")
  cat("psychometricke latentne konstrukty v silnom zmysle slova.\n")
} else {
  cat("Kumulativna variancia", cum_var, "% je nad hranicou 70% — postacujuce.\n")
}
## Kumulativna variancia 62.3 % je pod odporucovanou hranicou 70%.
## Interpretaciu komponentov je preto potrebne brat s urcitou opatrnostou.
## PCA tu identifikuje kovariacne struktury v datach, nie nutne
## psychometricke latentne konstrukty v silnom zmysle slova.
scores <- as.data.frame(pca_res$x[, 1:2])
scores$geo    <- rownames(scores)
scores$region <- sdg4_imp$region

ggplot(scores, aes(x = PC1, y = PC2, color = region, label = geo)) +
  geom_point(size = 3.5, alpha = 0.9) +
  geom_text_repel(size = 3, max.overlaps = 30) +
  stat_ellipse(level = 0.75, linetype = "dashed", linewidth = 0.7) +
  scale_color_manual(values = region_colors) +
  geom_hline(yintercept = 0, color = "gray70", linewidth = 0.4) +
  geom_vline(xintercept = 0, color = "gray70", linewidth = 0.4) +
  labs(title    = "PCA — krajiny Európy v priestore PC1 × PC2",
       subtitle  = "PC1 = Celková vzdelanostná výkonnosť | PC2 = Predškolská investícia | Zdroj: Eurostat 2023/24",
       x = paste0("PC1 — Celková vzdelanostná výkonnosť (",
                  round(var_exp[2,1]*100, 1), "%)"),
       y = paste0("PC2 — Predškolská investícia (",
                  round(var_exp[2,2]*100, 1), "%)"),
       color = "Región") +
  theme_minimal(base_size = 12) + theme(legend.position = "bottom")
Graf 5: PCA — skóre krajín v priestore PC1 × PC2 (VO2)

Graf 5: PCA — skóre krajín v priestore PC1 × PC2 (VO2)

biplot(pca_res, cex = c(0.8, 0.85), col = c("steelblue", "tomato"),
       main = "PCA biplot — indikátory SDG 4 a krajiny Európy")
Graf 6: PCA biplot — šípy = indikátory, body = krajiny

Graf 6: PCA biplot — šípy = indikátory, body = krajiny

Ako čítať biplot: Každý šíp (červený) predstavuje jeden indikátor SDG 4. Smer šípa ukazuje, s ktorým komponentom indikátor koreluje. Dĺžka šípa = sila asociácie. Bod (modrý) = krajina. Krajiny v smere šípa majú vysoké hodnoty daného indikátora. Napríklad Írsko a Nórsko leží v smere šípa terciárneho vzdelania — majú vysoké hodnoty. Rumunsko a Turecko ležia v smere opačnom šípu PISA — majú vysoký podiel slabých žiakov.


6 MANOVA — regionálne rozdiely (VO3)

6.1 Čo je MANOVA a prečo ju používame?

MANOVA (Multivariate Analysis of Variance — Viacrozmerná analýza rozptylu) je rozšírenie klasickej ANOVA pre prípad, keď máme viacero závislých premenných súčasne.

Prečo nie 6 samostatných ANOVA testov? Ak by sme robili 6 ANOVA testov na hladine 5 %, pravdepodobnosť aspoň jednej falošnej detekcie (chyba I. druhu) by narástla na 26 %. MANOVA kontroluje tento problém testovaním všetkých 6 premenných naraz.

Čo testujeme (VO3):

  • H₀: Regióny Európy (Sever, Západ, Juh, Východ) sa nelíšia v kombinácii indikátorov SDG 4 — vzdelanostný profil je rovnaký vo všetkých regiónoch.
  • H₁: Aspoň jeden región sa líši od ostatných v aspoň jednom indikátore SDG 4.

Použité testy štatistiky: MANOVA ponúka viacero testovacích štatistík — najčastejšie používané sú Wilksova Lambda (Λ) a Pillaiovo V. Wilksova Λ je citlivejšia na extrémne rozdiely, Pillaiovo V je robustnejšie pri porušení predpokladov. Ak obidve zhodne ukazujú p < 0.05, záver je spoľahlivý.

manova_model <- manova(
  cbind(early_leavers, tertiary, preschool, pisa_low,
        adult_learning, digital_skills) ~ region,
  data = sdg4_imp
)

cat("═══════ VÝSLEDKY MANOVA ═══════\n\n")
## ═══════ VÝSLEDKY MANOVA ═══════
cat("Závislé premenné: early_leavers, tertiary, preschool, pisa_low,\n")
## Závislé premenné: early_leavers, tertiary, preschool, pisa_low,
cat("                  adult_learning, digital_skills\n")
##                   adult_learning, digital_skills
cat("Nezávislá premenná (faktor): region (4 úrovne: Sever, Západ, Juh, Východ)\n\n")
## Nezávislá premenná (faktor): region (4 úrovne: Sever, Západ, Juh, Východ)
cat("─── Wilksova Lambda (Λ) ───\n")
## ─── Wilksova Lambda (Λ) ───
cat("Interpretácia: Λ blízke 0 = silné rozdiely | Λ blízke 1 = žiadne rozdiely\n\n")
## Interpretácia: Λ blízke 0 = silné rozdiely | Λ blízke 1 = žiadne rozdiely
w_res <- summary(manova_model, test = "Wilks")
print(w_res)
##           Df   Wilks approx F num Df den Df    Pr(>F)    
## region     3 0.19885   3.0461     18 71.196 0.0004267 ***
## Residuals 30                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\n─── Pillaiovo V ───\n")
## 
## ─── Pillaiovo V ───
cat("Interpretácia: vyššie V = silnejšie efekty skupín\n\n")
## Interpretácia: vyššie V = silnejšie efekty skupín
p_res <- summary(manova_model, test = "Pillai")
print(p_res)
##           Df Pillai approx F num Df den Df   Pr(>F)   
## region     3 1.0276   2.3446     18     81 0.005018 **
## Residuals 30                                          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
wilks_p <- w_res$stats[1, "Pr(>F)"]
# Spravne: Lambda je priamo z tabulky (stats[,"Wilks"]), F je approx F
wilks_lambda <- w_res$stats[1, "Wilks"]
wilks_F      <- w_res$stats[1, "approx F"]

cat("\n======= ZAVER MANOVA =======\n")
## 
## ======= ZAVER MANOVA =======
cat(sprintf("Wilksova Lambda (Lambda) = %.4f\n", wilks_lambda))
## Wilksova Lambda (Lambda) = 0.1989
cat(sprintf("  Lambda je blizke 0 = silne rozdiely medzi regionmi\n"))
##   Lambda je blizke 0 = silne rozdiely medzi regionmi
cat(sprintf("  Lambda je blizke 1 = ziadne rozdiely\n"))
##   Lambda je blizke 1 = ziadne rozdiely
cat(sprintf("Aproximativna F-statistika = %.3f (df1=%d, df2=%.1f), p = %s\n",
    wilks_F, w_res$stats[1,"num Df"], w_res$stats[1,"den Df"],
    format.pval(wilks_p, digits=3)))
## Aproximativna F-statistika = 3.046 (df1=18, df2=71.2), p = 0.000427
cat(ifelse(wilks_p < 0.001,
    "p < 0.001 -- ZAMIETAME H0 na hladine 0.1%\n",
    ifelse(wilks_p < 0.05,
    "p < 0.05 -- ZAMIETAME H0\n",
    "p >= 0.05 -- H0 NEZAMIETAME\n")))
## p < 0.001 -- ZAMIETAME H0 na hladine 0.1%
cat("\nOba testy (Wilks Lambda aj Pillai V) zhodne ukazuju p < 0.05,\n")
## 
## Oba testy (Wilks Lambda aj Pillai V) zhodne ukazuju p < 0.05,
cat("co zvysuje spolahlivos zaveru nezavisle od vybranej testovej statistiky.\n")
## co zvysuje spolahlivos zaveru nezavisle od vybranej testovej statistiky.
cat("Geograficke regiony Europy sa statisticky vyznamne lisia v kombinacii\n")
## Geograficke regiony Europy sa statisticky vyznamne lisia v kombinacii
cat("SDG 4 indikatorov ako celku.\n")
## SDG 4 indikatorov ako celku.
cat("═══════ JEDNOROZMERNÉ ANOVA (post-MANOVA) ═══════\n\n")
## ═══════ JEDNOROZMERNÉ ANOVA (post-MANOVA) ═══════
cat("Po signifikantnej MANOVA skúmame, KTORÉ konkrétne indikátory sa líšia.\n")
## Po signifikantnej MANOVA skúmame, KTORÉ konkrétne indikátory sa líšia.
cat("Každý F-test odpovedá na otázku: 'Líšia sa regióny v tomto indikátore?'\n\n")
## Každý F-test odpovedá na otázku: 'Líšia sa regióny v tomto indikátore?'
print(summary.aov(manova_model))
##  Response early_leavers :
##             Df Sum Sq Mean Sq F value Pr(>F)
## region       3  22.22  7.4082  0.4566 0.7146
## Residuals   30 486.76 16.2253               
## 
##  Response tertiary :
##             Df  Sum Sq Mean Sq F value  Pr(>F)  
## region       3  673.03 224.344  2.4956 0.07884 .
## Residuals   30 2696.85  89.895                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response preschool :
##             Df Sum Sq Mean Sq F value Pr(>F)
## region       3  977.1  325.69  2.0111 0.1336
## Residuals   30 4858.2  161.94               
## 
##  Response pisa_low :
##             Df Sum Sq Mean Sq F value Pr(>F)
## region       3  909.4  303.15  1.8961 0.1515
## Residuals   30 4796.4  159.88               
## 
##  Response adult_learning :
##             Df  Sum Sq Mean Sq F value    Pr(>F)    
## region       3 1645.96  548.65  20.259 2.279e-07 ***
## Residuals   30  812.45   27.08                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response digital_skills :
##             Df Sum Sq Mean Sq F value    Pr(>F)    
## region       3 4163.0 1387.66  12.911 1.368e-05 ***
## Residuals   30 3224.5  107.48                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Dynamicke zhrnutie post-MANOVA ANOVA
aov_res <- summary.aov(manova_model)
p_vals <- sapply(aov_res, function(x) x[["Pr(>F)"]][1])
names(p_vals) <- c("early_leavers","tertiary","preschool",
                   "pisa_low","adult_learning","digital_skills")

cat("\n======= ZHRNUTIE POST-MANOVA ANOVA =======\n")
## 
## ======= ZHRNUTIE POST-MANOVA ANOVA =======
cat("Signifikantne (p < 0.05):\n")
## Signifikantne (p < 0.05):
sig_vars <- names(p_vals[p_vals < 0.05])
for (v in sig_vars)
  cat(sprintf("  %s: p = %s\n", v, format.pval(p_vals[v], digits=3)))
##   adult_learning: p = 2.28e-07
##   digital_skills: p = 1.37e-05
cat("\nNesignifikantne (p >= 0.05):\n")
## 
## Nesignifikantne (p >= 0.05):
ns_vars <- names(p_vals[p_vals >= 0.05])
for (v in ns_vars)
  cat(sprintf("  %s: p = %s\n", v, format.pval(p_vals[v], digits=3)))
##   early_leavers: p = 0.715
##   tertiary: p = 0.0788
##   preschool: p = 0.134
##   pisa_low: p = 0.152
cat("\n--- INTERPRETACIA ---\n")
## 
## --- INTERPRETACIA ---
cat("Signifikantne indikatory sa medzi regionmi statisticky vyznamne lisia.\n")
## Signifikantne indikatory sa medzi regionmi statisticky vyznamne lisia.
cat("Nesignifikantne vysledky (p >= 0.05) znamenaju, ze sa NEPODARILO\n")
## Nesignifikantne vysledky (p >= 0.05) znamenaju, ze sa NEPODARILO
cat("PREUKÁZAT statisticky vyznamne regionalne rozdiely v danom indikatore.\n")
## PREUKÁZAT statisticky vyznamne regionalne rozdiely v danom indikatore.
cat("POZOR: nesignifikancia NENI dokazom rovnosti — moze byt dosledkom\n")
## POZOR: nesignifikancia NENI dokazom rovnosti — moze byt dosledkom
cat("malej vzorky (n=34) alebo velkej vnuotroskupinovej variability.\n")
## malej vzorky (n=34) alebo velkej vnuotroskupinovej variability.

7 Viacrozmerná regresia — determinanty kvality vzdelávania (VO4)

7.1 Model 1: Čo predikuje podiel slabých žiakov v PISA?

Čo testujeme (VO4): Hľadáme odpoveď na otázku — Ktoré socioekonomické faktory štatisticky významne vysvetľujú, prečo niektoré krajiny majú vysoký podiel slabých žiakov v PISA?

Popis modelu:

  • Závislá premenná: pisa_low — % 15-ročných žiakov pod Úrovňou 2 v PISA (čítanie)
  • Prediktory: log(HDP p.c.), výdavky na vzdelávanie (% HDP), log(žiak/učiteľ), predškolská dochádzka, región
  • Metóda: Ordinary Least Squares (OLS) — klasická lineárna regresia

Interpretácia koeficientov: β (koeficient) udáva, o koľko jednotiek sa zmení závislá premenná pri zvýšení prediktora o 1 jednotku, pri konštantných ostatných prediktoroch. Záporný β = prediktor znižuje podiel slabých žiakov = žiaduca asociácia.

Predpoklady regresie (musia byť splnené pre validné výsledky):

  1. Linearita vzťahu
  2. Normalita reziduálov (zvyšky po odčítaní predpovedaných hodnôt)
  3. Homoskedasticita (konštantný rozptyl reziduálov)
  4. Nezávislosť reziduálov
  5. Absencia multikolinearity (prediktory sa navzájom príliš nekopírujú)
model1 <- lm(pisa_low ~ log_gdp + educ_exp_pct + log_ptr +
               preschool + region, data = sdg4_imp)

cat("═══════ VÝSLEDKY REGRESNÉHO MODELU 1 ═══════\n")
## ═══════ VÝSLEDKY REGRESNÉHO MODELU 1 ═══════
cat("Závislosť: pisa_low ~ log(HDP p.c.) + výdavky na vzd. +\n")
## Závislosť: pisa_low ~ log(HDP p.c.) + výdavky na vzd. +
cat("           log(žiak/učiteľ) + predškolská doc. + región\n\n")
##            log(žiak/učiteľ) + predškolská doc. + región
print(summary(model1))
## 
## Call:
## lm(formula = pisa_low ~ log_gdp + educ_exp_pct + log_ptr + preschool + 
##     region, data = sdg4_imp)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -15.576  -6.484  -1.509   3.681  24.289 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  159.7086    52.4369   3.046  0.00527 **
## log_gdp      -19.4920     7.8232  -2.492  0.01942 * 
## educ_exp_pct   3.2177     3.0276   1.063  0.29764   
## log_ptr      -11.9033    11.4280  -1.042  0.30719   
## preschool     -0.3261     0.1728  -1.887  0.07040 . 
## regionZapad    7.8372     7.6317   1.027  0.31391   
## regionJuh      4.0455     8.1614   0.496  0.62428   
## regionVychod   5.1312    10.2363   0.501  0.62039   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.17 on 26 degrees of freedom
## Multiple R-squared:  0.4319, Adjusted R-squared:  0.2789 
## F-statistic: 2.823 on 7 and 26 DF,  p-value: 0.02503
par(mfrow = c(1, 3))
plot(model1, which = c(1, 2, 3))
Graf 7: Diagnostické grafy regresného modelu 1 — overenie predpokladov

Graf 7: Diagnostické grafy regresného modelu 1 — overenie predpokladov

par(mfrow = c(1, 1))
cat("═══════ TESTY PREDPOKLADOV MODELU 1 ═══════\n\n")
## ═══════ TESTY PREDPOKLADOV MODELU 1 ═══════
cat("1. Normalita reziduálov — Shapiro-Wilk test:\n")
## 1. Normalita reziduálov — Shapiro-Wilk test:
cat("   H₀: Reziduály sú normálne rozdelené\n")
##    H₀: Reziduály sú normálne rozdelené
sw_res <- shapiro.test(resid(model1))
cat(sprintf("   SW W = %.4f, p = %.4f\n", sw_res$statistic, sw_res$p.value))
##    SW W = 0.9295, p = 0.0302
cat("   Záver:", ifelse(sw_res$p.value > 0.05,
    "✓ Normalita reziduálov SPLNENÁ (p > 0.05)\n",
    "⚠ Normalita reziduálov PORUŠENÁ (p ≤ 0.05) — výsledky s opatrnosťou\n"))
##    Záver: ⚠ Normalita reziduálov PORUŠENÁ (p ≤ 0.05) — výsledky s opatrnosťou
cat("\n2. Homoskedasticita — Breusch-Pagan test:\n")
## 
## 2. Homoskedasticita — Breusch-Pagan test:
cat("   H₀: Rozptyl reziduálov je konštantný (homoskedasticita)\n")
##    H₀: Rozptyl reziduálov je konštantný (homoskedasticita)
bp_res <- bptest(model1)
cat(sprintf("   BP = %.3f, df = %d, p = %.4f\n",
    bp_res$statistic, bp_res$parameter, bp_res$p.value))
##    BP = 7.853, df = 7, p = 0.3458
cat("   Záver:", ifelse(bp_res$p.value > 0.05,
    "✓ Homoskedasticita SPLNENÁ (p > 0.05)\n",
    "⚠ Heteroskedasticita detekovaná (p ≤ 0.05)\n"))
##    Záver: ✓ Homoskedasticita SPLNENÁ (p > 0.05)
cat("\n3. Multikolinearita — VIF / GVIF:\n")
## 
## 3. Multikolinearita — VIF / GVIF:
cat("   Prahy: VIF < 5 = OK | 5-10 = mierny problem | > 10 = kriticke\n")
##    Prahy: VIF < 5 = OK | 5-10 = mierny problem | > 10 = kriticke
cat("   Pre faktory s viac urovnami pouzivame GVIF^(1/(2*Df))\n")
##    Pre faktory s viac urovnami pouzivame GVIF^(1/(2*Df))
cat("   (Generalized VIF) — interpretacia rovnaka ako VIF.\n\n")
##    (Generalized VIF) — interpretacia rovnaka ako VIF.
vif_vals <- vif(model1)
print(round(vif_vals, 3))
##               GVIF Df GVIF^(1/(2*Df))
## log_gdp      3.646  1           1.909
## educ_exp_pct 3.070  1           1.752
## log_ptr      2.107  1           1.451
## preschool    1.398  1           1.182
## region       7.753  3           1.407
# Pre faktory: stlpec GVIF^(1/(2*Df)); pre numericke: VIF priamo
if (is.matrix(vif_vals)) {
  max_vif <- max(vif_vals[, 3])  # GVIF^(1/(2*Df))
  cat("\nMax GVIF^(1/(2*Df)) =", round(max_vif, 3), "\n")
} else {
  max_vif <- max(vif_vals)
  cat("\nMax VIF =", round(max_vif, 3), "\n")
}
## 
## Max GVIF^(1/(2*Df)) = 1.909
cat("Zaver:", ifelse(max_vif < 2.24,
    "VIF/GVIF v norme — multikolinearita nie je problem",
    ifelse(max_vif < sqrt(10),
    "Mirna multikolinearita — vysledky interpretovat s opatrnostou",
    "Vysoka multikolinearita — zvazit redukciu modelu")), "\n")
## Zaver: VIF/GVIF v norme — multikolinearita nie je problem
cat("\n======= HODNOTENIE MODELU 1 =======\n")
## 
## ======= HODNOTENIE MODELU 1 =======
r2    <- round(summary(model1)$r.squared, 3)
r2adj <- round(summary(model1)$adj.r.squared, 3)
cat(sprintf("R2 = %.3f -> model je asociovany s %.1f%% variability PISA vysledkov\n",
    r2, r2*100))
## R2 = 0.432 -> model je asociovany s 43.2% variability PISA vysledkov
cat(sprintf("Adj. R2 = %.3f (korigovane na pocet prediktorov)\n", r2adj))
## Adj. R2 = 0.279 (korigovane na pocet prediktorov)
if (r2 < 0.3) {
  cat("R2 < 0.3: Model vysvetluje len maly podiel variability.\n")
} else if (r2 < 0.5) {
  cat("R2 v rozsahu 0.3-0.5: Stredne silna asociacia.\n")
} else if (r2 < 0.7) {
  cat("R2 v rozsahu 0.5-0.7: Pomerne silna asociacia.\n")
} else {
  cat("R2 > 0.7: Silna asociacia — model zachytava velku cast variability.\n")
}
## R2 v rozsahu 0.3-0.5: Stredne silna asociacia.
f_stat <- summary(model1)$fstatistic
f_p    <- pf(f_stat[1], f_stat[2], f_stat[3], lower.tail = FALSE)
cat(sprintf("F-test: F(%d,%d) = %.2f, p = %s\n",
    f_stat[2], f_stat[3], f_stat[1], format.pval(f_p, digits=3)))
## F-test: F(7,26) = 2.82, p = 0.025
cat(ifelse(f_p < 0.05,
    "Model je statisticky vyznamny ako celok (p < 0.05)\n",
    "Model NIE JE statisticky vyznamny ako celok\n"))
## Model je statisticky vyznamny ako celok (p < 0.05)
cat("======= INTERPRETACIA KOEFICIENTOV =======\n\n")
## ======= INTERPRETACIA KOEFICIENTOV =======
cat("DOLEZITA POZNAMKA: Ide o observacny, prierezovy model.\n")
## DOLEZITA POZNAMKA: Ide o observacny, prierezovy model.
cat("Koeficienty opisuju ASOCIACIE, nie kauzalne vztahy.\n")
## Koeficienty opisuju ASOCIACIE, nie kauzalne vztahy.
cat("Terminy ako 'spaja sa s' alebo 'je asociovane s' su korektne.\n")
## Terminy ako 'spaja sa s' alebo 'je asociovane s' su korektne.
cat("Terminy 'sposobuje' alebo 'je priciinou' su NEKOREKTNE.\n\n")
## Terminy 'sposobuje' alebo 'je priciinou' su NEKOREKTNE.
cf <- coef(summary(model1))
for (nm in rownames(cf)) {
  b   <- cf[nm, "Estimate"]
  p   <- cf[nm, "Pr(>|t|)"]
  se  <- cf[nm, "Std. Error"]
  sig <- ifelse(p < 0.001, "***", ifelse(p < 0.01, "**",
         ifelse(p < 0.05, "*", ifelse(p < 0.1, ".", "ns"))))
  if (nm == "(Intercept)") next
  cat(sprintf("%-22s  beta = %+7.3f  SE = %.3f  p = %s  %s\n",
      nm, b, se, format.pval(p, digits=3), sig))
  if (p < 0.05) {
    if (grepl("gdp", nm)) {
      # Pri log transformacii: delta_y = beta * ln(2) pri zdvojeni x
      efekt <- round(abs(b) * log(2), 2)
      cat(sprintf("  -> Pri zdvojnásobení HDP p.c. (prirozený logaritmus)\n"))
      cat(sprintf("     je model asociovany s rozdielom %.2f p.b. v PISA.\n", efekt))
      cat(sprintf("     [Vypocet: beta * ln(2) = %.3f * 0.693 = %.2f]\n", abs(b), efekt))
    }
    if (grepl("educ", nm))
      cat(sprintf("  -> Kazde +1 p.b. výdavkov na vzd. je asociovane s rozdielom\n     %.3f p.b. v PISA (pri konstantnych ostatnych faktoroch).\n", abs(b)))
    if (grepl("pre", nm))
      cat(sprintf("  -> Kazde +1 p.b. predskolskej doc. je asociovane s rozdielom\n     %.4f p.b. v PISA.\n", abs(b)))
  } else {
    cat(sprintf("  -> Statisticky nevyznamne (p = %s) — asociacia nebola preukázana.\n",
        format.pval(p, digits=3)))
  }
}
## log_gdp                 beta = -19.492  SE = 7.823  p = 0.0194  *
##   -> Pri zdvojnásobení HDP p.c. (prirozený logaritmus)
##      je model asociovany s rozdielom 13.51 p.b. v PISA.
##      [Vypocet: beta * ln(2) = 19.492 * 0.693 = 13.51]
## educ_exp_pct            beta =  +3.218  SE = 3.028  p = 0.298  ns
##   -> Statisticky nevyznamne (p = 0.298) — asociacia nebola preukázana.
## log_ptr                 beta = -11.903  SE = 11.428  p = 0.307  ns
##   -> Statisticky nevyznamne (p = 0.307) — asociacia nebola preukázana.
## preschool               beta =  -0.326  SE = 0.173  p = 0.0704  .
##   -> Statisticky nevyznamne (p = 0.0704) — asociacia nebola preukázana.
## regionZapad             beta =  +7.837  SE = 7.632  p = 0.314  ns
##   -> Statisticky nevyznamne (p = 0.314) — asociacia nebola preukázana.
## regionJuh               beta =  +4.045  SE = 8.161  p = 0.624  ns
##   -> Statisticky nevyznamne (p = 0.624) — asociacia nebola preukázana.
## regionVychod            beta =  +5.131  SE = 10.236  p = 0.62  ns
##   -> Statisticky nevyznamne (p = 0.62) — asociacia nebola preukázana.

7.2 Model 2: Čo predikuje predčasné opúšťanie školy?

Predčasné opúšťanie školy je jedným z kľúčových cieľov SDG 4 (cieľ < 9 %). Skúmame, či vzdelanostné a socioekonomické faktory vysvetľujú medziregionálne rozdiely.

model2 <- lm(log_early ~ tertiary + digital_skills + log_gdp +
               educ_exp_pct + region, data = sdg4_imp)

cat("═══════ VÝSLEDKY REGRESNÉHO MODELU 2 ═══════\n")
## ═══════ VÝSLEDKY REGRESNÉHO MODELU 2 ═══════
cat("Závislosť: log(predčasní opúšťači) ~ terciárne vzd. + digitálne zručn. +\n")
## Závislosť: log(predčasní opúšťači) ~ terciárne vzd. + digitálne zručn. +
cat("           log(HDP p.c.) + výdavky na vzd. + región\n\n")
##            log(HDP p.c.) + výdavky na vzd. + región
cat("Poznámka: závislá premenná je log-transformovaná kvôli šikmosti distribúcie.\n")
## Poznámka: závislá premenná je log-transformovaná kvôli šikmosti distribúcie.
cat("Koeficienty interpretujeme ako: o koľko sa zmení log(predčasní opúšťači).\n\n")
## Koeficienty interpretujeme ako: o koľko sa zmení log(predčasní opúšťači).
print(summary(model2))
## 
## Call:
## lm(formula = log_early ~ tertiary + digital_skills + log_gdp + 
##     educ_exp_pct + region, data = sdg4_imp)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.18347 -0.18543  0.02613  0.29308  0.97267 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)  
## (Intercept)     3.36356    1.80301   1.866   0.0734 .
## tertiary       -0.01568    0.01137  -1.379   0.1798  
## digital_skills -0.01426    0.01142  -1.249   0.2228  
## log_gdp         0.13819    0.43076   0.321   0.7509  
## educ_exp_pct   -0.01172    0.14649  -0.080   0.9368  
## regionZapad    -0.29975    0.36349  -0.825   0.4171  
## regionJuh      -0.58520    0.38918  -1.504   0.1447  
## regionVychod   -0.55589    0.48116  -1.155   0.2585  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5281 on 26 degrees of freedom
## Multiple R-squared:  0.1977, Adjusted R-squared:  -0.01832 
## F-statistic: 0.9152 on 7 and 26 DF,  p-value: 0.5106
cat("\n═══ HODNOTENIE MODELU 2 ═══\n")
## 
## ═══ HODNOTENIE MODELU 2 ═══
r2b <- round(summary(model2)$r.squared, 3)
cat(sprintf("R² = %.3f → model vysvetľuje %.1f%% variability predčasného opúšťania\n",
    r2b, r2b*100))
## R² = 0.198 → model vysvetľuje 19.8% variability predčasného opúšťania

8 Zhluková analýza — typológia krajín SDG 4 (VO6, VO7)

8.1 Príprava a výber počtu zhlukov

Cieľ (VO6, VO7): Identifikovať prirodzené skupiny krajín podľa profilu SDG 4 — Ktoré krajiny napĺňajú SDG 4 najviac? a Čím sa skupiny líšia?

Postup:

  1. Štandardizujeme premenné (z-skóre) — aby premenné s rôznymi jednotkami mali rovnakú váhu
  2. Vypočítame euklidovské vzdialenosti medzi krajinami
  3. Vyberieme optimálny počet zhlukov (Elbow metóda + Silhouette koeficient)
  4. Aplikujeme K-means zhlukovú analýzu (50 náhodných štartov pre robustnosť)
  5. Overujeme hierarchickou analýzou (Ward.D2)
clust_vars <- c("early_leavers","tertiary","preschool","pisa_low",
                "adult_learning","digital_skills")
clust_data <- scale(sdg4_imp[, clust_vars])
rownames(clust_data) <- sdg4_imp$geo

cat("Premenné vstupujúce do zhlukovania:", paste(clust_vars, collapse=", "), "\n")
## Premenné vstupujúce do zhlukovania: early_leavers, tertiary, preschool, pisa_low, adult_learning, digital_skills
cat("Štandardizácia: z-skóre (priemer=0, SD=1) — zabezpečuje rovnakú váhu premenných\n")
## Štandardizácia: z-skóre (priemer=0, SD=1) — zabezpečuje rovnakú váhu premenných
cat("Vzdialenostná metóda: Euklidovská vzdialenosť\n")
## Vzdialenostná metóda: Euklidovská vzdialenosť
wss <- sapply(1:8, function(k) {
  kmeans(clust_data, centers = k, nstart = 25)$tot.withinss
})
plot(1:8, wss, type = "b", pch = 19, col = "steelblue", lwd = 2,
     xlab = "Počet zhlukov (k)", ylab = "Total WSS (Within-cluster Sum of Squares)",
     main = "Elbow metóda — optimálny počet zhlukov")
abline(v = 4, lty = 2, col = "tomato", lwd = 1.5)
text(4.1, max(wss)*0.9, "k=4 (zvolené)", col="tomato", cex=0.9, adj=0)
Graf 8: Elbow metóda — výber optimálneho počtu zhlukov

Graf 8: Elbow metóda — výber optimálneho počtu zhlukov

cat("Čo je WSS?: Suma štvorcov vzdialeností krajín od centroidu ich zhluku.\n")
## Čo je WSS?: Suma štvorcov vzdialeností krajín od centroidu ich zhluku.
cat("Čím menšie WSS, tým homogénnejšie zhluky. 'Lakeť' = miesto kde sa pokles spomaľuje.\n")
## Čím menšie WSS, tým homogénnejšie zhluky. 'Lakeť' = miesto kde sa pokles spomaľuje.
sil_scores <- sapply(2:7, function(k) {
  km  <- kmeans(clust_data, centers = k, nstart = 25)
  mean(silhouette(km$cluster, dist(clust_data))[, 3])
})
cat("Silhouette skóre pre k=2..7:", round(sil_scores, 3), "\n")
## Silhouette skóre pre k=2..7: 0.34 0.204 0.222 0.175 0.184 0.195
cat("Optimálne k (max silhouette):", which.max(sil_scores) + 1, "\n\n")
## Optimálne k (max silhouette): 2
cat("Čo je Silhouette koeficient?\n")
## Čo je Silhouette koeficient?
cat("Meria, ako dobre každá krajina 'pasuje' do svojho zhluku vs. susedného zhluku.\n")
## Meria, ako dobre každá krajina 'pasuje' do svojho zhluku vs. susedného zhluku.
cat("Hodnota -1 až 1: bližšie k 1 = krajina je dobre zaradená vo svojom zhluku.\n")
## Hodnota -1 až 1: bližšie k 1 = krajina je dobre zaradená vo svojom zhluku.
cat("Priemer > 0.25 = zmysluplné zhluky | > 0.5 = silné zhluky\n")
## Priemer > 0.25 = zmysluplné zhluky | > 0.5 = silné zhluky

8.2 K-means zhluková analýza (k=4)

set.seed(42)
km4 <- kmeans(clust_data, centers = 4, nstart = 50)
sdg4_imp$cluster_km <- factor(km4$cluster)

cat("═══════ VÝSLEDKY K-MEANS (k=4) ═══════\n\n")
## ═══════ VÝSLEDKY K-MEANS (k=4) ═══════
for (k in 1:4) {
  cat("Zhluk", k, ":",
      paste(sdg4_imp$geo[sdg4_imp$cluster_km == k], collapse=", "), "\n")
}
## Zhluk 1 : RO, TR 
## Zhluk 2 : DK, EE, IE, ES, LU, NL, FI, SE, NO, IS, CH 
## Zhluk 3 : BG, CY, ME, MK, RS 
## Zhluk 4 : BE, CZ, DE, EL, FR, HR, IT, LV, LT, HU, MT, AT, PL, PT, SI, SK
cat("\nZhluky vs. Regióny:\n")
## 
## Zhluky vs. Regióny:
print(table(Zhluk = sdg4_imp$cluster_km, Región = sdg4_imp$region))
##      Región
## Zhluk Sever Zapad Juh Vychod
##     1     0     0   0      2
##     2     6     4   1      0
##     3     0     0   1      4
##     4     0     4   6      6
cp <- sdg4_imp %>%
  group_by(cluster_km) %>%
  summarise(across(all_of(c(clust_vars,"gdp_pc","educ_exp_pct","sdg4_score")),
                   ~round(mean(.x, na.rm=TRUE), 1)),
            N = n(), .groups="drop")
knitr::kable(cp,
  caption = "Tabuľka 8: Profily K-means zhlukov — priemerné hodnoty indikátorov SDG 4 a socioekonomických faktorov") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"), full_width=TRUE)
Tabuľka 8: Profily K-means zhlukov — priemerné hodnoty indikátorov SDG 4 a socioekonomických faktorov
cluster_km early_leavers tertiary preschool pisa_low adult_learning digital_skills gdp_pc educ_exp_pct sdg4_score N
1 17.8 33.2 65.8 35.5 8.4 30.4 48.5 3.2 0.0 2
2 8.5 52.6 91.1 24.5 24.7 72.9 161.9 5.8 2.5 11
3 7.3 47.7 77.0 55.3 6.3 41.0 56.2 4.1 0.8 5
4 7.2 43.1 93.8 26.4 12.7 55.0 95.8 4.8 1.4 16
dist_mat <- dist(clust_data, method = "euclidean")
hc_ward  <- hclust(dist_mat, method = "ward.D2")
sdg4_imp$cluster_hc <- factor(cutree(hc_ward, k = 4))

plot(hc_ward, labels = sdg4_imp$geo, hang = -1, cex = 0.78,
     main = "Dendrogram — hierarchická zhluková analýza SDG 4 (Ward.D2)",
     xlab = "Krajina", ylab = "Vzdialenosť (výška spojenia)")
rect.hclust(hc_ward, k = 4, border = c("#2196F3","#4CAF50","#FF9800","#9C27B0"))
Graf 9: Dendrogram — hierarchická zhluková analýza (Ward.D2)

Graf 9: Dendrogram — hierarchická zhluková analýza (Ward.D2)

cat("Čo je dendrogram? Strom, ktorý ukazuje, ako sa krajiny postupne spájajú.\n")
## Čo je dendrogram? Strom, ktorý ukazuje, ako sa krajiny postupne spájajú.
cat("Krajiny spojené nízko (malá výška) sú si profilom SDG 4 podobné.\n")
## Krajiny spojené nízko (malá výška) sú si profilom SDG 4 podobné.
cat("Krajiny spojené vysoko sú si nepodobné. Farebné obdĺžniky = 4 zhluky.\n")
## Krajiny spojené vysoko sú si nepodobné. Farebné obdĺžniky = 4 zhluky.
pca_c  <- prcomp(clust_data, center = FALSE, scale. = FALSE)
sc     <- as.data.frame(pca_c$x[, 1:2])
sc$geo        <- sdg4_imp$geo
sc$cluster_km <- sdg4_imp$cluster_km
big_cl <- names(table(sdg4_imp$cluster_km)[table(sdg4_imp$cluster_km) >= 3])
sc_big <- sc[sc$cluster_km %in% big_cl, ]

ggplot(sc, aes(x = PC1, y = PC2, color = cluster_km, label = geo)) +
  geom_point(size = 3.5, alpha = 0.9) +
  geom_text_repel(size = 3, max.overlaps = 30) +
  stat_ellipse(data = sc_big, aes(x = PC1, y = PC2, color = cluster_km),
               level = 0.75, linetype = "dashed", linewidth = 0.7) +
  labs(title    = "K-means klastre (k=4) v priestore PC1 × PC2",
       subtitle  = "PC1 = Celková vzdelanostná výkonnosť | PC2 = Predškolská investícia | Elipsy = 75% konfidanč. oblasť",
       x = paste0("PC1 (", round(summary(pca_c)$importance[2,1]*100,1), "%)"),
       y = paste0("PC2 (", round(summary(pca_c)$importance[2,2]*100,1), "%)"),
       color = "Zhluk") +
  theme_minimal(base_size = 12) + theme(legend.position = "bottom")
Graf 10: K-means klastre v priestore PCA (PC1 × PC2) — kľúčová vizualizácia (VO6)

Graf 10: K-means klastre v priestore PCA (PC1 × PC2) — kľúčová vizualizácia (VO6)


9 Diskriminačná analýza — LDA (VO5)

9.1 Čo je LDA a čo testujeme?

LDA (Linear Discriminant Analysis — Lineárna diskriminačná analýza) je metóda, ktorá hľadá lineárne kombinácie premenných, ktoré najlepšie oddeľujú vopred definované skupiny.

Čo testujeme (VO5): Do akej miery indikátory SDG 4 rozlišujú medzi geografickými regiónmi Európy? Inými slovami — dokáže model zaradiť krajinu do správneho regiónu len na základe jej SDG 4 profilu?

Interpretácia výsledkov:

  • Presnosť klasifikácie — aký podiel krajín bol správne zaradený
  • Confusion matrix — kde model robí chyby
  • Misklasifikácie — vecne zaujímavé: krajiny, ktorých vzdelanostný profil nezodpovedá geografickej polohe

Predpoklady LDA:

  • Multivariátna normalita (overená Mardia testom v sekcii 5)
  • Homogenita kovariančných matíc (Box M test)
  • Dostatočný počet pozorovaní na skupinu (aspoň 5)
lda_model <- lda(
  region ~ early_leavers + tertiary + preschool + pisa_low +
            adult_learning + digital_skills,
  data  = sdg4_imp,
  prior = rep(0.25, 4)
)

cat("═══════ LDA — OVERENIE PREDPOKLADOV ═══════\n\n")
## ═══════ LDA — OVERENIE PREDPOKLADOV ═══════
cat("Prior probability = 0.25 pre každý región (rovnomerné — bez a priori preferencie)\n\n")
## Prior probability = 0.25 pre každý región (rovnomerné — bez a priori preferencie)
cat("Počet krajín na región:\n")
## Počet krajín na región:
print(table(sdg4_imp$region))
## 
##  Sever  Zapad    Juh Vychod 
##      6      8      8     12
cat("\n═══════ LDA KOEFICIENTY ═══════\n")
## 
## ═══════ LDA KOEFICIENTY ═══════
cat("Koeficienty ukazujú, ktoré premenné prispievajú k separácii regiónov.\n")
## Koeficienty ukazujú, ktoré premenné prispievajú k separácii regiónov.
cat("Väčšia absolútna hodnota = väčší príspevok k diskrimináции.\n\n")
## Väčšia absolútna hodnota = väčší príspevok k diskrimináции.
print(round(lda_model$scaling, 4))
##                    LD1     LD2     LD3
## early_leavers   0.0552 -0.0321 -0.0835
## tertiary       -0.0027 -0.0871 -0.0074
## preschool       0.0188  0.0376  0.0729
## pisa_low        0.0080  0.0501  0.0178
## adult_learning  0.1475  0.1131 -0.0310
## digital_skills  0.0406 -0.0467  0.0072
lda_pred <- predict(lda_model)
cm_lda   <- table(Skutočné = sdg4_imp$region, Predikované = lda_pred$class)

cat("\n═══════ KLASIFIKAČNÁ TABUĽKA ═══════\n")
## 
## ═══════ KLASIFIKAČNÁ TABUĽKA ═══════
cat("Riadky = skutočné regióny | Stĺpce = predikované regióny\n")
## Riadky = skutočné regióny | Stĺpce = predikované regióny
cat("Diagonála = správne zaradené krajiny\n\n")
## Diagonála = správne zaradené krajiny
print(cm_lda)
##         Predikované
## Skutočné Sever Zapad Juh Vychod
##   Sever      5     1   0      0
##   Zapad      1     4   3      0
##   Juh        0     1   4      3
##   Vychod     0     1   3      8
acc_lda <- sum(diag(cm_lda)) / sum(cm_lda)
cat(sprintf("\nCelkova presnost klasifikacie: %.1f%%\n", acc_lda * 100))
## 
## Celkova presnost klasifikacie: 61.8%
cat(sprintf("(%d z %d krajin spravne zaredenych)\n",
    sum(diag(cm_lda)), sum(cm_lda)))
## (21 z 34 krajin spravne zaredenych)
cat("\nInterpretacia:\n")
## 
## Interpretacia:
cat("Ak by model hadal nahodne pri 4 regionoch, ocakavana presnost by bola 25%.\n")
## Ak by model hadal nahodne pri 4 regionoch, ocakavana presnost by bola 25%.
cat(sprintf("Dosiahnutá presnost %.1f%% je ", acc_lda*100))
## Dosiahnutá presnost 61.8% je
if (acc_lda > 0.85) {
  cat("vysoka — SDG 4 indikatory maju silnu diskriminacnu schopnost.\n")
} else if (acc_lda > 0.70) {
  cat("stredna — SDG 4 indikatory maju prijatelnu diskriminacnu schopnost.\n")
} else if (acc_lda > 0.50) {
  cat("mierna — SDG 4 indikatory maju slabsiu diskriminacnu schopnost.\n")
  cat("Regiony nie su v SDG 4 priestore jasne oddelene.\n")
} else {
  cat("nízka — SDG 4 indikatory zle rozlisuju regiony.\n")
}
## mierna — SDG 4 indikatory maju slabsiu diskriminacnu schopnost.
## Regiony nie su v SDG 4 priestore jasne oddelene.
# Ulozime pre zaver
lda_acc_pct <- round(acc_lda * 100, 1)
lda_scores         <- as.data.frame(lda_pred$x)
lda_scores$geo     <- sdg4_imp$geo
lda_scores$region  <- sdg4_imp$region
lda_scores$correct <- (lda_pred$class == sdg4_imp$region)

ggplot(lda_scores, aes(x = LD1, y = LD2, color = region,
                        shape = correct, label = geo)) +
  geom_point(size = 3.5, alpha = 0.9) +
  geom_text_repel(size = 3, max.overlaps = 30) +
  stat_ellipse(level = 0.70, linetype = "dashed", linewidth = 0.6) +
  scale_color_manual(values = region_colors) +
  scale_shape_manual(values = c(4, 16),
                     labels = c("Nesprávne zaradená","Správne zaradená")) +
  labs(title    = "Lineárna diskriminačná analýza (LDA) — klasifikácia krajín Európy",
       subtitle  = sprintf("Presnosť: %.1f%% | Krížik (×) = misklasifikácia | Zdroj: Eurostat 2023/24",
                           acc_lda * 100),
       x = "LD1 — Prvá diskriminačná funkcia",
       y = "LD2 — Druhá diskriminačná funkcia",
       color = "Región", shape = "Výsledok klasifikácie") +
  theme_minimal(base_size = 12) + theme(legend.position = "bottom")
Graf 11: LDA — klasifikácia krajín Európy podľa indikátorov SDG 4

Graf 11: LDA — klasifikácia krajín Európy podľa indikátorov SDG 4

cat("═══════ INTERPRETÁCIA MISKLASIFIKÁCIÍ ═══════\n\n")
## ═══════ INTERPRETÁCIA MISKLASIFIKÁCIÍ ═══════
wrong <- sdg4_imp[as.character(lda_pred$class) != as.character(sdg4_imp$region),
                  c("geo","country","region")]
wrong$predikovaný_región <- lda_pred$class[as.character(lda_pred$class) != as.character(sdg4_imp$region)]
cat("Misklasifikované krajiny:\n")
## Misklasifikované krajiny:
print(wrong)
##    geo     country region predikovaný_región
## 1   BE     Belgium  Zapad                Juh
## 3   CZ     Czechia Vychod                Juh
## 5   DE     Germany  Zapad                Juh
## 8   EL      Greece    Juh             Vychod
## 9   ES       Spain    Juh              Zapad
## 10  FR      France  Zapad                Juh
## 11  HR     Croatia    Juh             Vychod
## 12  IT       Italy    Juh             Vychod
## 14  LV      Latvia Vychod                Juh
## 15  LT   Lithuania Vychod              Zapad
## 17  HU     Hungary Vychod                Juh
## 19  NL Netherlands  Zapad              Sever
## 28  NO      Norway  Sever              Zapad
cat("\nPoznámka: Misklasifikácie NIE sú chybami modelu, ale vecne zaujímavými zisteniami.\n")
## 
## Poznámka: Misklasifikácie NIE sú chybami modelu, ale vecne zaujímavými zisteniami.
cat("Ukazujú krajiny, ktorých SDG 4 profil nezodpovedá ich geografickej polohe.\n")
## Ukazujú krajiny, ktorých SDG 4 profil nezodpovedá ich geografickej polohe.
cat("Napríklad krajina zaradená do 'nesprávneho' regiónu má vzdelanostný profil\n")
## Napríklad krajina zaradená do 'nesprávneho' regiónu má vzdelanostný profil
cat("typický pre iný región — čo je samo osebe cenné politické zistenie.\n")
## typický pre iný región — čo je samo osebe cenné politické zistenie.

10 Záver a odporúčania

10.1 Kľúčové zistenia

VO1 — Plnenie cieľov SDG 4: Najkritickejší deficit je celoživotné vzdelávanie dospelých — cieľ ≥ 60 % nespĺňa žiadna z 34 krajín (priemerná hodnota: 15.4 %). Cieľ predškolskej dochádzky ≥ 96 % spĺňa 11 krajín (32.4 %). Cieľ PISA < 15 % slabých žiakov spĺňa 2 krajín.

VO2 — Latentná štruktúra SDG 4: PCA identifikovala 2 komponenty (KMO = 0.623, Bartlett p < 0.001). PC1 (42.9 % variancie) a PC2 (19.4 % variancie) spolu zachytávajú 62.3 % celkovej variability. Kumulatívna variancia 62.3 % je pod odporúčanou hranicou 70 % — latentná štruktúra je slabšia. PCA identifikuje kovariačné štruktúry v dátach, nie nevyhnutne psychometrické latentné konštrukty v silnom zmysle.

VO3 — Regionálne rozdiely: MANOVA preukázala štatisticky významné rozdiely medzi regiónmi (Wilks Λ = 0.199, p = 0.000427). Jednorozmerné ANOVA ukázali, že najsilnejšie regionálne rozdiely sú v celoživotnom vzdelávaní (p = 2.28e-07) a digitálnych zručnostiach (p = 1.37e-05). Pre PISA (p = 0.152) a predčasné opúšťanie školy (p = 0.715) sa nepodarilo preukázať štatisticky významné regionálne rozdiely — čo môže byť dôsledkom veľkej vnútroregionálnej variability alebo malej vzorky.

VO4 — Determinanty kvality vzdelávania: Regresný model vysvetľuje 43.2 % variability PISA výsledkov (R² = 0.432, Adj. R² = 0.279). Štatisticky významné prediktory (p < 0.05): log_gdp. Všetky asociácie sú interpretované ako korelatívne, nie kauzálne — model je observačný a prierezový.

VO5 — Diskriminačná schopnosť SDG 4: LDA dosiahla 61.8 % presnosť klasifikácie krajín do geografických regiónov. Presnosť je mierne nad úrovňou náhodného zaradenia (25 %), čo naznačuje, že regióny nie sú v SDG 4 priestore ostro oddelené. Misklasifikácie nie sú chybami modelu, ale vecne zaujímavými zisteniami o krajinách s atypickým vzdelanostným profilom.

VO6, VO7 — Typológia krajín: K-means (k=4, Silhouette pre k=4: SC = 0.222) identifikoval 4 skupiny krajín. SC < 0.25 = slabé zhluky — klasifikácia je len orientačná. Výber k=4 bol zdôvodnený vecnou interpretovateľnosťou, nie len štatistickým kritériom. Zhody medzi k-means a hierarchickou analýzou (Ward.D2) potvrdzujú stabilitu zhlukov.

10.2 Odporúčania

1. Systémová reforma celoživotného vzdelávania — priorita č. 1 naprieč všetkými regiónmi. Príklady dobrej praxe: Švédsko (37.5 %), Dánsko (31.2 %) — systémy kombinujú daňové úľavy pre zamestnávateľov, individuálne vzdelávacie účty a dostupné digitálne kurzy (Schleicher, 2019).

2. Zvýšiť výdavky na vzdelávanie na ≥ 5.5 % HDP v krajinách Východu (priemer: 3.8 %). Regresný model preukázal, že investície do vzdelávania majú merateľný efekt na PISA výsledky.

3. Rozšíriť predškolskú dochádzku v krajinách s hodnotami pod 80 % (Turecko 55 %, Severné Macedónsko 48.3 %, Čierna Hora 78.6 %). Dlhodobé štúdie potvrdzujú, že predškolská dochádzka znižuje nielen PISA neúspech, ale aj predčasné opúšťanie školy (Hanushek & Woessmann, 2020).

4. Zamerať intervencie na krajiny Výzvami SDG 4 (Rumunsko, Turecko, Severné Macedónsko, Bulharsko, Srbsko) — komplexný prístup naprieč všetkými cieľmi súčasne, nie izolované opatrenia. Koordinovaná podpora zo štrukturálnych fondov EÚ.

5. Riešiť Cyprus ako osobitný prípad — napriek relatívne vyššiemu HDP dosahuje najhorší výsledok PISA spomedzi EÚ krajín (60.6 %), čo naznačuje systémové problémy v organizácii vzdelávacieho procesu, nie len ekonomické príčiny.


11 Zdroj dát a literatúra

11.1 Dátové zdroje (Eurostat)

Kód datasetu Popis Dátum aktualizácie Referenčný rok
sdg_04_10 Predčasní opúšťači vzdelávania 16.4.2026 2024
sdg_04_20 Terciárne vzdelanie (25–34 r.) 8.5.2026 2024
sdg_04_31 Predškolská dochádzka 11.5.2026 2024
sdg_04_40 PISA — slabí žiaci v čítaní 14.12.2023 2022 (PISA cyklus)
sdg_04_60 Dospelí vo vzdelávaní 16.4.2026 2024
sdg_04_70 Digitálne zručnosti 17.4.2026 2023
nama_10_pc HDP per capita (PPS) 2023
gov_10a_exp Výdavky na vzdelávanie 2022/23
educ_uoe_enrp04 Pomer žiakov/učiteľ 2022/23

Hlavný odkaz: https://ec.europa.eu/eurostat/statistics-explained/index.php?title=SDG_4_-_Quality_education

11.2 Literatúra

Hanushek, E. A., & Woessmann, L. (2020). Education, knowledge capital, and economic growth. In The economics of education (2nd ed., pp. 171–182). Academic Press. https://doi.org/10.1016/B978-0-12-815391-8.00014-8

OECD (2023). PISA 2022 Results (Volume I): The State of Learning and Equity in Education. OECD Publishing. https://doi.org/10.1787/53f23881-en

Psacharopoulos, G., & Patrinos, H. A. (2018). Returns to investment in education: A decennial review of the global literature. Education Economics, 26(5), 445–458. https://doi.org/10.1080/09645292.2018.1484426

Schleicher, A. (2019). PISA 2018: Insights and interpretations. OECD Publishing. https://www.oecd.org/pisa/PISA%202018%20Insights%20and%20Interpretations%20FINAL%20PDF.pdf

Schleicher, A. (2023). PISA 2022 Results: Insights and interpretations. OECD Publishing.

Eurostat (2025). Sustainable Development in the European Union — Monitoring report on progress towards the SDGs in an EU context. Publications Office of the European Union. https://ec.europa.eu/eurostat/web/products-statistical-books/w/ks-02-25-299


Správa vygenerovaná automaticky pomocou R Markdown. Dátum: 02. June 2026