1 Gelebte Elternzusammenarbeit aus Sicht angehender schulischer Heilpädagoginnen und Heilpädagogen

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?

1.1 Analyse

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:

  • Entwicklungsbedarf

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.

  • Kontaktformen

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

1.1.1 Skalen ohne zusätzliche Faktorenanalyse

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.

  • Handlungssicherheit:

Trotz moderater interner Konsistenz wurde die Skala beibehalten, da sie ein theoretisch zentrales Konstrukt im Strukturblock darstellt.

1.1.2 3. Konstrukte ohne Skalenbildung

  • 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")
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)

1.2 Skalen, Inidizes, Faktoren

1.2.1 Qualität der Elternkontakte / Zufriedenheit / Partizipation

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")
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")
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.

1.2.2 Förderliche Faktoren (Strukturrahmenbedingungen)

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")
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

1.2.3 Kantonale Vorgaben

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")
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.2.4 Handlungssicherheit

# 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)")
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)")
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.

1.2.5 Teamstruktur

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)")
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.

1.2.6 Multiprofessionelle Zusammenarbeit

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")
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.2.7 Kontaktformen

# -----------------------------
# 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")
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)")
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)")
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")
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")
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)")
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)")
}
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")
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")
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)")
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)")
}
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.2.8 Entwicklungsbedarf – EFA & Subskalen

# -----------------------------
# 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)"
)
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)"
)
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)")
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)")
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)")
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)")
}
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")
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")
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.3 Übersicht: Deskriptive Statistik Aller Indizes

# 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)
Tabelle: Deskriptive Statistiken, Schiefe und Wölbung der untersuchten Variablen (N = 334)
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.

1.4 Korrelationsanalyse

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)")
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")
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.“

1.4.1 Korrelationsmatrix als farbige Heatmap

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)