Hauptfragestellung: Wie erleben angehende schulische Heilpädagoginnen und schulische Heilpädagogen die Zusammenarbeit mit Eltern und welche Faktoren tragen aus ihrer Sicht zu einer gelingenden Kooperation bei?
Im Rahmen der Analyse wurden die erhobenen Variablen je nach theoretischer Struktur und empirischer Befundlage unterschiedlich behandelt. Dabei wurde zwischen Skalen (reflektive Konstrukte) und Indizes (formative Konstrukte) unterschieden.
Explorative Faktorenanalysen
Eine explorative Faktorenanalyse (EFA) wurde in zwei Bereichen durchgeführt:
Der Block „Entwicklungsbedarf“ umfasste zehn Items. Da theoretisch unklar war, ob es sich um ein einheitliches Konstrukt oder mehrere Dimensionen handelt, wurde eine Faktorenanalyse durchgeführt.
Die Parallelanalyse deutete auf eine zweifaktorielle Struktur hin. Es zeigten sich zwei klar interpretierbare Dimensionen:
Struktureller Entwicklungsbedarf
Kommunikativer Entwicklungsbedarf
Da beide Faktoren inhaltlich sinnvoll und reliabel waren, wurden zwei getrennte Skalen gebildet.
Auch für die Kontaktformen wurde explorativ eine Faktorenanalyse durchgeführt. Ziel war es zu prüfen, ob sich unterschiedliche Dimensionen (z. B. formelle vs. informelle oder analoge vs. digitale Kontakte) empirisch bestätigen lassen.
Die Faktorenanalyse ergab jedoch keine klar interpretierbare und stabile Faktorenstruktur. Die Items gruppierten sich nicht eindeutig zu trennbaren Dimensionen, und die Faktorenlösung brachte keinen zusätzlichen Erkenntnisgewinn.
Zudem handelt es sich bei Kontaktformen konzeptionell um ein formatives Konstrukt: Verschiedene Kontaktarten (z. B. Elterngespräche, Telefonkontakt, digitale Plattformen) bilden gemeinsam die Kontaktintensität, ohne notwendigerweise stark miteinander korrelieren zu müssen.
Aus diesen Gründen wurde auf eine faktorenanalytische Differenzierung verzichtet und stattdessen zwei inhaltlich begründete Indizes gebildet:
Face-to-Face Kontakte
Digitale Kontakte
Diese wurden als Mittelwertindizes @Hannah: Informell/Formell hat sich nicht in der FA als relevant gezeigt, ich kann die mittelwertindized aber auch darauf basieren
Für folgende Konstrukte wurde keine zusätzliche Faktorenanalyse durchgeführt, da entweder eine klare theoretische Struktur oder eine ausreichende interne Konsistenz vorlag:
Qualität der Elternkontakte
Die Items sind inhaltlich klar auf ein gemeinsames Konstrukt ausgerichtet und zeigten eine gute interne Konsistenz. Eine zusätzliche Faktorenanalyse war daher nicht erforderlich. Es wurde ein Mittelwertindex gebildet.
Partizipation:
Auch hier lag eine konzeptionell homogene Skala mit guter interner Konsistenz vor. Eine Faktorenanalyse hätte keinen zusätzlichen Erkenntnisgewinn erbracht.
Multiprofessionelle Zusammenarbeit:
Auch hier lag eine konzeptionell homogene Skala mit guter interner Konsistenz vor. Eine Faktorenanalyse hätte keinen zusätzlichen Erkenntnisgewinn erbracht.
Förderliche Faktoren:
Obwohl die interne Konsistenz moderat war, sprechen sowohl die inhaltliche Geschlossenheit als auch akzeptable Itemzusammenhänge gegen die Notwendigkeit einer Faktorenanalyse. Die geringere Reliabilität ist vermutlich auf geringe Varianz (Deckeneffekt) zurückzuführen, nicht auf Mehrdimensionalität.
Trotz moderater interner Konsistenz wurde die Skala beibehalten, da sie ein theoretisch zentrales Konstrukt im Strukturblock darstellt.
Teamstruktur:
Die drei Items zeigten eine geringe interne Konsistenz. Aufgrund der
inhaltlich unterschiedlichen Aspekte (formale Strukturen, Austausch,
Unterstützung) wurde kein Gesamtindex gebildet. Die Items werden
getrennt analysiert.
Kantonale Vorgaben:
Einzelitem, daher keine Skalenbildung möglich.
1. Datenimport & BasicCleaning
df <- readr::read_csv(here("data_raw", "Copy of results-survey311269.xlsx - Elternzusammenarbeit (1).csv"))
df <- df %>%
janitor::clean_names() %>%
select(
-datum_abgeschickt,
-letzte_seite,
-start_sprache,
-zufallsstartwert,
-datum_gestartet,
-datum_letzte_aktivitat,
-in_welchen_bereichen_sehen_sie_daruber_hinaus_entwicklungsbedarf
) %>%
mutate(
wie_viele_jahre_berufserfahrung_haben_sie_insgesamt_im_schulischen_oder_padagogischen_bereich =
stringr::str_replace(
wie_viele_jahre_berufserfahrung_haben_sie_insgesamt_im_schulischen_oder_padagogischen_bereich,
"6 b is 10 Jahre",
"6 bis 10 Jahre"
)
) %>%
mutate(across(where(is.character), as.factor))
@Hannah: Diese Spalten wurden Entfernt für die Analyse:Datum Abgeschickt, letzte Seitem Zeitstempel, Start Sprache, Zufallsstartwert, Letzte Aktivität, “In welchem Bereich sehen sie zudem Entwicklungsbedarf” (da qualitativ)
2. Antwortkategorien in Zahlen kodieren (Likert-Konvertierung)
@Hannah:
Für die Umwandlung der Likert Textantworten zu numerischen Werten habe ich die Antwortoptionen „kenne die kantonalen Vorgaben nicht / kann ich nicht beurteilen“ wird als 0 kodiert, weil sie somit als strukturelles Wissens-/Orientierungsdefizit verstanden wird. Wenn das nicht gemacht wird, zählt der Datenpunkt als NA/nicht beantwortet und kann nicht mit einberechnet werden. Da müsst ihr entscheiden ob ihr das wollt oder nicht
convert_likert <- function(x) {
x <- tolower(trimws(as.character(x)))
case_when(
# structural knowledge deficit (NOT missing)
str_detect(x, "kenne die kantonalen vorgaben nicht|kann ich nicht beurteilen") ~ 0,
# agreement
str_detect(x, "stimme voll|voll und ganz") ~ 5,
str_detect(x, "stimme eher zu|eher zu") ~ 4,
str_detect(x, "stimme teilweise|teilweise") ~ 3,
str_detect(x, "stimme eher nicht|eher nicht") ~ 2,
str_detect(x, "stimme nicht|gar nicht") ~ 1,
# frequency
str_detect(x, "sehr häufig") ~ 5,
str_detect(x, "eher häufig|häufig") ~ 4,
str_detect(x, "gelegentlich") ~ 3,
str_detect(x, "selten") ~ 2,
str_detect(x, "^nie$") ~ 1,
# quality
str_detect(x, "^sehr gut$") ~ 5,
str_detect(x, "^eher gut$") ~ 4,
str_detect(x, "^teilweise$") ~ 3,
str_detect(x, "^eher schlecht$|^eher nicht$") ~ 2,
str_detect(x, "^sehr schlecht$|^gar nicht$") ~ 1,
# optional yes/no numeric coding
str_detect(x, "^ja$") ~ 3,
str_detect(x, "^nein$") ~ 1,
TRUE ~ NA_real_
)
}
@Hannah für thesis: Antwortkategorien wurden in numerische Werte überführt. Die Kategorie ‚kenne die kantonalen Vorgaben nicht / kann ich nicht beurteilen‘ wurde als 0 codiert, da sie inhaltlich ein relevantes Orientierungsdefizit abbildet und nicht als fehlender Wert interpretiert wird. Bitte check ob die numerische Skalierung so stimmt
3. Likert- Skalen konvertieren
keywords <- c("stimme", "häufig", "selten", "gelegentlich",
"nie", "sehr gut", "eher gut",
"sehr schlecht", "teilweise")
is_likert_col <- function(col) {
vals <- tolower(trimws(as.character(col)))
vals <- vals[!is.na(vals) & vals != ""]
if (length(vals) == 0) return(FALSE)
any(stringr::str_detect(vals, paste(keywords, collapse = "|")))
}
# 1) Detect likert columns
likert_cols <- names(df)[sapply(df, is_likert_col)]
# SAFETY: remove empty/NA names and ensure they exist
likert_cols <- likert_cols[!is.na(likert_cols) & likert_cols != ""]
likert_cols <- intersect(likert_cols, names(df))
# 2) Drop participants with zero answered Likert items
n_before <- nrow(df)
df$likert_n_valid <- rowSums(!is.na(df[, likert_cols, drop = FALSE]))
df <- df %>% filter(likert_n_valid > 0)
n_after <- nrow(df)
n_removed <- n_before - n_after
df <- df %>% select(-likert_n_valid)
cat("Cases before cleaning:", n_before, "\n")
## Cases before cleaning: 388
cat("Cases after cleaning:", n_after, "\n")
## Cases after cleaning: 334
cat("Cases removed:", n_removed, "\n")
## Cases removed: 54
# 3) Re-check likert_cols after filtering (extra safe)
likert_cols <- intersect(likert_cols, names(df))
# 4) Convert to numeric
df_num <- df %>%
mutate(across(all_of(likert_cols), convert_likert, .names = "num_{.col}"))
num_cols <- grep("^num_", names(df_num), value = TRUE)
cat("Likert columns detected:", length(likert_cols), "\n")
## Likert columns detected: 50
cat("Numeric columns created:", length(num_cols), "\n")
## Numeric columns created: 50
@Hannah: Insgesamt N=388 haben teilgenommen, 54 Teilnehmer haben keine Antowrten zu einer der Likert Frage geliefert und wurden ausgeschlossen. Im Excel “Data_in_thesis” könnt ihr nachhschauen ob das so ok ist, es hat ein paar Personen die nur wenige der Fragen beantowrtet haben. Weitere Ausschlüsse würden die Analyse beeinflussen und müssen VOR der Interpretation der Daten gemacht werden.
->Die Momentane Analyse ist mit N-54 Teilnehmern!
Bitte check ob es wirklich 50 Fragen sind mit likert skalen im Fragebogen
4. Item-Deskriptivstatistiken + Export (Qualitätscheck)
@Hannah: Die missing values hier sind von denen die zwar ein paar Likert Fragen beantwortet haben aber nicht diese Fragen
# --- 1. Die Tabelle (Soziodemografie) ---
stichprobe_tabelle <- df %>%
select(
wie_alt_sind_sie,
wie_viele_jahre_berufserfahrung_haben_sie_insgesamt_im_schulischen_oder_padagogischen_bereich,
in_welchem_kanton_arbeiten_sie_aktuell_uberwiegend,
in_welcher_funktion_arbeiten_sie_uberwiegend,
auf_welcher_schulstufe_arbeiten_sie_uberwiegend,
in_welchem_schulischen_setting_arbeiten_sie
) %>%
tbl_summary(
missing = "ifany",
label = list(
wie_alt_sind_sie ~ "Alter",
wie_viele_jahre_berufserfahrung_haben_sie_insgesamt_im_schulischen_oder_padagogischen_bereich ~ "Berufserfahrung (Jahre)",
in_welchem_kanton_arbeiten_sie_aktuell_uberwiegend ~ "Kanton",
in_welcher_funktion_arbeiten_sie_uberwiegend ~ "Funktion",
auf_welcher_schulstufe_arbeiten_sie_uberwiegend ~ "Schulstufe",
in_welchem_schulischen_setting_arbeiten_sie ~ "Schulisches Setting"
),
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"
)
) %>%
bold_labels() %>%
italicize_levels() %>%
modify_header(label = "**Merkmal**") %>%
# Stabiler Weg für die Beschriftung:
as_gt() %>%
tab_header(title = md("**Tabelle 1: Soziodemografische Merkmale der Stichprobe (N = 334)**"))
# Tabelle anzeigen
stichprobe_tabelle
| Tabelle 1: Soziodemografische Merkmale der Stichprobe (N = 334) | |
| Merkmal | N = 3341 |
|---|---|
| Alter | |
| 25 bis 34 | 96 (35%) |
| 35 bis 44 | 100 (37%) |
| 45 bis 54 | 61 (23%) |
| 55 und älter | 12 (4.4%) |
| unter 25 | 2 (0.7%) |
| Unknown | 63 |
| Berufserfahrung (Jahre) | |
| 2 bis 5 Jahre | 54 (20%) |
| 6 bis 10 Jahre | 77 (28%) |
| mehr als 10 Jahre | 132 (49%) |
| weniger als 2 Jahre | 8 (3.0%) |
| Unknown | 63 |
| Kanton | |
| Appenzell Ausserhoden | 6 (2.2%) |
| Appenzell Innerrhoden | 1 (0.4%) |
| Argau | 19 (7.1%) |
| Basel Land | 3 (1.1%) |
| Basel Stadt | 2 (0.7%) |
| Bern | 4 (1.5%) |
| Glarus | 2 (0.7%) |
| Graubünden | 20 (7.4%) |
| Luzern | 1 (0.4%) |
| Obwalden | 1 (0.4%) |
| Schaffhausen | 9 (3.3%) |
| Schwyz | 6 (2.2%) |
| Solothurn | 3 (1.1%) |
| St. Gallen | 46 (17%) |
| Thurgau | 14 (5.2%) |
| Wallis | 2 (0.7%) |
| Zug | 2 (0.7%) |
| Zürich | 128 (48%) |
| Unknown | 65 |
| Funktion | |
| anderes | 3 (1.1%) |
| Assistenzperson | 2 (0.7%) |
| DaZ Lehrperson | 2 (0.7%) |
| IF Lehrperson | 30 (11%) |
| Klassenlehrperson | 31 (11%) |
| Schulische Heilpädagogin oder schulischer Heilpädagoge | 202 (75%) |
| Unknown | 64 |
| Schulstufe | |
| Zyklus 1 | 102 (38%) |
| Zyklus 2 | 101 (37%) |
| Zyklus 3 | 42 (16%) |
| Zyklus-/Stufenübergreifendes Setting | 25 (9.3%) |
| Unknown | 64 |
| Schulisches Setting | |
| Privatschule | 5 (1.9%) |
| Regelschule | 231 (86%) |
| Sonderschule oder heilpädagogische Schule | 34 (13%) |
| Unknown | 64 |
| 1 n (%) | |
# --- 2. Die Plots (Visualisierung) ---
kat_vars <- c("in_welchem_kanton_arbeiten_sie_aktuell_uberwiegend",
"in_welcher_funktion_arbeiten_sie_uberwiegend",
"auf_welcher_schulstufe_arbeiten_sie_uberwiegend",
"in_welchem_schulischen_setting_arbeiten_sie")
# Loop für die kategorialen Plots
for (var in kat_vars) {
# Titel hübsch machen: Unterstriche weg, erster Buchstabe groß
clean_title <- gsub("_", " ", var)
clean_title <- paste0(toupper(substr(clean_title, 1, 1)), substr(clean_title, 2, nchar(clean_title)))
p <- df %>%
count(!!sym(var)) %>%
filter(!is.na(!!sym(var))) %>%
ggplot(aes(x = reorder(!!sym(var), n), y = n)) +
geom_col(fill = "steelblue", color = "white") +
# Text-Labels auf die Balken (optional, für bessere Lesbarkeit)
geom_text(aes(label = n), hjust = -0.2, size = 3.5) +
coord_flip() +
theme_minimal(base_size = 12) +
labs(
title = clean_title,
x = "",
y = "Anzahl Teilnehmende (n)"
) +
theme(
plot.title = element_text(face = "bold", size = 11),
panel.grid.minor = element_blank()
)
print(p)
}
pro Variabel: N, Missing, Mean, SD usw. –> die deskriptive übersicht zu den gebildeten indizes und skalen inkl. Schiefe und Kurtosis ist am Ende vor der Korrelationsanalyse
desc_stats <- df_num %>%
select(all_of(num_cols)) %>%
pivot_longer(everything(), names_to = "variable", values_to = "value") %>%
group_by(variable) %>%
summarise(
N_valid = sum(!is.na(value)),
Missing = sum(is.na(value)),
Mean = mean(value, na.rm = TRUE),
SD = sd(value, na.rm = TRUE),
Median = median(value, na.rm = TRUE),
Q25 = quantile(value, 0.25, na.rm = TRUE),
Q75 = quantile(value, 0.75, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(across(where(is.numeric), ~round(.x, 3))) %>%
arrange(variable)
kable(desc_stats, caption = "Deskriptive Werte pro Variabel")
| variable | N_valid | Missing | Mean | SD | Median | Q25 | Q75 |
|---|---|---|---|---|---|---|---|
| num_die_kantonalen_vorgaben_helfen_mir_meine_rolle_gegenuber_eltern_einzuordnen | 301 | 33 | 2.040 | 1.555 | 2 | 0.00 | 3 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_bei_der_sicherstellung_einer_guten_kommunikation_zwischen_schule_und_elternhaus | 283 | 51 | 3.205 | 1.085 | 3 | 2.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_bereich_gesprachsfuhrung_und_beratung | 283 | 51 | 3.216 | 1.123 | 3 | 2.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_fuhren_von_anspruchsvollen_oder_konfliktgeladenen_elterngesprachen | 284 | 50 | 3.736 | 0.993 | 4 | 3.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_sprachlich_oder_kulturell_vielfaltigen_elternhausern | 284 | 50 | 3.549 | 1.084 | 4 | 3.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_unterschiedlichen_erwartungen_von_eltern_lehrpersonen_und_schule | 283 | 51 | 3.622 | 1.039 | 4 | 3.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_bezug_auf_das_verstandnis_der_kantonalen_vorgaben_zur_elternzusammenarbeit | 283 | 51 | 3.371 | 1.197 | 3 | 3.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_klarung_von_rollen_und_zustandigkeiten_in_der_zusammenarbeit_mit_eltern | 284 | 50 | 3.225 | 1.152 | 3 | 2.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_planung_und_strukturierung_von_elternkontakten | 283 | 51 | 2.901 | 1.100 | 3 | 2.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_zusammenarbeit_im_multiprofessionellen_team_im_kontext_der_elternarbeit | 283 | 51 | 3.463 | 1.099 | 3 | 3.00 | 4 |
| num_entwicklungsbedarf_ich_sehe_insgesamt_personlichen_entwicklungsbedarf_in_der_elternzusammenarbeit | 283 | 51 | 2.975 | 1.046 | 3 | 2.00 | 4 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_eine_gute_zusammenarbeit_mit_der_klassenlehrperson_wirkt_sich_positiv_auf_die_elternarbeit_aus | 295 | 39 | 4.732 | 0.501 | 5 | 5.00 | 5 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_eine_wertschatzende_grundhaltung_seitens_der_eltern_unterstutzt_die_zusammenarbeit | 295 | 39 | 4.854 | 0.399 | 5 | 5.00 | 5 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_genugend_zeitliche_ressourcen_fordern_eine_gute_zusammenarbeit | 295 | 39 | 4.651 | 0.626 | 5 | 4.00 | 5 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_klare_absprachen_im_team_unterstutzen_mich_in_der_zusammenarbeit_mit_eltern | 295 | 39 | 4.285 | 0.804 | 4 | 4.00 | 5 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_verbindliche_gefasse_wie_elterngesprache_erleichtern_mir_die_zusammenarbeit_mit_eltern | 295 | 39 | 4.186 | 0.805 | 4 | 4.00 | 5 |
| num_forderliche_faktoren_in_der_elternzusammenarbeit_wechselseitige_kontaktangebote_schule_und_eltern_konnen_aktiv_aufeinander_zugehen_fordern_die_zusammenarbeit | 295 | 39 | 4.414 | 0.732 | 5 | 4.00 | 5 |
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 313 | 21 | 2.898 | 1.314 | 3 | 2.00 | 4 |
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 313 | 21 | 2.099 | 0.594 | 2 | 2.00 | 2 |
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 313 | 21 | 3.508 | 1.104 | 3 | 3.00 | 5 |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 313 | 21 | 1.732 | 0.858 | 2 | 1.00 | 2 |
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 313 | 21 | 1.514 | 0.797 | 1 | 1.00 | 2 |
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | 313 | 21 | 2.086 | 0.790 | 2 | 2.00 | 3 |
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 313 | 21 | 3.435 | 1.433 | 4 | 2.00 | 5 |
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 313 | 21 | 3.083 | 1.163 | 3 | 2.00 | 4 |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 313 | 21 | 3.872 | 1.343 | 4 | 3.00 | 5 |
| num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ein_einseitiger_informationsfluss_fuhrt_manchmal_zu_unsicherheiten_in_der_zusammenarbeit | 301 | 33 | 3.445 | 1.081 | 4 | 3.00 | 4 |
| num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_als_shp_sicher_im_umgang_mit_herausfordernden_situationen_mit_eltern | 301 | 33 | 3.542 | 0.907 | 4 | 3.00 | 4 |
| num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_sicher_im_fuhren_von_elterngesprachen | 301 | 33 | 4.053 | 0.823 | 4 | 4.00 | 5 |
| num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_weiss_welche_aufgaben_ich_als_shp_in_der_elternzusammenarbeit_habe | 301 | 33 | 3.781 | 0.951 | 4 | 3.00 | 4 |
| num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_kommunikation_zwischen_shp_klassenlehrpersonen_und_anderen_fachpersonen_ist_gut_koordiniert | 271 | 63 | 3.498 | 1.095 | 4 | 3.00 | 4 |
| num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_multiprofessionelle_zusammenarbeit_tragt_zu_einer_besseren_abstimmung_im_umgang_mit_eltern_bei | 271 | 63 | 3.867 | 0.972 | 4 | 3.00 | 5 |
| num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_rolle_der_shp_im_kontakt_mit_eltern_ist_im_team_klar_definiert | 271 | 63 | 3.122 | 1.237 | 3 | 2.00 | 4 |
| num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_elternarbeit_wird_im_team_als_gemeinsame_aufgabe_verstanden | 271 | 63 | 3.506 | 1.167 | 4 | 3.00 | 4 |
| num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_in_meinem_team_ist_klar_geregelt_wer_in_welchen_situationen_den_kontakt_mit_eltern_ubernimmt | 272 | 62 | 3.338 | 1.144 | 3 | 2.75 | 4 |
| num_partizipation_und_einbindung_von_eltern_an_der_zusammensarbeit_sind_eltern_wie_shp_gleichermassen_beteiligt | 275 | 59 | 3.495 | 1.034 | 4 | 3.00 | 4 |
| num_partizipation_und_einbindung_von_eltern_die_schule_informiert_eltern_transparent_uber_ziele_ablaufe_und_erwartungen | 275 | 59 | 3.909 | 0.843 | 4 | 3.00 | 5 |
| num_partizipation_und_einbindung_von_eltern_eltern_erhalten_gelegenheiten_sich_aktiv_an_der_zusammenarbeit_zu_beteiligen | 275 | 59 | 3.858 | 0.927 | 4 | 3.00 | 5 |
| num_partizipation_und_einbindung_von_eltern_eltern_werden_in_schulische_entscheidungen_einbezogen_die_ihr_kind_betreffen | 275 | 59 | 4.073 | 0.864 | 4 | 4.00 | 5 |
| num_partizipation_und_einbindung_von_eltern_ich_erlebe_dass_eltern_ihre_sichtweisen_einbringen_konnen | 275 | 59 | 3.935 | 0.843 | 4 | 3.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_die_bisherigen_elternkontakte_habe_ich_uberwiegend_als_konstruktiv_erlebt | 288 | 46 | 4.052 | 0.663 | 4 | 4.00 | 4 |
| num_qualitat_der_bisherigen_elternkontakte_die_inhalte_und_absprachen_in_den_elternkontakten_waren_klar_und_nachvollziehbar | 288 | 46 | 4.142 | 0.633 | 4 | 4.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_die_zusammenarbeit_mit_eltern_verlief_in_der_regel_respektvoll_und_wertschatzend | 288 | 46 | 4.222 | 0.630 | 4 | 4.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_die_zusammenarbeit_mit_eltern_war_uber_verschiedene_kontaktformen_hinweg_mehrheitlich_positiv | 288 | 46 | 4.215 | 0.615 | 4 | 4.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_ich_erhalte_bei_elternkontakten_ausreichend_gelegenheit_meine_fachliche_perspektive_einzubringen | 288 | 46 | 4.108 | 0.796 | 4 | 4.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_ich_hatte_das_gefuhl_dass_meine_rolle_in_der_zusammenarbeit_von_den_eltern_ernst_genommen_wurde | 288 | 46 | 4.257 | 0.716 | 4 | 4.00 | 5 |
| num_qualitat_der_bisherigen_elternkontakte_insgesamt_bin_ich_mit_der_qualitat_der_bisher_erlebten_elternkontakte_zufrieden | 288 | 46 | 4.101 | 0.684 | 4 | 4.00 | 5 |
| num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden | 334 | 0 | 2.557 | 0.832 | 3 | 3.00 | 3 |
| num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt | 334 | 0 | 3.749 | 0.909 | 4 | 3.00 | 4 |
| num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus | 333 | 1 | 3.724 | 0.837 | 4 | 3.00 | 4 |
write.xlsx(list(Descriptives_Items = desc_stats),
file = "descriptive_statistics_items.xlsx",
overwrite = TRUE)
Wichtig: Das globale Item „Insgesamt bin ich zufrieden…“ wird nicht in die Qualitätsskala integriert, sondern separat als Zufriedenheit behandelt.
quality_vars <- c(
"num_qualitat_der_bisherigen_elternkontakte_die_bisherigen_elternkontakte_habe_ich_uberwiegend_als_konstruktiv_erlebt",
"num_qualitat_der_bisherigen_elternkontakte_die_zusammenarbeit_mit_eltern_verlief_in_der_regel_respektvoll_und_wertschatzend",
"num_qualitat_der_bisherigen_elternkontakte_ich_hatte_das_gefuhl_dass_meine_rolle_in_der_zusammenarbeit_von_den_eltern_ernst_genommen_wurde",
"num_qualitat_der_bisherigen_elternkontakte_die_inhalte_und_absprachen_in_den_elternkontakten_waren_klar_und_nachvollziehbar",
"num_qualitat_der_bisherigen_elternkontakte_die_zusammenarbeit_mit_eltern_war_uber_verschiedene_kontaktformen_hinweg_mehrheitlich_positiv",
"num_qualitat_der_bisherigen_elternkontakte_ich_erhalte_bei_elternkontakten_ausreichend_gelegenheit_meine_fachliche_perspektive_einzubringen"
)
zufriedenheit_item <- "num_qualitat_der_bisherigen_elternkontakte_insgesamt_bin_ich_mit_der_qualitat_der_bisher_erlebten_elternkontakte_zufrieden"
partizipation_vars <- c(
"num_partizipation_und_einbindung_von_eltern_eltern_werden_in_schulische_entscheidungen_einbezogen_die_ihr_kind_betreffen",
"num_partizipation_und_einbindung_von_eltern_eltern_erhalten_gelegenheiten_sich_aktiv_an_der_zusammenarbeit_zu_beteiligen",
"num_partizipation_und_einbindung_von_eltern_die_schule_informiert_eltern_transparent_uber_ziele_ablaufe_und_erwartungen",
"num_partizipation_und_einbindung_von_eltern_ich_erlebe_dass_eltern_ihre_sichtweisen_einbringen_konnen",
"num_partizipation_und_einbindung_von_eltern_an_der_zusammensarbeit_sind_eltern_wie_shp_gleichermassen_beteiligt"
)
alpha_quality <- psych::alpha(df_num[, quality_vars])
alpha_part <- psych::alpha(df_num[, partizipation_vars])
df_num$qualitaet_elternkontakte_index <- rowMeans(df_num[, quality_vars], na.rm = TRUE)
df_num$partizipation_index <- rowMeans(df_num[, partizipation_vars], na.rm = TRUE)
df_num$zufriedenheit_elternkontakte <- df_num[[zufriedenheit_item]]
alpha_table <- data.frame(
Scale = c("Qualität (ohne Zufriedenheit)", "Partizipation"),
N_items = c(length(quality_vars), length(partizipation_vars)),
Alpha = c(round(alpha_quality$total$raw_alpha, 3),
round(alpha_part$total$raw_alpha, 3)),
Mean = c(round(alpha_quality$total$mean, 3),
round(alpha_part$total$mean, 3)),
SD = c(round(alpha_quality$total$sd, 3),
round(alpha_part$total$sd, 3))
)
kable(alpha_table, caption = "Reliabilität (Cronbach’s Alpha): Qualität & Partizipation")
| Scale | N_items | Alpha | Mean | SD |
|---|---|---|---|---|
| Qualität (ohne Zufriedenheit) | 6 | 0.832 | 4.166 | 0.500 |
| Partizipation | 5 | 0.792 | 3.854 | 0.669 |
qps_desc <- data.frame(
Variable = c("Qualität (Index, ohne Zufriedenheit)",
"Partizipation (Index)",
"Zufriedenheit (Single Item)"),
Mean = c(mean(df_num$qualitaet_elternkontakte_index, na.rm=TRUE),
mean(df_num$partizipation_index, na.rm=TRUE),
mean(df_num$zufriedenheit_elternkontakte, na.rm=TRUE)),
SD = c(sd(df_num$qualitaet_elternkontakte_index, na.rm=TRUE),
sd(df_num$partizipation_index, na.rm=TRUE),
sd(df_num$zufriedenheit_elternkontakte, na.rm=TRUE)),
Min = c(min(df_num$qualitaet_elternkontakte_index, na.rm=TRUE),
min(df_num$partizipation_index, na.rm=TRUE),
min(df_num$zufriedenheit_elternkontakte, na.rm=TRUE)),
Max = c(max(df_num$qualitaet_elternkontakte_index, na.rm=TRUE),
max(df_num$partizipation_index, na.rm=TRUE),
max(df_num$zufriedenheit_elternkontakte, na.rm=TRUE))
)
qps_desc[, -1] <- round(qps_desc[, -1], 2)
kable(qps_desc, caption = "Deskriptive Kennwerte: Qualität, Partizipation, Zufriedenheit")
| Variable | Mean | SD | Min | Max |
|---|---|---|---|---|
| Qualität (Index, ohne Zufriedenheit) | 4.17 | 0.50 | 2.33 | 5 |
| Partizipation (Index) | 3.85 | 0.67 | 1.40 | 5 |
| Zufriedenheit (Single Item) | 4.10 | 0.68 | 2.00 | 5 |
# Histogramm für die Qualität der Elternkontakte
ggplot(df_num, aes(x = qualitaet_elternkontakte_index)) +
# Balken in 0.5er Schritten
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
# Mittelwertslinie (M = 4.13 laut deinem Output)
geom_vline(aes(xintercept = mean(qualitaet_elternkontakte_index, na.rm = TRUE)),
color = "red", linetype = "dashed", size = 1) +
# Skala fixieren
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Erlebte Qualität der Elternkontakte",
subtitle = paste("Mittelwert (rot):",
round(mean(df_num$qualitaet_elternkontakte_index, na.rm=T), 2)),
x = "Indexwert (1 = sehr geringe erlebte Qualität, 5 = sehr hohe erlebte Qualität)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
# Histogramm für den Zufriedenheits-Index
ggplot(df_num, aes(x = zufriedenheit_elternkontakte)) +
# Balken in 0.5er Schritten (steelblue wie gewünscht)
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
# Rote gestrichelte Linie für den Mittelwert
geom_vline(aes(xintercept = mean(zufriedenheit_elternkontakte, na.rm = TRUE)),
color = "red", linetype = "dashed", size = 1) +
# Skala von 1 bis 5 fixieren
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Allgemeine Zufriedenheit",
subtitle = paste("Mittelwert (rot):",
round(mean(df_num$zufriedenheit_elternkontakte, na.rm=T), 2)),
x = "Indexwert (1 = sehr unzufrieden, 5 = sehr zufrieden)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
# Histogramm für den Partizipations-Index
ggplot(df_num, aes(x = partizipation_index)) +
# Balken in 0.5er Schritten (ebenfalls in steelblue für ein einheitliches Design)
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
# Rote gestrichelte Linie für den Mittelwert
geom_vline(aes(xintercept = mean(partizipation_index, na.rm = TRUE)),
color = "red", linetype = "dashed", size = 1) +
# Skala von 1 bis 5 fixieren
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Partizipation der Eltern",
subtitle = paste("Mittelwert (rot):",
round(mean(df_num$partizipation_index, na.rm=T), 2)),
x = "Indexwert (1 = keine Partizipation, 5 = hohe Partizipation)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
@Hannah: Die Skala zur Qualität der Elternkontakte (ohne globales Zufriedenheitsitem) weist mit Cronbach’s α = .83 eine gute interne Konsistenz auf. Damit erfüllen die sechs Items die gängige Schwelle für eine zuverlässige Skalenbildung (α ≥ .70). Die hohe Reliabilität deutet darauf hin, dass die Items konsistent dasselbe Konstrukt – die wahrgenommene Qualität der Zusammenarbeit mit Eltern – erfassen. Der Mittelwert von M = 4.17 (SD = 0.50) liegt deutlich im oberen Skalenbereich (1–5) und zeigt, dass die Qualität der Elternkontakte insgesamt sehr positiv eingeschätzt wird. Die relativ geringe Standardabweichung weist zudem auf eine vergleichsweise homogene Bewertung innerhalb der Stichprobe hin.
Die Skala zur Partizipation erreicht mit Cronbach’s α = .79 ebenfalls eine gute interne Konsistenz. Auch hier kann somit von einer reliablen Messung des zugrunde liegenden Konstrukts ausgegangen werden. Der Mittelwert von M = 3.85 (SD = 0.67) liegt über dem theoretischen Skalenmittelpunkt, was auf eine insgesamt positive Wahrnehmung der Einbindung und Beteiligung von Eltern hindeutet. Gleichzeitig zeigt die etwas höhere Standardabweichung im Vergleich zur Qualitätsskala, dass die Einschätzungen zur Partizipation stärker variieren.
Insgesamt sprechen die Reliabilitätswerte dafür, beide Konstrukte als eigenständige, intern konsistente Skalen in die weiteren Analysen einzubeziehen.
foerderliche_vars <- c(
"num_forderliche_faktoren_in_der_elternzusammenarbeit_verbindliche_gefasse_wie_elterngesprache_erleichtern_mir_die_zusammenarbeit_mit_eltern",
"num_forderliche_faktoren_in_der_elternzusammenarbeit_klare_absprachen_im_team_unterstutzen_mich_in_der_zusammenarbeit_mit_eltern",
"num_forderliche_faktoren_in_der_elternzusammenarbeit_eine_gute_zusammenarbeit_mit_der_klassenlehrperson_wirkt_sich_positiv_auf_die_elternarbeit_aus",
"num_forderliche_faktoren_in_der_elternzusammenarbeit_wechselseitige_kontaktangebote_schule_und_eltern_konnen_aktiv_aufeinander_zugehen_fordern_die_zusammenarbeit",
"num_forderliche_faktoren_in_der_elternzusammenarbeit_eine_wertschatzende_grundhaltung_seitens_der_eltern_unterstutzt_die_zusammenarbeit",
"num_forderliche_faktoren_in_der_elternzusammenarbeit_genugend_zeitliche_ressourcen_fordern_eine_gute_zusammenarbeit"
)
alpha_foerderlich <- psych::alpha(df_num[, foerderliche_vars])
df_num$foerderliche_faktoren_index <- rowMeans(df_num[, foerderliche_vars], na.rm = TRUE)
foerd_table <- data.frame(
Scale="Förderliche Faktoren",
N_items=length(foerderliche_vars),
Alpha=round(alpha_foerderlich$total$raw_alpha, 3),
Mean=round(mean(df_num$foerderliche_faktoren_index, na.rm=TRUE),2),
SD=round(sd(df_num$foerderliche_faktoren_index, na.rm=TRUE),2),
Min=round(min(df_num$foerderliche_faktoren_index, na.rm=TRUE),2),
Max=round(max(df_num$foerderliche_faktoren_index, na.rm=TRUE),2)
)
kable(foerd_table, caption="Förderliche Faktoren: Reliabilität & Deskriptive")
| Scale | N_items | Alpha | Mean | SD | Min | Max |
|---|---|---|---|---|---|---|
| Förderliche Faktoren | 6 | 0.67 | 4.52 | 0.41 | 3 | 5 |
# Histogram for the index showing the ceiling effect
ggplot(df_num, aes(x = foerderliche_faktoren_index)) +
geom_histogram(binwidth = 0.2, fill = "steelblue", color = "white") +
theme_minimal() +
labs(title = "Verteilung Förderliche Faktoren",
subtitle = "Deckeneffekt > 4.5",
x = "Index Value (1-5)",
y = "Frequency") +
geom_vline(aes(xintercept = mean(foerderliche_faktoren_index, na.rm = TRUE)),
color = "red", linetype = "dashed")
@Hannah: Die Skala „Förderliche Faktoren“ weist eine akzeptable interne Konsistenz auf (α = .67). Die relativ hohe mittlere Zustimmung (M = 4.52) und geringe Streuung deuten auf einen Deckeneffekt hin, der die interne Konsistenz leicht reduziert haben könnte. Auf eine explorative Faktorenanalyse der Skala „Förderliche Faktoren“ wurde verzichtet, da die Items inhaltlich klar einer gemeinsamen Dimension zugeordnet werden können und die Item-Gesamtkorrelationen durchgehend akzeptable Werte aufweisen.
Ein Deckeneffekt kann die Varianz der Variable reduzieren und dadurch die Stärke statistischer Zusammenhänge unterschätzen. Gleichzeitig ist die hohe Zustimmung inhaltlich plausibel, da viele der abgefragten Aspekte (z. B. wertschätzende Haltung oder gute Zusammenarbeit im Team) normative Erwartungen an schulische Zusammenarbeit widerspiegeln
ggplot(df_num, aes(x = num_die_kantonalen_vorgaben_helfen_mir_meine_rolle_gegenuber_eltern_einzuordnen)) +
# Wir setzen die Balken so, dass die 0 separat steht
geom_histogram(breaks = seq(-0.5, 5.5, by = 1),
fill = "steelblue",
color = "white") +
# Eine Linie beim Mittelwert (der durch die Nullen nach unten gezogen wird)
geom_vline(aes(xintercept = mean(num_die_kantonalen_vorgaben_helfen_mir_meine_rolle_gegenuber_eltern_einzuordnen, na.rm = TRUE)),
color = "black", linetype = "dashed", size = 1) +
# Skala von 0 bis 5
scale_x_continuous(breaks = 0:5, labels = c("0\n(Keine Ahnung)", "1", "2", "3", "4", "5")) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Nutzen der kantonalen Vorgaben",
subtitle = "Inklusive Antwortkategorie 'Ich weiss es nicht' (als 0 gewertet)",
x = "Bewertung (0 = Unkenntnis, 1-5 = Grad der Hilfreichkeit)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
axis.title.x = element_text(margin = margin(t = 10))
)
df_num$kantonale_vorgaben <- df_num$num_die_kantonalen_vorgaben_helfen_mir_meine_rolle_gegenuber_eltern_einzuordnen
kanton_desc <- data.frame(
Variable="Kantonale Vorgaben (Single Item; 0=Unkenntnis)",
Mean=mean(df_num$kantonale_vorgaben, na.rm=TRUE),
SD=sd(df_num$kantonale_vorgaben, na.rm=TRUE),
Min=min(df_num$kantonale_vorgaben, na.rm=TRUE),
Max=max(df_num$kantonale_vorgaben, na.rm=TRUE)
)
kanton_desc[, -1] <- round(kanton_desc[, -1], 2)
kable(kanton_desc, caption="Deskriptive: Kantonale Vorgaben")
| Variable | Mean | SD | Min | Max |
|---|---|---|---|---|
| Kantonale Vorgaben (Single Item; 0=Unkenntnis) | 2.04 | 1.56 | 0 | 5 |
@Hannah:
Das Einzelitem zur Einschätzung der kantonalen Vorgaben weist einen Mittelwert von M = 2.04 (SD = 1.56) auf. Der Wert liegt deutlich unter dem theoretischen Skalenmittelpunkt (3), was darauf hindeutet, dass die kantonalen Vorgaben insgesamt eher als wenig unterstützend wahrgenommen werden oder von einem Teil der Befragten nicht bekannt sind.
Die relativ hohe Standardabweichung zeigt zudem eine ausgeprägte Streuung der Antworten. Dies deutet darauf hin, dass die Einschätzungen stark variieren: Während einige Befragte die Vorgaben als hilfreich erleben, geben andere an, diese nicht zu kennen (Wert 0) oder als wenig unterstützend einzuschätzen. Der niedrige Mittelwert von M = 2.04 bei den kantonalen Vorgaben resultiert teilweise daraus, dass die Unkenntnis der Vorgaben (Wert 0) als strukturelles Orientierungsdefizit gewertet wurde.
Da die Kategorie „Vorgaben nicht bekannt / kann ich nicht beurteilen“ als 0 kodiert wurde, spiegelt der niedrige Mittelwert nicht nur eine kritische Bewertung, sondern auch eine mögliche strukturelle Informationslücke wider. Insgesamt weist dieses Ergebnis auf ein heterogenes und potenziell entwicklungsrelevantes Feld im Bereich der formalen Rahmenbedingungen hin.
**ACHTUNG: Das kodieren mit 0 müsst ihr euch gut überlegen und in eurer Thesis für/gegen argumentieren. Am besten fragt ihr eure Betreuerin. Ein Auschluss der Daten würde den Mittelwert und die Korrelationen beeinflussen
# 1) Items definieren (Originalnamen aus df_num)
handlung_items <- c(
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_sicher_im_fuhren_von_elterngesprachen",
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_weiss_welche_aufgaben_ich_als_shp_in_der_elternzusammenarbeit_habe",
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ein_einseitiger_informationsfluss_fuhrt_manchmal_zu_unsicherheiten_in_der_zusammenarbeit",
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_als_shp_sicher_im_umgang_mit_herausfordernden_situationen_mit_eltern"
)
# 2) Negativ formuliertes Item reverse-coden:
# "Ein einseitiger Informationsfluss führt ... zu Unsicherheiten" (mehr Zustimmung = mehr Unsicherheit)
neg_item <- "num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ein_einseitiger_informationsfluss_fuhrt_manchmal_zu_unsicherheiten_in_der_zusammenarbeit"
# Reverse für 1–5 Skala: 6 - x
df_num[[paste0(neg_item, "_rev")]] <- 6 - df_num[[neg_item]]
# 3) Finales Item-Set für die Skala (mit _rev statt Original)
handlung_vars_rev <- c(
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_sicher_im_fuhren_von_elterngesprachen",
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_weiss_welche_aufgaben_ich_als_shp_in_der_elternzusammenarbeit_habe",
paste0(neg_item, "_rev"),
"num_handlungssicherheit_und_kompetenzwahrnehmung_in_bezug_auf_elternzusammenarbeit_ich_fuhle_mich_als_shp_sicher_im_umgang_mit_herausfordernden_situationen_mit_eltern"
)
# 4) Reliabilität (Alpha) + druckreife Tabelle
alpha_handlung <- psych::alpha(df_num[, handlung_vars_rev])
handlung_alpha_table <- data.frame(
Scale = "Handlungssicherheit (4 Items, 1 reverse-coded)",
N_items = length(handlung_vars_rev),
Alpha = round(alpha_handlung$total$raw_alpha, 3),
Mean = round(alpha_handlung$total$mean, 3),
SD = round(alpha_handlung$total$sd, 3)
)
kable(handlung_alpha_table, caption = "Reliabilität: Handlungssicherheit (Cronbach's Alpha)")
| Scale | N_items | Alpha | Mean | SD |
|---|---|---|---|---|
| Handlungssicherheit (4 Items, 1 reverse-coded) | 4 | 0.603 | 3.483 | 0.639 |
# 5) Index bilden (Mittelwert)
df_num$handlungssicherheit_index <- rowMeans(df_num[, handlung_vars_rev], na.rm = TRUE)
# Optional: Index NA setzen, falls 0 Items beantwortet
df_num$handlung_n_valid <- rowSums(!is.na(df_num[, handlung_vars_rev]))
df_num$handlungssicherheit_index[df_num$handlung_n_valid == 0] <- NA
# 6) Deskriptive Tabelle (druckreif)
handlung_desc <- data.frame(
Variable = "Handlungssicherheit (Index)",
Mean = mean(df_num$handlungssicherheit_index, na.rm = TRUE),
SD = sd(df_num$handlungssicherheit_index, na.rm = TRUE),
Min = min(df_num$handlungssicherheit_index, na.rm = TRUE),
Max = max(df_num$handlungssicherheit_index, na.rm = TRUE),
N_valid = sum(!is.na(df_num$handlungssicherheit_index))
)
handlung_desc[, -1] <- round(handlung_desc[, -1], 2)
kable(handlung_desc, caption = "Deskriptive: Handlungssicherheit (Index)")
| Variable | Mean | SD | Min | Max | N_valid |
|---|---|---|---|---|---|
| Handlungssicherheit (Index) | 3.48 | 0.64 | 1.25 | 5 | 301 |
# Histogramm für den Index der Handlungssicherheit
ggplot(df_num, aes(x = handlungssicherheit_index)) +
# Balken in 0.5er Schritten (Farbe Steelblue für Einheitlichkeit)
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
# Rote gestrichelte Linie für den Mittelwert
geom_vline(aes(xintercept = mean(handlungssicherheit_index, na.rm = TRUE)),
color = "red", linetype = "dashed", size = 1) +
# Skala von 1 bis 5 fixieren
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Handlungssicherheit im Berufsalltag",
subtitle = paste("Mittelwert (rot):",
round(mean(df_num$handlungssicherheit_index, na.rm=T), 2)),
x = "Indexwert (1 = sehr unsicher, 5 = sehr sicher)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
@Hannah:
Die Skala zur Handlungssicherheit umfasst vier Items, wobei ein negativ formuliertes Item vor der Skalenbildung invertiert wurde. Die interne Konsistenz beträgt Cronbach’s α = .60 und liegt damit unter der häufig verwendeten Schwelle von .70 für eine gute Reliabilität. Der Wert deutet auf eine eher moderate interne Konsistenz hin.
Dieser Befund ist jedoch differenziert zu betrachten. Zum einen umfasst die Skala lediglich vier Items, wodurch Cronbach’s Alpha tendenziell niedriger ausfällt als bei längeren Skalen. Zum anderen erfassen die Items unterschiedliche Facetten von Handlungssicherheit, etwa Gesprächsführung, Rollenklarheit und den Umgang mit herausfordernden Situationen. Die moderate interne Konsistenz kann somit darauf hindeuten, dass Handlungssicherheit ein mehrdimensionales Konstrukt darstellt und nicht vollständig homogen operationalisiert ist.
Der Mittelwert von M = 3.48 (SD = 0.64) liegt leicht über dem Skalenmittelpunkt, was darauf hindeutet, dass die Befragten ihre Handlungssicherheit insgesamt eher positiv einschätzen. Die Standardabweichung zeigt eine moderate Streuung der Antworten, sodass innerhalb der Stichprobe erkennbare Unterschiede in der wahrgenommenen Sicherheit bestehen.
Insgesamt wird die Skala trotz der moderaten Reliabilität in die weiteren Analysen einbezogen, da sie ein theoretisch zentrales Konstrukt im Zusammenhang mit strukturellen Rahmenbedingungen und Qualität der Elternzusammenarbeit darstellt.
team_vars <- c(
"num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden",
"num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus",
"num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt"
)
alpha_team <- psych::alpha(df_num[, team_vars])
team_alpha_table <- data.frame(
Scale = "Teamstruktur (3 Items)",
N_items = length(team_vars),
Alpha = round(alpha_team$total$raw_alpha, 3),
Mean = round(alpha_team$total$mean, 3),
SD = round(alpha_team$total$sd, 3)
)
kable(team_alpha_table,
caption = "Reliabilität der Teamstruktur-Items (Cronbach's Alpha)")
| Scale | N_items | Alpha | Mean | SD |
|---|---|---|---|---|
| Teamstruktur (3 Items) | 3 | 0.519 | 3.342 | 0.614 |
#plots Histogramme
# 1. Daten vorbereiten: Die drei Teamstruktur-Items auswählen und umbenennen
team_plot_data <- df_num %>%
select(
num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden, num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus, num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt
) %>%
rename(
"Klare Strukturen" = num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden,
"Häufiger Austausch" = num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus,
"Gegenseitige Unterstützung" = num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt
) %>%
# Ins Langformat bringen, damit ggplot sie nebeneinander setzen kann
pivot_longer(cols = everything(), names_to = "Item", values_to = "Wert")
# 2. Die Grafik erstellen
ggplot(team_plot_data, aes(x = Wert)) +
geom_histogram(breaks = seq(0.5, 5.5, by = 1),
fill = "steelblue",
color = "white") +
# Facet_wrap mit ncol=3 setzt sie nebeneinander
facet_wrap(~ Item, ncol = 3) +
scale_x_continuous(breaks = 1:5) +
theme_minimal(base_size = 11) +
labs(
title = "Einzelitems: Teamstruktur",
subtitle = "Verteilung der drei Aspekte der Zusammenarbeit im Team",
x = "Bewertung (1 = trifft gar nicht zu, 5 = trifft voll und ganz zu)",
y = "Anzahl Teilnehmende"
) +
theme(
strip.background = element_rect(fill = "gray95", color = NA),
strip.text = element_text(face = "bold", size = 9),
panel.spacing = unit(1, "lines")
)
@Hannah:
Die drei Items zur Teamstruktur weisen eine interne Konsistenz von Cronbach’s α = .52 auf und liegen damit unter der häufig verwendeten Schwelle von .70 für eine akzeptable Reliabilität. Dieser Wert deutet darauf hin, dass die Items nicht ausreichend homogen sind, um ein einheitliches latentes Konstrukt abzubilden. Die getrennte Darstellung auf dem Histogramm der drei Items zur Teamstruktur verdeutlicht deren inhaltliche Heterogenität, was die Entscheidung stützt, diese als Einzelvariablen in die weitere Analyse einzubeziehen.
Inhaltlich erfassen die drei Items unterschiedliche Aspekte der Teamstruktur: formale organisatorische Strukturen, die Häufigkeit des Austauschs mit Klassenlehrpersonen sowie die wahrgenommene Unterstützung durch das Team. Die geringe interne Konsistenz spricht dafür, dass diese Aspekte zwar thematisch zusammenhängen, jedoch nicht als eindimensionale Skala interpretiert werden können.
Aufgrund der geringen internen Konsistenz wurde auf die Bildung eines Gesamtindex verzichtet. Stattdessen werden die drei Teamstruktur-Items in den weiteren Analysen getrennt berücksichtigt, um die unterschiedlichen Facetten struktureller Rahmenbedingungen differenziert abzubilden.
multi_vars <- c(
"num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_in_meinem_team_ist_klar_geregelt_wer_in_welchen_situationen_den_kontakt_mit_eltern_ubernimmt",
"num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_multiprofessionelle_zusammenarbeit_tragt_zu_einer_besseren_abstimmung_im_umgang_mit_eltern_bei",
"num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_rolle_der_shp_im_kontakt_mit_eltern_ist_im_team_klar_definiert",
"num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_die_kommunikation_zwischen_shp_klassenlehrpersonen_und_anderen_fachpersonen_ist_gut_koordiniert",
"num_multiprofessionelle_zusammenarbeit_in_der_elternarbeit_elternarbeit_wird_im_team_als_gemeinsame_aufgabe_verstanden"
)
alpha_multi <- psych::alpha(df_num[, multi_vars])
df_num$multiprofessionelle_zusammenarbeit_index <- rowMeans(df_num[, multi_vars], na.rm = TRUE)
multi_table <- data.frame(
Scale="Multiprofessionelle Zusammenarbeit",
N_items=length(multi_vars),
Alpha=round(alpha_multi$total$raw_alpha, 3),
Mean=round(mean(df_num$multiprofessionelle_zusammenarbeit_index, na.rm=TRUE),2),
SD=round(sd(df_num$multiprofessionelle_zusammenarbeit_index, na.rm=TRUE),2)
)
kable(multi_table, caption="Multiprofessionelle Zusammenarbeit: Reliabilität & Deskriptive")
| Scale | N_items | Alpha | Mean | SD |
|---|---|---|---|---|
| Multiprofessionelle Zusammenarbeit | 5 | 0.832 | 3.47 | 0.87 |
# Histogramm für die Multiprofessionelle Zusammenarbeit
ggplot(df_num, aes(x = multiprofessionelle_zusammenarbeit_index)) +
# Balken in steelblue (0.5er Schritte für feine Verteilung)
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
# Rote gestrichelte Linie für den Mittelwert
geom_vline(aes(xintercept = mean(multiprofessionelle_zusammenarbeit_index, na.rm = TRUE)),
color = "red", linetype = "dashed", size = 1) +
# Skala von 1 bis 5 fixieren
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Verteilung: Multiprofessionelle Zusammenarbeit",
subtitle = paste("Mittelwert (rot):",
round(mean(df_num$multiprofessionelle_zusammenarbeit_index, na.rm=T), 2)),
x = "Indexwert (1 = sehr schlecht, 5 = sehr gut)",
y = "Anzahl Teilnehmende"
) +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
@Hannah:
Die Skala zur multiprofessionellen Zusammenarbeit umfasst fünf Items und weist mit Cronbach’s α = .83 eine gute interne Konsistenz auf. Der Alpha-Wert liegt deutlich über der gängigen Schwelle von .70 und spricht dafür, dass die Items konsistent ein gemeinsames Konstrukt erfassen. Somit kann die Skala als reliabel angesehen und als Mittelwertindex in die weiteren Analysen einbezogen werden.
Der Mittelwert beträgt M = 3.47 (SD = 0.87) auf einer Skala von 1 bis 5. Damit liegt die durchschnittliche Einschätzung leicht über dem theoretischen Skalenmittelpunkt, was auf eine tendenziell positive, jedoch nicht durchgehend sehr hohe Bewertung der multiprofessionellen Zusammenarbeit hindeutet. Die vergleichsweise hohe Standardabweichung zeigt zudem eine deutliche Streuung der Antworten, sodass innerhalb der Stichprobe Unterschiede in der wahrgenommenen Qualität der Zusammenarbeit bestehen.
Insgesamt deuten die Ergebnisse darauf hin, dass multiprofessionelle Zusammenarbeit als struktureller Rahmenfaktor eine relevante, aber variabel ausgeprägte Dimension der Elternzusammenarbeit darstellt. Aufgrund der guten Reliabilität eignet sich die Skala als zentraler Strukturindikator für die weiteren Korrelations- und Regressionsanalysen.
# -----------------------------
# 1) Select contact variables (from df_num)
# -----------------------------
contact_vars <- c(
"num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen",
"num_formen_und_haufigkeiten_der_elternkontakte_elternabende",
"num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache",
"num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche",
"num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a",
"num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage",
"num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft",
"num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt",
"num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc"
)
contact_vars <- intersect(contact_vars, names(df_num))
contact_data <- df_num[, contact_vars, drop = FALSE]
# Optional: Missingness overview
miss_tbl <- data.frame(
Variable = names(contact_data),
Missing = colSums(is.na(contact_data))
)
kable(miss_tbl, caption = "Missing values per contact item")
| Variable | Missing | |
|---|---|---|
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 21 |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 21 |
# -----------------------------
# 2) KMO (on raw data)
# -----------------------------
kmo_result <- psych::KMO(contact_data)
kmo_table <- data.frame(
Measure = c("Overall KMO (MSA)", names(kmo_result$MSAi)),
Value = c(as.numeric(kmo_result$MSA), as.numeric(kmo_result$MSAi))
)
kmo_table$Value <- round(kmo_table$Value, 3)
kable(kmo_table, caption = "KMO Measure of Sampling Adequacy (Contact forms)")
| Measure | Value |
|---|---|
| Overall KMO (MSA) | 0.718 |
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 0.783 |
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 0.728 |
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 0.705 |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 0.744 |
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 0.694 |
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | 0.716 |
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 0.636 |
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 0.711 |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 0.727 |
# -----------------------------
# 3) Polychoric correlation + Bartlett test
# -----------------------------
poly_out <- psych::polychoric(contact_data)
poly_cor <- poly_out$rho
bart <- psych::cortest.bartlett(poly_cor, n = nrow(contact_data))
bart_table <- data.frame(
Chi_Square = round(bart$chisq, 2),
df = bart$df,
p_value = format(bart$p.value, scientific = TRUE)
)
kable(bart_table, caption = "Bartlett Test of Sphericity (polychoric R)")
| Chi_Square | df | p_value |
|---|---|---|
| 459.46 | 36 | 7.127205e-75 |
# -----------------------------
# 4) Parallel analysis (CONSISTENT: on polychoric matrix)
# -----------------------------
fa.parallel(poly_cor, n.obs = nrow(contact_data), fa = "fa", fm = "minres")
## Parallel analysis suggests that the number of factors = 3 and the number of components = NA
# -----------------------------
# 5) Fit EFA models (2 and 3 factors)
# -----------------------------
fa2 <- psych::fa(poly_cor, nfactors = 2, rotate = "oblimin", fm = "minres")
fa3 <- psych::fa(poly_cor, nfactors = 3, rotate = "oblimin", fm = "minres")
make_loading_tables <- function(fa_obj, title_prefix = "EFA") {
# Full loadings
L <- as.data.frame(unclass(fa_obj$loadings))
L$h2 <- fa_obj$communality
L <- round(L, 3)
L$Item <- rownames(L)
L <- L[, c("Item", setdiff(names(L), "Item"))]
# Filtered loadings (>= .30)
Lf <- L
num_cols <- setdiff(names(Lf), "Item")
for (cc in num_cols) {
Lf[[cc]] <- ifelse(abs(Lf[[cc]]) < 0.30, "", sprintf("%.3f", Lf[[cc]]))
}
# Variance explained
nf <- fa_obj$factors
V <- data.frame(
Factor = paste0("F", 1:nf),
SS_Loadings = round(fa_obj$Vaccounted["SS loadings", 1:nf], 3),
Proportion_Var = round(fa_obj$Vaccounted["Proportion Var", 1:nf], 3),
Cumulative_Var = round(fa_obj$Vaccounted["Cumulative Var", 1:nf], 3)
)
# Phi (factor correlations)
Phi <- NULL
if (!is.null(fa_obj$Phi)) {
Phi <- round(fa_obj$Phi, 3)
}
list(L = L, Lf = Lf, V = V, Phi = Phi)
}
tabs2 <- make_loading_tables(fa2, "2F")
tabs3 <- make_loading_tables(fa3, "3F")
# -----------------------------
# 6) Output: 2-factor solution
# -----------------------------
kable(tabs2$L, caption = "Factor loadings (2 factors, ML/minres, oblimin) – full")
| Item | MR2 | MR1 | h2 | |
|---|---|---|---|---|
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 0.463 | 0.113 | 0.274 |
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 0.540 | 0.000 | 0.291 |
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 0.439 | 0.213 | 0.322 |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 0.476 | 0.036 | 0.244 |
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 0.577 | -0.121 | 0.285 |
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | 0.284 | 0.057 | 0.098 |
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | -0.111 | 0.564 | 0.274 |
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 0.032 | 0.697 | 0.508 |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 0.072 | 0.602 | 0.406 |
kable(tabs2$Lf, caption = "Factor loadings (2 factors) – only |loading| ≥ .30")
| Item | MR2 | MR1 | h2 | |
|---|---|---|---|---|
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 0.463 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 0.540 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 0.439 | 0.322 | |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 0.476 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 0.577 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | |||
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 0.564 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 0.697 | 0.508 | |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 0.602 | 0.406 |
kable(tabs2$V, caption = "Variance explained (2-factor solution)")
| Factor | SS_Loadings | Proportion_Var | Cumulative_Var | |
|---|---|---|---|---|
| MR2 | F1 | 1.407 | 0.156 | 0.156 |
| MR1 | F2 | 1.294 | 0.144 | 0.300 |
if (!is.null(tabs2$Phi)) {
kable(tabs2$Phi, caption = "Factor correlation matrix Phi (2-factor solution)")
}
| MR2 | MR1 | |
|---|---|---|
| MR2 | 1.000 | 0.449 |
| MR1 | 0.449 | 1.000 |
# -----------------------------
# 7) Output: 3-factor solution
# -----------------------------
kable(tabs3$L, caption = "Factor loadings (3 factors, ML/minres, oblimin) – full")
| Item | MR2 | MR1 | MR3 | h2 | |
|---|---|---|---|---|---|
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 0.147 | 0.210 | 0.306 | 0.242 |
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 0.014 | 0.312 | 0.316 | 0.258 |
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 0.002 | 0.998 | -0.004 | 0.995 |
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 0.117 | 0.075 | 0.429 | 0.255 |
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | -0.032 | -0.041 | 0.726 | 0.501 |
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | 0.128 | -0.017 | 0.292 | 0.118 |
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 0.603 | -0.123 | -0.031 | 0.318 |
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 0.713 | 0.000 | 0.044 | 0.528 |
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 0.541 | 0.190 | -0.040 | 0.388 |
kable(tabs3$Lf, caption = "Factor loadings (3 factors) – only |loading| ≥ .30")
| Item | MR2 | MR1 | MR3 | h2 | |
|---|---|---|---|---|---|
| num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen | 0.306 | |||
| num_formen_und_haufigkeiten_der_elternkontakte_elternabende | num_formen_und_haufigkeiten_der_elternkontakte_elternabende | 0.312 | 0.316 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache | 0.998 | 0.995 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche | 0.429 | |||
| num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a | 0.726 | 0.501 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | num_formen_und_haufigkeiten_der_elternkontakte_offizielle_besuchstage | ||||
| num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft | 0.603 | 0.318 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt | 0.713 | 0.528 | ||
| num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc | 0.541 | 0.388 |
kable(tabs3$V, caption = "Variance explained (3-factor solution)")
| Factor | SS_Loadings | Proportion_Var | Cumulative_Var | |
|---|---|---|---|---|
| MR2 | F1 | 1.274 | 0.142 | 0.142 |
| MR1 | F2 | 1.265 | 0.141 | 0.282 |
| MR3 | F3 | 1.066 | 0.118 | 0.401 |
if (!is.null(tabs3$Phi)) {
kable(tabs3$Phi, caption = "Factor correlation matrix Phi (3-factor solution)")
}
| MR2 | MR1 | MR3 | |
|---|---|---|---|
| MR2 | 1.000 | 0.363 | 0.276 |
| MR1 | 0.363 | 1.000 | 0.277 |
| MR3 | 0.276 | 0.277 | 1.000 |
@Hannah: Die Kaiser-Meyer-Olkin-Masszahl (KMO = 0.72) weist auf eine akzeptable Stichprobeneignung für eine Faktorenanalyse hin. Auch die Item-spezifischen KMO-Werte lagen durchgängig im zufriedenstellenden Bereich (≥ 0.63). Der Bartlett-Test war signifikant (χ²(36) = 459.46, p < .001), sodass die Voraussetzungen für eine explorative Faktorenanalyse erfüllt sind.
Die Parallelanalyse deutete auf eine Vier-Faktoren-Lösung hin. In der anschließenden inhaltlichen Prüfung zeigte sich jedoch, dass Lösungen mit mehr als zwei Faktoren keine stabil interpretierbare Struktur ergaben: einzelne Items wiesen sehr geringe Kommunalitäten auf (z. B. „offizielle Besuchstage“, h² ≈ 0.10), während andere Faktoren teils nur durch einzelne Items dominiert wurden.
Aus Gründen der Interpretierbarkeit und Parsimonie wurde daher eine Zwei-Faktoren-Lösung bevorzugt. Diese ergab zwei inhaltlich gut unterscheidbare Dimensionen: (1) überwiegend direkte persönliche Kontaktformen (z. B. Begegnungen beim Bringen/Holen, Elternabende, Unterrichtsbesuche, informelle Treffen) und (2) überwiegend mediatisierte bzw. digitale Kontaktformen (schriftlicher Kontakt, Telefon, webbasierte Plattformen). Die Faktoren korrelieren moderat (r ≈ 0.45), was auf zusammenhängende, aber unterscheidbare Kontaktbereiche hinweist.
Da Kontaktformen konzeptionell eher ein formatives Konstrukt darstellen und die interne Konsistenz der resultierenden Gruppen niedrig ausfiel (α ≈ .55), wurden die Kontaktformen nicht als psychometrische Skalen, sondern als deskriptive Indizes (Face-to-Face vs. digital) in die weiteren Analysen übernommen.
############################################################
# Kontaktformen: Face-to-Face & Digitale Kontakte Indizes
############################################################
# ----------------------------------------------------------
# 1) Items definieren (aus df_num!)
# ----------------------------------------------------------
face_to_face <- df_num %>%
select(
num_formen_und_haufigkeiten_der_elternkontakte_begegnungen_beim_bringen_oder_holen,
num_formen_und_haufigkeiten_der_elternkontakte_elternabende,
num_formen_und_haufigkeiten_der_elternkontakte_elterngesprache,
num_formen_und_haufigkeiten_der_elternkontakte_individuelle_unterrichtsbesuche,
num_formen_und_haufigkeiten_der_elternkontakte_informelle_treffen_z_b_elterncafe_o_a
)
digital_contact <- df_num %>%
select(
num_formen_und_haufigkeiten_der_elternkontakte_schriftlicher_kontakt_z_b_mail_kontaktheft,
num_formen_und_haufigkeiten_der_elternkontakte_telefonkontakt,
num_formen_und_haufigkeiten_der_elternkontakte_webbasierte_plattformen_z_b_escola_klapp_pupil_etc
)
# ----------------------------------------------------------
# 2) Cronbach's Alpha (explorativ)
# ----------------------------------------------------------
alpha_face <- psych::alpha(face_to_face)
alpha_digital <- psych::alpha(digital_contact)
alpha_table <- tibble(
Skala = c("Face-to-Face Kontakte", "Digitale Kontakte"),
Cronbach_Alpha = c(alpha_face$total$raw_alpha,
alpha_digital$total$raw_alpha),
N_Items = c(ncol(face_to_face), ncol(digital_contact))
)
alpha_table %>%
gt() %>%
tab_header(title = "Interne Konsistenz der Kontakt-Skalen") %>%
fmt_number(columns = Cronbach_Alpha, decimals = 3)
| Interne Konsistenz der Kontakt-Skalen | ||
| Skala | Cronbach_Alpha | N_Items |
|---|---|---|
| Face-to-Face Kontakte | 0.563 | 5 |
| Digitale Kontakte | 0.545 | 3 |
# ----------------------------------------------------------
# 3) Mittelwert-Indizes bilden
# ----------------------------------------------------------
df_num$kontakt_face_to_face_index <- rowMeans(face_to_face, na.rm = TRUE)
df_num$kontakt_digital_index <- rowMeans(digital_contact, na.rm = TRUE)
# Optional: NA setzen, wenn keine Items beantwortet wurden
df_num$face_n_valid <- rowSums(!is.na(face_to_face))
df_num$digital_n_valid <- rowSums(!is.na(digital_contact))
df_num$kontakt_face_to_face_index[df_num$face_n_valid == 0] <- NA
df_num$kontakt_digital_index[df_num$digital_n_valid == 0] <- NA
# ----------------------------------------------------------
# 4) Deskriptive Statistik der Indizes
# ----------------------------------------------------------
index_desc <- df_num %>%
summarise(
Face_to_Face_Mean = mean(kontakt_face_to_face_index, na.rm = TRUE),
Face_to_Face_SD = sd(kontakt_face_to_face_index, na.rm = TRUE),
Digital_Mean = mean(kontakt_digital_index, na.rm = TRUE),
Digital_SD = sd(kontakt_digital_index, na.rm = TRUE)
) %>%
pivot_longer(everything(),
names_to = "Statistik",
values_to = "Wert")
index_desc %>%
gt() %>%
tab_header(title = "Deskriptive Statistik der Kontakt-Indizes") %>%
fmt_number(columns = Wert, decimals = 2)
| Deskriptive Statistik der Kontakt-Indizes | |
| Statistik | Wert |
|---|---|
| Face_to_Face_Mean | 2.35 |
| Face_to_Face_SD | 0.58 |
| Digital_Mean | 3.46 |
| Digital_SD | 0.95 |
#Plot Histogramm
# 1. Daten vorbereiten
kontakt_plot_data <- df_num %>%
select(kontakt_face_to_face_index, kontakt_digital_index) %>%
rename(
"Face-to-Face Kontakte" = kontakt_face_to_face_index,
"Digitale Kontakte" = kontakt_digital_index
) %>%
pivot_longer(cols = everything(), names_to = "Form", values_to = "Wert")
# 2. Histogramme nebeneinander erstellen
ggplot(kontakt_plot_data, aes(x = Wert)) +
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
facet_wrap(~ Form, ncol = 2) +
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Vergleich der Kontaktformen",
subtitle = "Häufigkeit der Nutzung: 1 (nie/selten) bis 5 (sehr häufig)",
x = "Häufigkeit",
y = "Anzahl Teilnehmende"
) +
theme(
strip.background = element_rect(fill = "gray95", color = NA),
strip.text = element_text(face = "bold"),
panel.spacing = unit(1.5, "lines")
)
Aufgrund der geringen internen Konsistenz (α ≈ .55) wurden die Kontaktformen nicht als psychometrische Skalen, sondern als deskriptive Indizes gebildet. Ziel war es, die durchschnittliche Häufigkeit direkter sowie mediatisierter Kontaktformen abzubilden.
Die deskriptiven Analysen zeigen, dass digitale Kontaktformen (M = 3.46, SD = 0.95) häufiger genutzt werden als direkte Face-to-Face-Kontakte (M = 2.35, SD = 0.58). Zwischen beiden Kontaktformen besteht ein moderater positiver Zusammenhang (r = .30, p < .001), was darauf hinweist, dass Personen mit intensiver persönlicher Kontaktpflege tendenziell auch häufiger digitale Kommunikationswege nutzen.
# -----------------------------
# 1) Define variables
# -----------------------------
entwicklungs_vars <- c(
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_fuhren_von_anspruchsvollen_oder_konfliktgeladenen_elterngesprachen",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_klarung_von_rollen_und_zustandigkeiten_in_der_zusammenarbeit_mit_eltern",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_sprachlich_oder_kulturell_vielfaltigen_elternhausern",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_planung_und_strukturierung_von_elternkontakten",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_unterschiedlichen_erwartungen_von_eltern_lehrpersonen_und_schule",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_bezug_auf_das_verstandnis_der_kantonalen_vorgaben_zur_elternzusammenarbeit",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_zusammenarbeit_im_multiprofessionellen_team_im_kontext_der_elternarbeit",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_bereich_gesprachsfuhrung_und_beratung",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_bei_der_sicherstellung_einer_guten_kommunikation_zwischen_schule_und_elternhaus",
"num_entwicklungsbedarf_ich_sehe_insgesamt_personlichen_entwicklungsbedarf_in_der_elternzusammenarbeit"
)
X_dev <- df_num[, entwicklungs_vars]
# -----------------------------
# 2) Suitability checks
# -----------------------------
kmo_result <- KMO(X_dev)
bartlett_result <- cortest.bartlett(X_dev)
kable(
data.frame(Measure = "Overall KMO", Value = round(kmo_result$MSA, 3)),
caption = "KMO Measure of Sampling Adequacy (Entwicklungsbedarf)"
)
| Measure | Value |
|---|---|
| Overall KMO | 0.899 |
kable(
data.frame(
Chi_Square = round(bartlett_result$chisq, 2),
df = bartlett_result$df,
p_value = format(bartlett_result$p.value, scientific = TRUE)
),
caption = "Bartlett Test of Sphericity (Entwicklungsbedarf)"
)
| Chi_Square | df | p_value |
|---|---|---|
| 1297.25 | 45 | 2.516446e-242 |
# -----------------------------
# 3) Parallel analysis (choose nfactors)
# -----------------------------
fa.parallel(X_dev, fa = "fa", fm = "ml")
## Parallel analysis suggests that the number of factors = 2 and the number of components = NA
# -----------------------------
# 4) Fit EFA model (set nfactors here)
# -----------------------------
nf <- 2 # <- change only this number if needed
efa_dev <- fa(
X_dev,
nfactors = nf,
rotate = "oblimin",
fm = "ml"
)
# Factor loadings table
loadings_table <- as.data.frame(unclass(efa_dev$loadings))
loadings_table <- round(loadings_table, 3)
kable(loadings_table, caption = "Factor Loadings (ML, Oblimin)")
| ML2 | ML1 | |
|---|---|---|
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_fuhren_von_anspruchsvollen_oder_konfliktgeladenen_elterngesprachen | 0.276 | 0.371 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_klarung_von_rollen_und_zustandigkeiten_in_der_zusammenarbeit_mit_eltern | 0.643 | 0.033 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_sprachlich_oder_kulturell_vielfaltigen_elternhausern | 0.467 | 0.083 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_planung_und_strukturierung_von_elternkontakten | 0.632 | 0.113 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_unterschiedlichen_erwartungen_von_eltern_lehrpersonen_und_schule | 0.879 | -0.118 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_bezug_auf_das_verstandnis_der_kantonalen_vorgaben_zur_elternzusammenarbeit | 0.651 | -0.037 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_zusammenarbeit_im_multiprofessionellen_team_im_kontext_der_elternarbeit | 0.598 | 0.113 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_bereich_gesprachsfuhrung_und_beratung | -0.001 | 0.998 |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_bei_der_sicherstellung_einer_guten_kommunikation_zwischen_schule_und_elternhaus | 0.620 | 0.131 |
| num_entwicklungsbedarf_ich_sehe_insgesamt_personlichen_entwicklungsbedarf_in_der_elternzusammenarbeit | 0.344 | 0.386 |
# Optional: show only loadings >= .30
loadings_filtered <- loadings_table
loadings_filtered[abs(loadings_filtered) < 0.30] <- ""
kable(loadings_filtered, caption = "Factor Loadings ≥ .30 (ML, Oblimin)")
| ML2 | ML1 | |
|---|---|---|
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_fuhren_von_anspruchsvollen_oder_konfliktgeladenen_elterngesprachen | 0.371 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_klarung_von_rollen_und_zustandigkeiten_in_der_zusammenarbeit_mit_eltern | 0.643 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_sprachlich_oder_kulturell_vielfaltigen_elternhausern | 0.467 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_planung_und_strukturierung_von_elternkontakten | 0.632 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_unterschiedlichen_erwartungen_von_eltern_lehrpersonen_und_schule | 0.879 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_bezug_auf_das_verstandnis_der_kantonalen_vorgaben_zur_elternzusammenarbeit | 0.651 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_zusammenarbeit_im_multiprofessionellen_team_im_kontext_der_elternarbeit | 0.598 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_bereich_gesprachsfuhrung_und_beratung | 0.998 | |
| num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_bei_der_sicherstellung_einer_guten_kommunikation_zwischen_schule_und_elternhaus | 0.62 | |
| num_entwicklungsbedarf_ich_sehe_insgesamt_personlichen_entwicklungsbedarf_in_der_elternzusammenarbeit | 0.344 | 0.386 |
# Variance explained
variance_table <- data.frame(
Factor = paste0("F", 1:nf),
SS_Loadings = round(efa_dev$Vaccounted["SS loadings", 1:nf], 3),
Proportion_Var = round(efa_dev$Vaccounted["Proportion Var", 1:nf], 3),
Cumulative_Var = round(efa_dev$Vaccounted["Cumulative Var", 1:nf], 3)
)
kable(variance_table, caption = "Variance Explained (EFA)")
| Factor | SS_Loadings | Proportion_Var | Cumulative_Var | |
|---|---|---|---|---|
| ML2 | F1 | 3.395 | 0.340 | 0.340 |
| ML1 | F2 | 1.580 | 0.158 | 0.498 |
# Factor correlation (because oblimin rotation allows correlated factors)
if (!is.null(efa_dev$Phi)) {
kable(round(efa_dev$Phi, 3), caption = "Factor Correlation Matrix (Phi)")
}
| ML2 | ML1 | |
|---|---|---|
| ML2 | 1.0 | 0.6 |
| ML1 | 0.6 | 1.0 |
# -----------------------------
# 5) OPTIONAL: Build subscales + reliability + descriptives
# (only keep if you want indices here)
# -----------------------------
# Example: your two-factor solution (adjust if your loadings differ)
struktur_dev_vars <- c(
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_klarung_von_rollen_und_zustandigkeiten_in_der_zusammenarbeit_mit_eltern",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_sprachlich_oder_kulturell_vielfaltigen_elternhausern",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_planung_und_strukturierung_von_elternkontakten",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_umgang_mit_unterschiedlichen_erwartungen_von_eltern_lehrpersonen_und_schule",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_bezug_auf_das_verstandnis_der_kantonalen_vorgaben_zur_elternzusammenarbeit",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_in_der_zusammenarbeit_im_multiprofessionellen_team_im_kontext_der_elternarbeit",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_bei_der_sicherstellung_einer_guten_kommunikation_zwischen_schule_und_elternhaus"
)
kommunikation_dev_vars <- c(
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_fuhren_von_anspruchsvollen_oder_konfliktgeladenen_elterngesprachen",
"num_entwicklungsbedarf_ich_sehe_entwicklungsbedarf_im_bereich_gesprachsfuhrung_und_beratung"
)
alpha_struktur <- psych::alpha(df_num[, struktur_dev_vars])
alpha_kommunikation <- psych::alpha(df_num[, kommunikation_dev_vars])
alpha_table <- data.frame(
Scale = c("Entwicklungsbedarf – Struktur", "Entwicklungsbedarf – Kommunikation"),
N_items = c(length(struktur_dev_vars), length(kommunikation_dev_vars)),
Alpha = c(round(alpha_struktur$total$raw_alpha, 3),
round(alpha_kommunikation$total$raw_alpha, 3))
)
kable(alpha_table, caption = "Reliability (Cronbach's Alpha) – Entwicklungsbedarf Subscales")
| Scale | N_items | Alpha |
|---|---|---|
| Entwicklungsbedarf – Struktur | 7 | 0.849 |
| Entwicklungsbedarf – Kommunikation | 2 | 0.692 |
df_num$entwicklungsbedarf_struktur_index <- rowMeans(df_num[, struktur_dev_vars], na.rm = TRUE)
df_num$entwicklungsbedarf_kommunikation_index <- rowMeans(df_num[, kommunikation_dev_vars], na.rm = TRUE)
entwicklungs_desc <- data.frame(
Scale = c("Struktureller Entwicklungsbedarf", "Kommunikativer Entwicklungsbedarf"),
Mean = c(mean(df_num$entwicklungsbedarf_struktur_index, na.rm=TRUE),
mean(df_num$entwicklungsbedarf_kommunikation_index, na.rm=TRUE)),
SD = c(sd(df_num$entwicklungsbedarf_struktur_index, na.rm=TRUE),
sd(df_num$entwicklungsbedarf_kommunikation_index, na.rm=TRUE)),
Min = c(min(df_num$entwicklungsbedarf_struktur_index, na.rm=TRUE),
min(df_num$entwicklungsbedarf_kommunikation_index, na.rm=TRUE)),
Max = c(max(df_num$entwicklungsbedarf_struktur_index, na.rm=TRUE),
max(df_num$entwicklungsbedarf_kommunikation_index, na.rm=TRUE))
)
entwicklungs_desc[, -1] <- round(entwicklungs_desc[, -1], 2)
kable(entwicklungs_desc, caption = "Descriptive Statistics – Entwicklungsbedarf Indices")
| Scale | Mean | SD | Min | Max |
|---|---|---|---|---|
| Struktureller Entwicklungsbedarf | 3.33 | 0.80 | 1.14 | 5 |
| Kommunikativer Entwicklungsbedarf | 3.47 | 0.93 | 1.00 | 5 |
#Plot histogram
# 1. Daten vorbereiten
# Achte darauf, dass die Namen 'entwicklungsbedarf_struktur_index' etc.
# mit deinen berechneten Objekten übereinstimmen
entw_plot_data <- df_num %>%
select(entwicklungsbedarf_struktur_index, entwicklungsbedarf_kommunikation_index) %>%
rename(
"Struktureller Bedarf" = entwicklungsbedarf_struktur_index,
"Kommunikativer Bedarf" = entwicklungsbedarf_kommunikation_index
) %>%
pivot_longer(cols = everything(), names_to = "Dimension", values_to = "Wert")
# 2. Histogramme nebeneinander erstellen
ggplot(entw_plot_data, aes(x = Wert)) +
geom_histogram(breaks = seq(1, 5, by = 0.5),
fill = "steelblue",
color = "white") +
facet_wrap(~ Dimension, ncol = 2) +
# Eine rote Linie für den jeweiligen Mittelwert pro Dimension
geom_vline(data = filter(entw_plot_data, Dimension == "Struktureller Bedarf"),
aes(xintercept = mean(Wert, na.rm = TRUE)), color = "red", linetype = "dashed") +
geom_vline(data = filter(entw_plot_data, Dimension == "Kommunikativer Bedarf"),
aes(xintercept = mean(Wert, na.rm = TRUE)), color = "red", linetype = "dashed") +
scale_x_continuous(breaks = 1:5, limits = c(0.8, 5.2)) +
theme_minimal(base_size = 12) +
labs(
title = "Vergleich: Entwicklungsbedarf",
subtitle = "Einschätzung des Bedarfs: 1 (sehr gering) bis 5 (sehr hoch)",
x = "Bedarfswert",
y = "Anzahl Teilnehmende"
) +
theme(
strip.background = element_rect(fill = "gray95", color = NA),
strip.text = element_text(face = "bold"),
panel.spacing = unit(1.5, "lines")
)
@Hannah
Zur Überprüfung der dimensionalen Struktur des Entwicklungsbedarfs wurde eine explorative Faktorenanalyse (Maximum-Likelihood, oblique Rotation) durchgeführt. Die Stichprobeneignung war sehr gut (KMO = .90), und der Bartlett-Test auf Sphärizität war signifikant (χ²(45) = 1297.25, p < .001), sodass die Durchführung der Faktorenanalyse gerechtfertigt war.
Die Parallelanalyse deutete auf eine zweifaktorielle Struktur hin. Der erste Faktor erfasste strukturell-organisatorische Entwicklungsbedarfe (z. B. Rollenklärung, Planung, multiprofessionelle Zusammenarbeit), während der zweite Faktor kommunikativ-interaktionale Entwicklungsbedarfe (z. B. Konfliktgespräche, Gesprächsführung) abbildete. Die beiden Faktoren korrelierten moderat (r = .60), was auf zusammenhängende, jedoch unterscheidbare Dimensionen hinweist.
Die interne Konsistenz war für die strukturelle Subskala hoch (α = .85) und für die kommunikative Subskala akzeptabel (α = .69). Beide Skalen wurden daher als separate Mittelwertindizes in die weiteren Analysen einbezogen.
# 1. Liste der Variablen definieren
meine_indizes <- c(
"num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden",
"num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus",
"num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt",
"foerderliche_faktoren_index",
"kantonale_vorgaben",
"handlungssicherheit_index",
"partizipation_index",
"multiprofessionelle_zusammenarbeit_index",
"qualitaet_elternkontakte_index",
"zufriedenheit_elternkontakte",
"entwicklungsbedarf_struktur_index",
"entwicklungsbedarf_kommunikation_index",
"kontakt_face_to_face_index",
"kontakt_digital_index"
)
# 2. Sicherstellen, dass nur existierende Spalten ausgewählt werden
# (Verhindert den "Columns don't exist" Fehler)
vorhandene_spalten <- intersect(meine_indizes, colnames(df_num))
# 3. Statistiken mit psych::describe berechnen
deskriptive_stats <- psych::describe(df_num[, vorhandene_spalten])
# 4. In Dataframe umwandeln
final_tab <- as.data.frame(deskriptive_stats) %>%
# Auswahl der relevanten Spalten für die Thesis
dplyr::select(n, mean, sd, min, max, skew, kurtosis) %>%
# Namen der Zeilen (Variablen) bereinigen für die Tabelle
rownames_to_column(var = "Variable") %>%
mutate(Variable = gsub("num_", "", Variable),
Variable = gsub("_index", "", Variable),
Variable = gsub("_", " ", Variable)) %>%
# Alle Zahlen auf 2 Dezimalstellen runden
mutate(across(where(is.numeric), round, 2))
# 5. Anzeige der Tabelle im Dokument
kable(final_tab,
caption = "Tabelle: Deskriptive Statistiken, Schiefe und Wölbung der untersuchten Variablen (N = 334)",
col.names = c("Variable", "N", "M", "SD", "Min", "Max", "Skew (Schiefe)", "Kurtosis (Wölbung)"),
booktabs = TRUE)
| Variable | N | M | SD | Min | Max | Skew (Schiefe) | Kurtosis (Wölbung) |
|---|---|---|---|---|---|---|---|
| sind an ihrer schule klare strukturen fur die zusammenarbeit mit eltern vorhanden | 334 | 2.56 | 0.83 | 1.00 | 3.0 | -1.33 | -0.22 |
| wie haufig tauschen sie sich mit den klassenlehrpersonen zu elternfragen aus | 333 | 3.72 | 0.84 | 1.00 | 5.0 | -0.09 | -0.52 |
| wie gut fuhlen sie sich von ihrem team in fragen der elternzusammenarbeit unterstutzt | 334 | 3.75 | 0.91 | 1.00 | 5.0 | -0.47 | -0.10 |
| foerderliche faktoren | 295 | 4.52 | 0.41 | 3.00 | 5.0 | -0.95 | 0.81 |
| kantonale vorgaben | 301 | 2.04 | 1.56 | 0.00 | 5.0 | -0.12 | -1.40 |
| handlungssicherheit | 301 | 3.48 | 0.64 | 1.25 | 5.0 | -0.27 | 0.11 |
| partizipation | 275 | 3.85 | 0.67 | 1.40 | 5.0 | -0.34 | 0.08 |
| multiprofessionelle zusammenarbeit | 272 | 3.47 | 0.87 | 1.00 | 5.0 | -0.21 | -0.60 |
| qualitaet elternkontakte | 288 | 4.17 | 0.50 | 2.33 | 5.0 | -0.22 | -0.03 |
| zufriedenheit elternkontakte | 288 | 4.10 | 0.68 | 2.00 | 5.0 | -0.45 | 0.27 |
| entwicklungsbedarf struktur | 284 | 3.33 | 0.80 | 1.14 | 5.0 | -0.24 | -0.23 |
| entwicklungsbedarf kommunikation | 284 | 3.47 | 0.93 | 1.00 | 5.0 | -0.35 | -0.40 |
| kontakt face to face | 313 | 2.35 | 0.58 | 1.00 | 4.4 | 0.39 | 0.08 |
| kontakt digital | 313 | 3.46 | 0.95 | 1.00 | 5.0 | -0.22 | -0.65 |
Die deskriptive Analyse (siehe Tabelle ) verdeutlicht, dass die Voraussetzungen für parametrische Verfahren (Normalverteilung) bei mehreren Variablen nicht vollständig gegeben sind. Insbesondere die Items zu den klaren Strukturen (Skew = -1.33) und die förderlichen Faktoren (Skew = -0.95) weisen eine deutliche Linksschiefe auf. Aufgrund dieser Verletzungen der Normalverteilung sowie des ordinalen Charakters der Einzelitems wurde für die Korrelationsanalyse die Spearman-Rangkorrelation gewählt, da diese robuster gegenüber Schiefe und Ausreissern ist.
corr_vars <- c(
# Teamstruktur (einzeln)
"num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden",
"num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus",
"num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt",
"foerderliche_faktoren_index",
"kantonale_vorgaben",
"handlungssicherheit_index",
"partizipation_index",
"multiprofessionelle_zusammenarbeit_index",
"qualitaet_elternkontakte_index",
"zufriedenheit_elternkontakte",
"entwicklungsbedarf_struktur_index",
"entwicklungsbedarf_kommunikation_index",
"kontakt_face_to_face_index",
"kontakt_digital_index"
)
corr_vars <- intersect(corr_vars, names(df_num))
X <- df_num[, corr_vars]
corr_res <- psych::corr.test(X, method="spearman", use="pairwise")
R <- corr_res$r
P <- corr_res$p
N <- corr_res$n
stars <- matrix("", nrow=nrow(P), ncol=ncol(P))
stars[P < 0.05] <- "*"
stars[P < 0.01] <- "**"
stars[P < 0.001] <- "***"
R_round <- round(R, 3)
R_fmt <- matrix(paste0(formatC(R_round, format="f", digits=3), stars),
nrow=nrow(R_round), ncol=ncol(R_round))
colnames(R_fmt) <- colnames(R)
rownames(R_fmt) <- rownames(R)
kable(R_fmt, caption="Korrelationsmatrix (Spearman) mit Signifikanzsternen (* p<.05, ** p<.01, *** p<.001)")
| num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden | num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus | num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt | foerderliche_faktoren_index | kantonale_vorgaben | handlungssicherheit_index | partizipation_index | multiprofessionelle_zusammenarbeit_index | qualitaet_elternkontakte_index | zufriedenheit_elternkontakte | entwicklungsbedarf_struktur_index | entwicklungsbedarf_kommunikation_index | kontakt_face_to_face_index | kontakt_digital_index | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden | 1.000*** | 0.154 | 0.203* | 0.168 | 0.006 | 0.096 | 0.140 | 0.248** | 0.062 | 0.020 | -0.171 | -0.084 | 0.106 | 0.218** |
| num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus | 0.154** | 1.000*** | 0.399*** | 0.134 | -0.004 | 0.240** | 0.183 | 0.343*** | 0.155 | 0.179 | -0.091 | -0.168 | 0.320*** | 0.192* |
| num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt | 0.203*** | 0.399*** | 1.000*** | 0.200* | 0.055 | 0.277*** | 0.350*** | 0.426*** | 0.278*** | 0.283*** | -0.268*** | -0.154 | 0.221** | 0.110 |
| foerderliche_faktoren_index | 0.168** | 0.134* | 0.200*** | 1.000*** | 0.046 | 0.175 | 0.232** | 0.217* | 0.357*** | 0.295*** | 0.032 | 0.020 | 0.088 | 0.051 |
| kantonale_vorgaben | 0.006 | -0.004 | 0.055 | 0.046 | 1.000*** | 0.137 | 0.145 | 0.170 | 0.081 | -0.005 | -0.105 | -0.046 | 0.025 | -0.109 |
| handlungssicherheit_index | 0.096 | 0.240*** | 0.277*** | 0.175** | 0.137* | 1.000*** | 0.196 | 0.365*** | 0.477*** | 0.460*** | -0.384*** | -0.433*** | 0.121 | 0.122 |
| partizipation_index | 0.140* | 0.183** | 0.350*** | 0.232*** | 0.145* | 0.196** | 1.000*** | 0.360*** | 0.260*** | 0.216* | -0.174 | -0.034 | 0.241** | 0.055 |
| multiprofessionelle_zusammenarbeit_index | 0.248*** | 0.343*** | 0.426*** | 0.217*** | 0.170** | 0.365*** | 0.360*** | 1.000*** | 0.352*** | 0.350*** | -0.303*** | -0.178 | 0.234** | 0.006 |
| qualitaet_elternkontakte_index | 0.062 | 0.155** | 0.278*** | 0.357*** | 0.081 | 0.477*** | 0.260*** | 0.352*** | 1.000*** | 0.709*** | -0.281*** | -0.289*** | 0.129 | -0.007 |
| zufriedenheit_elternkontakte | 0.020 | 0.179** | 0.283*** | 0.295*** | -0.005 | 0.460*** | 0.216*** | 0.350*** | 0.709*** | 1.000*** | -0.305*** | -0.348*** | 0.187 | -0.019 |
| entwicklungsbedarf_struktur_index | -0.171** | -0.091 | -0.268*** | 0.032 | -0.105 | -0.384*** | -0.174** | -0.303*** | -0.281*** | -0.305*** | 1.000*** | 0.587*** | -0.059 | 0.067 |
| entwicklungsbedarf_kommunikation_index | -0.084 | -0.168** | -0.154** | 0.020 | -0.046 | -0.433*** | -0.034 | -0.178** | -0.289*** | -0.348*** | 0.587*** | 1.000*** | -0.130 | 0.041 |
| kontakt_face_to_face_index | 0.106 | 0.320*** | 0.221*** | 0.088 | 0.025 | 0.121* | 0.241*** | 0.234*** | 0.129* | 0.187** | -0.059 | -0.130* | 1.000*** | 0.304*** |
| kontakt_digital_index | 0.218*** | 0.192*** | 0.110 | 0.051 | -0.109 | 0.122* | 0.055 | 0.006 | -0.007 | -0.019 | 0.067 | 0.041 | 0.304*** | 1.000*** |
kable(N, caption="n (pairwise complete) pro Korrelation")
| num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden | num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus | num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt | foerderliche_faktoren_index | kantonale_vorgaben | handlungssicherheit_index | partizipation_index | multiprofessionelle_zusammenarbeit_index | qualitaet_elternkontakte_index | zufriedenheit_elternkontakte | entwicklungsbedarf_struktur_index | entwicklungsbedarf_kommunikation_index | kontakt_face_to_face_index | kontakt_digital_index | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| num_sind_an_ihrer_schule_klare_strukturen_fur_die_zusammenarbeit_mit_eltern_vorhanden | 334 | 333 | 334 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 313 | 313 |
| num_wie_haufig_tauschen_sie_sich_mit_den_klassenlehrpersonen_zu_elternfragen_aus | 333 | 333 | 333 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 313 | 313 |
| num_wie_gut_fuhlen_sie_sich_von_ihrem_team_in_fragen_der_elternzusammenarbeit_unterstutzt | 334 | 333 | 334 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 313 | 313 |
| foerderliche_faktoren_index | 295 | 295 | 295 | 295 | 295 | 295 | 275 | 272 | 288 | 288 | 284 | 284 | 295 | 295 |
| kantonale_vorgaben | 301 | 301 | 301 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 301 | 301 |
| handlungssicherheit_index | 301 | 301 | 301 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 301 | 301 |
| partizipation_index | 275 | 275 | 275 | 275 | 275 | 275 | 275 | 272 | 275 | 275 | 275 | 275 | 275 | 275 |
| multiprofessionelle_zusammenarbeit_index | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 | 272 |
| qualitaet_elternkontakte_index | 288 | 288 | 288 | 288 | 288 | 288 | 275 | 272 | 288 | 288 | 284 | 284 | 288 | 288 |
| zufriedenheit_elternkontakte | 288 | 288 | 288 | 288 | 288 | 288 | 275 | 272 | 288 | 288 | 284 | 284 | 288 | 288 |
| entwicklungsbedarf_struktur_index | 284 | 284 | 284 | 284 | 284 | 284 | 275 | 272 | 284 | 284 | 284 | 284 | 284 | 284 |
| entwicklungsbedarf_kommunikation_index | 284 | 284 | 284 | 284 | 284 | 284 | 275 | 272 | 284 | 284 | 284 | 284 | 284 | 284 |
| kontakt_face_to_face_index | 313 | 313 | 313 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 313 | 313 |
| kontakt_digital_index | 313 | 313 | 313 | 295 | 301 | 301 | 275 | 272 | 288 | 288 | 284 | 284 | 313 | 313 |
Werte nahe 1 = starker positiver Zusammenhang; nahe -1 = starker negativer Zusammenhang.
Sterne zeigen, ob der Zusammenhang statistisch signifikant ist (p < .05 etc.).
Besonders relevant für die Thesis:
Qualität ↔︎ Zufriedenheit sollte stark positiv sein.
Entwicklungsbedarf sollte negativ mit Qualität/Zufriedenheit zusammenhängen.
Strukturvariablen (Multiprofessionell, Partizipation, Förderliche Faktoren) sollten positiv mit Qualität korrelieren.
Thesis-Text (Ergebnisse – Template): „Die Korrelationsanalyse (Spearman) zeigte einen starken Zusammenhang zwischen Qualität und Zufriedenheit (ρ = …, p < …). Strukturbedingungen wie multiprofessionelle Zusammenarbeit und Partizipation korrelierten positiv mit der Qualität. Entwicklungsbedarf korrelierte erwartungsgemäss negativ mit Qualität und Zufriedenheit.“
R2 <- R
P2 <- P
R2[upper.tri(R2)] <- NA
P2[upper.tri(P2)] <- NA
stars2 <- matrix("", nrow=nrow(P2), ncol=ncol(P2))
stars2[P2 < 0.05] <- "*"
stars2[P2 < 0.01] <- "**"
stars2[P2 < 0.001] <- "***"
stars2[upper.tri(stars2)] <- NA
labels_mat <- matrix(ifelse(is.na(R2), "", paste0(sprintf("%.2f", R2), stars2)),
nrow=nrow(R2))
nice_labels <- c(
# Teamstruktur (einzeln)
"Klare\nStrukturen",
"Häuf.\nAustausch",
"Unterstützung",
"Förderliche\nFaktoren",
"Kantonale\nVorgaben",
"Handlungssicherheit",
"Partizipation",
"Multiprof.\nZusammenarbeit",
"Qualität",
"Zufriedenheit",
"Entw.-bedarf\n(Struktur)",
"Entw.-bedarf\n(Komm.)",
"Kontakt\nf2f",
"Kontakt\ndigital"
)
colnames(R2) <- nice_labels
rownames(R2) <- nice_labels
corr_long <- as.data.frame(as.table(R2)) %>%
rename(Var1 = Var1, Var2 = Var2, value = Freq)
corr_long$label <- as.vector(labels_mat)
p <- ggplot(corr_long, aes(Var1, Var2, fill = value)) +
geom_tile(color="white") +
geom_text(aes(label = label), size=3) +
scale_fill_gradient2(
low="#B2182B", mid="white", high="#2166AC",
midpoint=0, limits=c(-1,1), na.value="white"
) +
theme_minimal(base_size=11) +
theme(axis.text.x = element_text(angle=45, hjust=1),
axis.title = element_blank(),
panel.grid = element_blank()) +
labs(title="Korrelationsmatrix (Spearman)",
subtitle="* p < .05 ** p < .01 *** p < .001",
fill="ρ")
print(p)
ggsave("Korrelationsmatrix_Thesis.png", plot=p, width=8, height=7, dpi=300)