1. Fragestellung & Hypothesen

Fragestellung:
Besteht ein statistisch signifikanter Zusammenhang zwischen den staatlichen Bildungsausgaben (in % des BIP) und den PISA-Leistungen der OECD-Länder im Jahr 2022?

Hypothesen:

  • H₀: Es besteht kein linearer Zusammenhang zwischen Bildungsausgaben und PISA-Scores (r = 0).
  • H₁: Es besteht ein positiver linearer Zusammenhang – Länder mit höheren Bildungsausgaben erzielen höhere PISA-Scores (r ≠ 0).

2. Datenbasis

Die Analyse basiert auf folgenden Datensätzen:

Datei Inhalt
Bildungsausgaben_OECD_2022.xlsx Staatliche Bildungsausgaben in % des BIP (OECD 2022)
Math_PISA.csv PISA 2022 – Mathematik-Scores
Reading_PISA.csv PISA 2022 – Lese-Scores
Science_PISA.csv PISA 2022 – Naturwissenschafts-Scores

Es werden nur Länder berücksichtigt, die in allen vier Datensätzen vorhanden sind (Schnittmenge).


3. Pakete laden

library(readxl)
library(readr)
library(dplyr)

4. Daten einlesen & aufbereiten

# Bildungsausgaben einlesen
spend_raw <- read_excel("Bildungsausgaben_OECD_2022.xlsx", col_names = FALSE)

# Spalten benennen und bereinigen
spend <- data.frame(
  Country  = as.character(spend_raw[[1]]),
  Spending = as.numeric(spend_raw[[2]]),
  stringsAsFactors = FALSE
) |>
  filter(!is.na(Spending)) |>
  filter(!Country %in% c("OECE-Durchschnitt", "EU-Durchschnitt"))

# Ländernamen auf Englisch mappen (Deutsch -> Englisch)
name_map <- c(
  "Australien"        = "Australia",
  "Österreich"        = "Austria",
  "Belgien"           = "Belgium",
  "Kanada"            = "Canada",
  "Chile"             = "Chile",
  "Tschechien"        = "Czech Republic",
  "Dänemark"          = "Denmark",
  "Estland"           = "Estonia",
  "Finnland"          = "Finland",
  "Frankreich"        = "France",
  "Deutschland"       = "Germany",
  "Griechenland"      = "Greece",
  "Ungarn"            = "Hungary",
  "Island"            = "Iceland",
  "Irland"            = "Ireland",
  "Israel"            = "Israel",
  "Italien"           = "Italy",
  "Japan"             = "Japan",
  "Korea"             = "Korea",
  "Lettland"          = "Latvia",
  "Litauen"           = "Lithuania",
  "Luxemburg"         = "Luxembourg",
  "Mexiko"            = "Mexico",
  "Niederlande"       = "Netherlands",
  "Neuseeland"        = "New Zealand",
  "Norwegen"          = "Norway",
  "Polen"             = "Poland",
  "Portugal"          = "Portugal",
  "Slowakei"          = "Slovak Republic",
  "Slowenien"         = "Slovenia",
  "Spanien"           = "Spain",
  "Schweden"          = "Sweden",
  "Türkei"            = "Trkiye",
  "Vereinigtes Königreich" = "United Kingdom",
  "Vereinigte Staaten¹"    = "United States"
)

spend$Country <- ifelse(
  spend$Country %in% names(name_map),
  name_map[spend$Country],
  spend$Country
)

# PISA-Daten einlesen (Semikolon-getrennt, Komma als Dezimalzeichen)
read_csv2_pisa <- function(file, score_col) {
  df <- read_delim(file, delim = ";", skip = 3,
                   col_names = c("Country", score_col),
                   locale = locale(decimal_mark = ","),
                   show_col_types = FALSE)
  df$Country <- gsub("\\*", "", trimws(df$Country))
  df[[score_col]] <- as.numeric(df[[score_col]])
  df <- df[!is.na(df[[score_col]]), ]
  df <- df[df$Country != "OECD average", ]
  df
}

math <- read_csv2_pisa("Math_PISA.csv",    "Math")
read <- read_csv2_pisa("Reading_PISA.csv", "Reading")
sci  <- read_csv2_pisa("Science_PISA.csv", "Science")

# Datensätze zusammenführen (nur gemeinsame Länder)
df <- spend |>
  inner_join(math, by = "Country") |>
  inner_join(read, by = "Country") |>
  inner_join(sci,  by = "Country") |>
  mutate(PISA_Avg = (Math + Reading + Science) / 3)

cat("Anzahl Länder in der Analyse:", nrow(df), "\n")
## Anzahl Länder in der Analyse: 34

5. Deskriptive Statistik

