library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
Forschungsfrage: Inwiefern lässt sich die durchschnittliche Lesekompetenz von Schüler:innen in einem Bundesland durch das dortige Schüler-Lehrer-Verhältnis statistisch vorhersagen?
Hypothese: Es wird ein negativer linearer Zusammenhang zwischen dem Schüler-Lehrer-Verhältnis und den mittleren Lesekompetenzwerten angenommen: Je mehr Schüler:innen auf eine Lehrkraft kommen (höheres Verhältnis), desto niedriger sollte der mittlere Kompetenzwert im Bundesland ausfallen. Die Idee dahinter: Bei mehr Schüler:innen pro Lehrkraft bleibt weniger Zeit für den Einzelnen, was sich negativ auf den Lernerfolg auswirken könnte.
Die Daten stammen von zwei offiziellen Quellen (bildungsbericht.de – Nationaler Bildungsbericht “Bildung in Deutschland”):
Pädagogisches Personal im Schulwesen (Datei: SKL_Teil_Z_Zusammenfassung_2024.xlsx): Diese Tabelle zeigt für jedes Bundesland, wie viele Schüler:innen im Schnitt auf eine Lehrkraft kommen (Schüler-Lehrer-Relation).
Kognitive Kompetenzen – IQB-Bildungstrend (Datei: d7-anhang.xlsx): Diese Tabelle enthält die Lesekompetenz-Ergebnisse aus dem IQB-Bildungstrend, einer bundesweiten Schulleistungsstudie. Wichtig zu wissen: Der IQB-Bildungstrend testet ausschließlich zwei Klassenstufen – Klasse 4 und Klasse 9. Das sind keine zufällig gewählten Jahrgänge, sondern die beiden zentralen Übergangspunkte im deutschen Schulsystem:
Klasse 4 markiert das Ende der Grundschulzeit – direkt bevor die Schüler:innen auf eine weiterführende Schule wechseln (Gymnasium, Realschule, etc.).
Klasse 9 markiert das Ende der Sekundarstufe I – also den Punkt, an dem viele Schüler:innen die Schule mit einem ersten Abschluss verlassen oder in die gymnasiale Oberstufe übergehen.
Genau an diesen beiden Übergängen wird bundesweit geprüft, ob die Schüler:innen die in den Bildungsstandards festgelegten Kompetenzziele erreicht haben. Für andere Klassenstufen gibt es in dieser Studie keine bundesweit vergleichbaren Daten. Die Beschränkung auf Klasse 4 und Klasse 9 ist also keine eigene Auswahl meinerseits, sondern ergibt sich direkt aus der Datenquelle selbst.
Ich vergleiche in dieser Analyse nicht einzelne Schüler:innen, sondern ganze Bundesländer miteinander – ich habe also nur 16 “Datenpunkte” (die 16 Bundesländer).
Zunächst wird die Excel-Tabelle mit den Lesekompetenz-Werten für Klasse 4 (2021) und Klasse 9 (2022) eingelesen. Die Rohdaten enthalten oben ein paar Titelzeilen, die übersprungen werden müssen, und teilweise steht statt einer Zahl ein Punkt-Symbol (“●”) in der Tabelle – das bedeutet, dass für dieses Bundesland aus Datenschutzgründen kein Wert vorliegt. Diese Symbole werden in “fehlender Wert” (NA) umgewandelt, damit R sie bei der Berechnung von Mittelwerten korrekt ignoriert.
lesekompetenz <- read_excel(
"/Users/consti/Desktop/d7-anhang.xlsx",
sheet = "Tab. D7-2web",
skip = 7,
n_max = 16,
col_names = c("Bundesland", "Lese4_2016", "Lese4_2021", "Lese9_2015", "Lese9_2022")
)
lesekompetenz <- lesekompetenz %>%
mutate(
Bundesland = str_remove(Bundesland, "\\d\\)$"),
Bundesland = str_trim(Bundesland),
Lese4_2021 = as.numeric(na_if(as.character(Lese4_2021), "●")),
Lese9_2022 = as.numeric(na_if(as.character(Lese9_2022), "●"))
)
print(lesekompetenz)
## # A tibble: 16 × 5
## Bundesland Lese4_2016 Lese4_2021 Lese9_2015 Lese9_2022
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Baden-Württemberg 492 468 496 486
## 2 Bayern 514 496 513 496
## 3 Berlin 475 448 483 451
## 4 Brandenburg 492 456 511 472
## 5 Bremen 444 432 458 436
## 6 Hamburg 487 479 496 472
## 7 Hessen 499 476 492 460
## 8 Mecklenburg-Vorpommern 490 NA 506 477
## 9 Niedersachsen 490 462 498 474
## 10 Nordrhein-Westfalen 480 460 492 458
## 11 Rheinland-Pfalz 485 474 494 466
## 12 Saarland 498 473 496 478
## 13 Sachsen 509 496 528 503
## 14 Sachsen-Anhalt 497 476 504 483
## 15 Schleswig-Holstein 501 479 514 476
## 16 Thüringen 493 465 511 482
Für Mecklenburg-Vorpommern liegt bei Klasse 4 kein Wert vor – dieser Fall wird bei den späteren Berechnungen automatisch ausgeschlossen (n = 15 statt n = 16).
Anschließend wird die zweite Excel-Tabelle geladen, die für jedes Bundesland angibt, wie viele Schüler:innen im Schnitt auf eine Lehrkraft kommen. Diese Tabelle ist so aufgebaut, dass die Bundesländer als Kürzel (z. B. “BW” für Baden-Württemberg) in einzelnen Spalten nebeneinanderstehen. Die Tabelle wird so umgeformt, dass jedes Bundesland eine eigene Zeile bekommt; die Kürzel werden anschließend in die vollen Namen übersetzt, damit die beiden Datensätze später zusammengeführt werden können.
slr_roh <- read_excel(
"/Users/consti/Desktop/SKL_Teil_Z_Zusammenfassung_2024.xlsx",
sheet = "Z6.2 ", # Achtung: Leerzeichen im Sheetnamen, wie im Original geprüft
skip = 4
)
## New names:
## • `` -> `...1`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
slr_gefiltert <- slr_roh %>%
filter(`Schulstufe/Schulart` == "Allgemeinbildende Schulen")
kuerzel_tabelle <- tibble(
Kuerzel = c("BW","BY","BE","BB","HB","HH","HE","MV","NI","NW","RP","SL","SN","ST","SH","TH"),
Bundesland = c("Baden-Württemberg","Bayern","Berlin","Brandenburg","Bremen","Hamburg","Hessen",
"Mecklenburg-Vorpommern","Niedersachsen","Nordrhein-Westfalen","Rheinland-Pfalz",
"Saarland","Sachsen","Sachsen-Anhalt","Schleswig-Holstein","Thüringen")
)
schueler_lehrer <- slr_gefiltert %>%
select(BW:TH) %>% # nur die 16 Länderspalten (ohne Gesamt-D)
pivot_longer(cols = everything(),
names_to = "Kuerzel",
values_to = "Schueler_je_Lehrkraft") %>%
left_join(kuerzel_tabelle, by = "Kuerzel") %>%
select(Bundesland, Schueler_je_Lehrkraft)
print(schueler_lehrer)
## # A tibble: 16 × 2
## Bundesland Schueler_je_Lehrkraft
## <chr> <dbl>
## 1 Baden-Württemberg 13.1
## 2 Bayern 13.6
## 3 Berlin 12.9
## 4 Brandenburg 12.9
## 5 Bremen 12.8
## 6 Hamburg 12.3
## 7 Hessen 12.9
## 8 Mecklenburg-Vorpommern 14.2
## 9 Niedersachsen 12.9
## 10 Nordrhein-Westfalen 12.9
## 11 Rheinland-Pfalz 13.6
## 12 Saarland 12.8
## 13 Sachsen 14.3
## 14 Sachsen-Anhalt 14.1
## 15 Schleswig-Holstein 13.4
## 16 Thüringen 13.8
Die beiden Datensätze werden nun zusammengeführt, sodass am Ende eine einzige Tabelle vorliegt: pro Bundesland die Lesekompetenz-Werte und die Schüler-Lehrer-Relation nebeneinander. Anschließend wird geprüft, ob beim Zusammenführen (dem sogenannten “Join”) irgendwo versehentlich Werte verloren gegangen sind.
projekt_daten <- lesekompetenz %>%
left_join(schueler_lehrer, by = "Bundesland")
print(projekt_daten)
## # A tibble: 16 × 6
## Bundesland Lese4_2016 Lese4_2021 Lese9_2015 Lese9_2022 Schueler_je_Lehrkraft
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Baden-Würt… 492 468 496 486 13.1
## 2 Bayern 514 496 513 496 13.6
## 3 Berlin 475 448 483 451 12.9
## 4 Brandenburg 492 456 511 472 12.9
## 5 Bremen 444 432 458 436 12.8
## 6 Hamburg 487 479 496 472 12.3
## 7 Hessen 499 476 492 460 12.9
## 8 Mecklenbur… 490 NA 506 477 14.2
## 9 Niedersach… 490 462 498 474 12.9
## 10 Nordrhein-… 480 460 492 458 12.9
## 11 Rheinland-… 485 474 494 466 13.6
## 12 Saarland 498 473 496 478 12.8
## 13 Sachsen 509 496 528 503 14.3
## 14 Sachsen-An… 497 476 504 483 14.1
## 15 Schleswig-… 501 479 514 476 13.4
## 16 Thüringen 493 465 511 482 13.8
# Kontrolle: sind nach dem Join alle 16 Bundesländer vollständig gematcht?
cat("Fehlende Werte nach Join (Schueler_je_Lehrkraft):",
sum(is.na(projekt_daten$Schueler_je_Lehrkraft)), "\n")
## Fehlende Werte nach Join (Schueler_je_Lehrkraft): 0
cat("Fehlende Werte nach Join (Lese4_2021):",
sum(is.na(projekt_daten$Lese4_2021)), "\n")
## Fehlende Werte nach Join (Lese4_2021): 1
cat("Fehlende Werte nach Join (Lese9_2022):",
sum(is.na(projekt_daten$Lese9_2022)), "\n")
## Fehlende Werte nach Join (Lese9_2022): 0
Das Ergebnis zeigt: Bis auf den einen bekannten fehlenden Wert bei Mecklenburg-Vorpommern (Klasse 4) hat alles gepasst.
Bevor komplexere statistische Tests durchgeführt werden, erfolgt zunächst ein grundlegender Überblick über die Daten: Wie hoch ist die durchschnittliche Lesekompetenz, und wie stark schwankt sie zwischen den Bundesländern? Das Gleiche wird für die Schüler-Lehrer-Relation betrachtet.
str(projekt_daten)
## tibble [16 × 6] (S3: tbl_df/tbl/data.frame)
## $ Bundesland : chr [1:16] "Baden-Württemberg" "Bayern" "Berlin" "Brandenburg" ...
## $ Lese4_2016 : num [1:16] 492 514 475 492 444 487 499 490 490 480 ...
## $ Lese4_2021 : num [1:16] 468 496 448 456 432 479 476 NA 462 460 ...
## $ Lese9_2015 : num [1:16] 496 513 483 511 458 496 492 506 498 492 ...
## $ Lese9_2022 : num [1:16] 486 496 451 472 436 472 460 477 474 458 ...
## $ Schueler_je_Lehrkraft: num [1:16] 13.1 13.6 12.9 12.9 12.8 ...
projekt_daten %>%
summarise(
n_Lese4 = sum(!is.na(Lese4_2021)),
Mittelwert_Lese4 = mean(Lese4_2021, na.rm = TRUE),
SD_Lese4 = sd(Lese4_2021, na.rm = TRUE),
n_Lese9 = sum(!is.na(Lese9_2022)),
Mittelwert_Lese9 = mean(Lese9_2022, na.rm = TRUE),
SD_Lese9 = sd(Lese9_2022, na.rm = TRUE),
Mittelwert_SLR = mean(Schueler_je_Lehrkraft, na.rm = TRUE),
SD_SLR = sd(Schueler_je_Lehrkraft, na.rm = TRUE)
)
## # A tibble: 1 × 8
## n_Lese4 Mittelwert_Lese4 SD_Lese4 n_Lese9 Mittelwert_Lese9 SD_Lese9
## <int> <dbl> <dbl> <int> <dbl> <dbl>
## 1 15 469. 16.7 16 473. 16.6
## # ℹ 2 more variables: Mittelwert_SLR <dbl>, SD_SLR <dbl>
Die mittlere Lesekompetenz liegt in Klasse 4 (2021) bei etwa 469 Punkten (Standardabweichung ≈ 17, n = 15) und in Klasse 9 (2022) bei etwa 473 Punkten (Standardabweichung ≈ 17, n = 16). Die Schüler-Lehrer-Relation liegt im Schnitt bei 13,3 Schüler:innen pro Lehrkraft und unterscheidet sich zwischen den Bundesländern nur relativ wenig (zwischen etwa 12,3 und 14,3).
Um den Zusammenhang zwischen beiden Größen sichtbar zu machen, werden für Klasse 4 und Klasse 9 jeweils Streudiagramme erstellt: Jeder Punkt entspricht einem Bundesland, auf der x-Achse steht die Schüler-Lehrer-Relation, auf der y-Achse die Lesekompetenz. Zusätzlich wird eine Regressionsgerade eingezeichnet, die den allgemeinen Trend in den Daten zeigt.
ggplot(projekt_daten, aes(x = Schueler_je_Lehrkraft, y = Lese4_2021)) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = TRUE, color = "steelblue") +
geom_text(aes(label = Bundesland), vjust = -0.7, size = 3) +
labs(
title = "Schüler-Lehrer-Relation und Lesekompetenz (Klasse 4, 2021)",
x = "Schüler:innen je Lehrkraft",
y = "Mittlere Lesekompetenz (Klasse 4)"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_text()`).
ggplot(projekt_daten, aes(x = Schueler_je_Lehrkraft, y = Lese9_2022)) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = TRUE, color = "darkorange") +
geom_text(aes(label = Bundesland), vjust = -0.7, size = 3) +
labs(
title = "Schüler-Lehrer-Relation und Lesekompetenz (Klasse 9, 2022)",
x = "Schüler:innen je Lehrkraft",
y = "Mittlere Lesekompetenz (Klasse 9)"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Bereits in den Diagrammen zeigt sich das überraschende Hauptergebnis dieser Analyse: Die Linie steigt in beiden Fällen an, statt wie erwartet zu fallen. Bundesländer mit einer höheren Schüler-Lehrer-Relation (zum Beispiel Sachsen oder Sachsen-Anhalt) weisen tendenziell eine höhere, nicht niedrigere, Lesekompetenz auf.
Um den Zusammenhang auch in Zahlen auszudrücken, wird der Korrelationskoeffizient berechnet: Er zeigt, wie stark und in welche Richtung zwei Größen zusammenhängen. Werte nahe -1 bedeuten einen starken negativen Zusammenhang (wie in der Hypothese erwartet), Werte nahe +1 einen starken positiven. Da ein negativer Zusammenhang erwartet wurde, wird gezielt in diese Richtung getestet (einseitiger Test).
cor.test(projekt_daten$Schueler_je_Lehrkraft, projekt_daten$Lese4_2021,
alternative = "less")
##
## Pearson's product-moment correlation
##
## data: projekt_daten$Schueler_je_Lehrkraft and projekt_daten$Lese4_2021
## t = 2.174, df = 13, p-value = 0.9756
## alternative hypothesis: true correlation is less than 0
## 95 percent confidence interval:
## -1.0000000 0.7803169
## sample estimates:
## cor
## 0.5163515
cor.test(projekt_daten$Schueler_je_Lehrkraft, projekt_daten$Lese9_2022,
alternative = "less")
##
## Pearson's product-moment correlation
##
## data: projekt_daten$Schueler_je_Lehrkraft and projekt_daten$Lese9_2022
## t = 2.7927, df = 14, p-value = 0.9928
## alternative hypothesis: true correlation is less than 0
## 95 percent confidence interval:
## -1.0000000 0.8165732
## sample estimates:
## cor
## 0.5981396
Für beide Klassenstufen zeigt sich eine positive Korrelation (Klasse 4: r = 0,52; Klasse 9: r = 0,60) – also genau das Gegenteil der Hypothese. Weil gezielt auf einen negativen Zusammenhang getestet wurde, kommt der Test folgerichtig zu keinem signifikanten Ergebnis in diese Richtung (Klasse 4: p = 0,976; Klasse 9: p = 0,993). Da es sich um zwei inhaltlich getrennte Fragestellungen handelt (zwei Altersstufen), wurde bewusst keine Korrektur für mehrfaches Testen vorgenommen.
Mit der Regression wird ein Modell gebaut, das aus der Schüler-Lehrer-Relation die Lesekompetenz vorhersagt; zusätzlich wird geprüft, wie gut dieses Modell die Daten erklärt.
modell_klasse4 <- lm(Lese4_2021 ~ Schueler_je_Lehrkraft, data = projekt_daten)
summary(modell_klasse4)
##
## Call:
## lm(formula = Lese4_2021 ~ Schueler_je_Lehrkraft, data = projekt_daten)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.706 -7.853 -1.607 9.943 23.503
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 268.711 92.364 2.909 0.0122 *
## Schueler_je_Lehrkraft 15.181 6.983 2.174 0.0488 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.87 on 13 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.2666, Adjusted R-squared: 0.2102
## F-statistic: 4.726 on 1 and 13 DF, p-value: 0.04877
modell_klasse9 <- lm(Lese9_2022 ~ Schueler_je_Lehrkraft, data = projekt_daten)
summary(modell_klasse9)
##
## Call:
## lm(formula = Lese9_2022 ~ Schueler_je_Lehrkraft, data = projekt_daten)
##
## Residuals:
## Min 1Q Median 3Q Max
## -28.913 -8.851 1.020 12.642 16.731
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 253.503 78.717 3.220 0.00616 **
## Schueler_je_Lehrkraft 16.543 5.924 2.793 0.01439 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.76 on 14 degrees of freedom
## Multiple R-squared: 0.3578, Adjusted R-squared: 0.3119
## F-statistic: 7.799 on 1 and 14 DF, p-value: 0.01439
Beide Modelle sind statistisch signifikant (Klasse 4: p = 0,049; Klasse 9: p = 0,014) – aber wieder mit umgekehrtem Vorzeichen als erwartet: Ein Anstieg der Schüler-Lehrer-Relation um eine Einheit geht im Modell mit einem Anstieg der Lesekompetenz um etwa 15 bis 17 Punkte einher, nicht mit einem Rückgang. Das Modell für Klasse 9 erklärt mit einem R² von 0,36 etwas mehr der Unterschiede zwischen den Bundesländern als das Modell für Klasse 4 (R² = 0,27). Beide Werte zeigen jedoch nur einen moderaten Erklärungsgehalt: Ein großer Teil der Unterschiede in der Lesekompetenz bleibt durch die Schüler-Lehrer-Relation allein unerklärt.
Die ursprüngliche Hypothese hat sich nicht bestätigt – stattdessen zeigt sich das Gegenteil: Bundesländer mit mehr Schüler:innen pro Lehrkraft schneiden in diesen Daten tendenziell besser ab, nicht schlechter. Eine mögliche Erklärung dafür ist, dass hier keine einzelnen Schulklassen verglichen werden, sondern ganze Bundesländer. Auf dieser Ebene spielen viele andere Faktoren eine Rolle, die sich gegenseitig überlagern können – zum Beispiel wie der Unterricht organisiert ist, welche Rahmenbedingungen ein Bundesland hat, oder wie sich die Bevölkerung zusammensetzt. Es ist also möglich, dass gar nicht die Schüler-Lehrer-Relation selbst für die guten Werte verantwortlich ist, sondern ein anderer Faktor, der zufällig mit ihr zusammenhängt. Ein Zusammenhang zwischen zwei Größen bedeutet eben nicht automatisch, dass die eine die andere tatsächlich verursacht. Zu bedenken ist außerdem, dass nur 16 Bundesländer verglichen werden – eine sehr kleine Datenbasis, bei der einzelne “Ausreißer” das Gesamtergebnis schnell verschieben können.
Insgesamt zeigt die Analyse: Der erwartete negative Zusammenhang zwischen Schüler-Lehrer-Relation und Lesekompetenz lässt sich mit diesen Daten nicht bestätigen. Stattdessen deutet sich das Gegenteil an. Das heißt aber nicht, dass kleinere Klassen grundsätzlich schlechter sind – vermutlich spielen andere, nicht erfasste Unterschiede zwischen den Bundesländern eine größere Rolle als die reine Schüler-Lehrer-Relation. Um das genauer zu klären, wären detailliertere Daten nötig, zum Beispiel auf Ebene einzelner Schulen statt ganzer Bundesländer.