summary(df[, c("Spending", "Math", "Reading", "Science", "PISA_Avg")])
##     Spending          Math          Reading         Science     
##  Min.   :2.800   Min.   :391.2   Min.   :408.2   Min.   :407.8  
##  1st Qu.:4.200   1st Qu.:469.2   1st Qu.:472.1   1st Qu.:479.8  
##  Median :4.750   Median :480.4   Median :479.3   Median :491.8  
##  Mean   :4.794   Mean   :474.7   Mean   :477.7   Mean   :486.4  
##  3rd Qu.:5.475   3rd Qu.:489.0   3rd Qu.:493.4   3rd Qu.:499.9  
##  Max.   :6.200   Max.   :535.6   Max.   :516.0   Max.   :546.6  
##     PISA_Avg    
##  Min.   :402.4  
##  1st Qu.:476.9  
##  Median :484.1  
##  Mean   :479.6  
##  3rd Qu.:493.8  
##  Max.   :532.7

6. Korrelationsanalyse (Pearson)

# Pearson-Korrelation: Bildungsausgaben vs. PISA-Durchschnitt
cor_avg  <- cor.test(df$Spending, df$PISA_Avg, method = "pearson")
cor_math <- cor.test(df$Spending, df$Math,     method = "pearson")
cor_read <- cor.test(df$Spending, df$Reading,  method = "pearson")
cor_sci  <- cor.test(df$Spending, df$Science,  method = "pearson")

# Ergebnisse als Tabelle
ergebnisse <- data.frame(
  Bereich        = c("Ø Gesamt (PISA_Avg)", "Mathematik", "Lesen", "Naturwissenschaften"),
  r              = round(c(cor_avg$estimate,  cor_math$estimate,
                           cor_read$estimate, cor_sci$estimate), 4),
  t_Wert         = round(c(cor_avg$statistic, cor_math$statistic,
                           cor_read$statistic, cor_sci$statistic), 3),
  df_            = c(cor_avg$parameter, cor_math$parameter,
                     cor_read$parameter, cor_sci$parameter),
  p_Wert         = round(c(cor_avg$p.value,  cor_math$p.value,
                           cor_read$p.value, cor_sci$p.value), 4),
  Signifikant    = ifelse(c(cor_avg$p.value, cor_math$p.value,
                            cor_read$p.value, cor_sci$p.value) < 0.05,
                          "Ja ✓", "Nein ✗")
)

knitr::kable(ergebnisse,
             col.names = c("PISA-Bereich", "r", "t-Wert", "df", "p-Wert", "Signifikant (α = .05)"),
             caption = "Pearson-Korrelationen: Bildungsausgaben (% BIP) vs. PISA-Scores (2022)")
Pearson-Korrelationen: Bildungsausgaben (% BIP) vs. PISA-Scores (2022)
PISA-Bereich r t-Wert df p-Wert Signifikant (α = .05)
Ø Gesamt (PISA_Avg) 0.0394 0.223 32 0.8249 Nein ✗
Mathematik 0.0070 0.040 32 0.9687 Nein ✗
Lesen 0.0813 0.462 32 0.6475 Nein ✗
Naturwissenschaften 0.0319 0.181 32 0.8579 Nein ✗

7. Visualisierung

plot(
  df$Spending, df$PISA_Avg,
  xlab = "Bildungsausgaben (% des BIP)",
  ylab = "Durchschnittlicher PISA-Score",
  main = "Bildungsausgaben vs. PISA-Leistung (OECD 2022)",
  pch  = 19,
  col  = "steelblue"
)
text(df$Spending, df$PISA_Avg,
     labels = df$Country,
     cex    = 0.6,
     pos    = 3,
     col    = "gray30")
abline(lm(PISA_Avg ~ Spending, data = df),
       col = "red", lwd = 2, lty = 2)
legend("topright",
       legend = paste0("r = ", round(cor_avg$estimate, 3),
                       ", p = ", round(cor_avg$p.value, 3)),
       bty = "n", text.col = "red")
Streudiagramm: Bildungsausgaben vs. PISA-Durchschnitt

Streudiagramm: Bildungsausgaben vs. PISA-Durchschnitt


8. Interpretation & Fazit

## Pearson-Korrelation (Ø PISA): r = 0.0394, p = 0.8249

Die Korrelationsanalyse zeigt für alle vier PISA-Bereiche keine statistisch signifikante Korrelation mit den staatlichen Bildungsausgaben (alle p > 0,05):

  • H₀ kann nicht verworfen werden.
  • Die Korrelationskoeffizienten liegen nahe r ≈ 0, was auf keinen linearen Zusammenhang hindeutet.

Mögliche Erklärungen:

  • Bildungsausgaben allein sind kein hinreichender Prädiktor für Schülerleistungen.
  • Weitere Faktoren wie Unterrichtsqualität, Bildungssystemstruktur, sozioökonomischer Hintergrund oder kulturelle Einstellungen könnten eine bedeutende Rolle spielen (hier: Regressionsanalyse)
  • Irland (niedrige Ausgaben, hohe Scores) und Norwegen/Israel (hohe Ausgaben, mittlere Scores) illustrieren die Heterogenität.

Fazit: Die Hypothese H₁ wird durch die Daten nicht gestützt.


Datenquellen: OECD Education at a Glance 2022; PISA 2022 Results (OECD)