Daten einlesen

data <- read_csv2("/Users/katharinalehr/Documents/DatenanalyseMitR/data/Probandendaten40.csv", na = "NA")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 40 Columns: 97
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (82): Submission ID, Respondent ID, Submitted at, Wie würden Sie Ihr Ges...
## dbl (15): Wie alt sind Sie?, Kaffee Zahl, Energy Drink Zahl, Cola 330 Zahl, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
data <- as_tibble(data)

Datenaufbereiten

a) Umbennen der Variablen

data_rename <- data %>%
  rename(
    # exam stress
    psq_01_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich ausgeruht?]`,
    psq_02_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben das Gefühl, dass zu viele Forderungen an Sie gestellt werden.\n]`,
    psq_03_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben zuviel zu tun.]`,
    psq_04_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben das Gefühl, Dinge zu tun, die Sie wirklich mögen.]`,
    psq_05_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fürchten, Ihre Ziele nicht erreichen zu können.]`,
    psq_06_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich ruhig.\n]`,
    psq_07_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich frustriert.\n]`,
    psq_08_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie sind voller Energie.]`,
    psq_09_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich angespannt.]`,
    psq_10_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Ihre Probleme scheinen sich aufzutürmen.]`,
    psq_11_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich gehetzt.]`,
    psq_12_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich sicher und geschützt.]`,
    psq_13_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben viele Sorgen.]`,
    psq_14_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben Spaß.]`,
    psq_15_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben Angst vor der Zukunft.]`,
    psq_16_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie sind leichten Herzens.]`,
    psq_17_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich mental erschöpft.]`,
    psq_18_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben Probleme, sich zu entspannen.]`,
    psq_19_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie haben genug Zeit für sich.]`,
    psq_20_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel in einer Prüfungsphase ?\n [Sie fühlen sich unter Termindruck.\n]`,

    # no_exam stress
    psq_01_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich ausgeruht?]`,
    psq_02_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben das Gefühl, dass zu viele Forderungen an Sie gestellt werden.\n]`,
    psq_03_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben zuviel zu tun.]`,
    psq_04_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben das Gefühl, Dinge zu tun, die Sie wirklich mögen.]`,
    psq_05_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fürchten, Ihre Ziele nicht erreichen zu können.]`,
    psq_06_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich ruhig.\n]`,
    psq_07_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich frustriert.\n]`,
    psq_08_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie sind voller Energie.]`,
    psq_09_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich angespannt.]`,
    psq_10_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Ihre Probleme scheinen sich aufzutürmen.]`,
    psq_11_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich gehetzt.]`,
    psq_12_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich sicher und geschützt.]`,
    psq_13_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben viele Sorgen.]`,
    psq_14_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben Spaß.]`,
    psq_15_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben Angst vor der Zukunft.]`,
    psq_16_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie sind leichten Herzens.]`,
    psq_17_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich mental erschöpft.]`,
    psq_18_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben Probleme, sich zu entspannen.]`,
    psq_19_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie haben genug Zeit für sich.]`,
    psq_20_no_exam = `Wie hoch ist für gewöhnlich Ihr wahrgenommenes Stresslevel außerhalb einer Prüfungsphase ?\n [Sie fühlen sich unter Termindruck.\n]`,
    # Prüfungsphase Koffein
    kaffee_exam      = `Kaffee Zahl`,
    energydrink_exam = `Energy Drink Zahl`,
    cola330_exam     = `Cola 330 Zahl`,
    cola500_exam     = `Cola 550 Zahl`,
    schwarztee_exam  = `Schwarztee Zahl`,
    gruenetee_exam   = `Grüner Tee Zahl`,
    matcha_exam      = `Matcha Zahl`,

    # außerhalb Prüfungsphase Koffein
    kaffee_no_exam      = `Kaffee Zahl (2)`,
    energydrink_no_exam = `Energy Drink Zahl (2)`,
    cola330_no_exam     = `Cola 330 Zahl (2)`,
    cola500_no_exam     = `Cola 550 Zahl (2)`,
    schwarztee_no_exam  = `Schwarztee Zahl (2)`,
    gruenetee_no_exam   = `Grüner Tee Zahl (2)`,
    matcha_no_exam      = `Matcha Zahl (2)`
  )

b) Antworten umformatieren und invertieren

# Textantworten in Zahlen 1..4
likert_map <- c("fast nie"= 1, "manchmal"= 2, "häufig"= 3, "meistens"= 4)

data_rename <- data_rename %>% 
  mutate(
    across(
      matches("^psq_\\d{2}_(exam|no_exam)$"),
      ~ as.numeric(unname(likert_map[trimws(tolower(.x))]))
   )
  )


# Invertieren der Items 01, 06, 08
data_rename <- data_rename %>%
  mutate(
    psq_01_exam = 5 - psq_01_exam,
    psq_06_exam = 5 - psq_06_exam,
    psq_08_exam = 5 - psq_08_exam,
    psq_01_no_exam = 5 - psq_01_no_exam,
    psq_06_no_exam = 5 - psq_06_no_exam,
    psq_08_no_exam = 5 - psq_08_no_exam
  )

Gibt es einen Unterschied im wahrgenommenen Stress von Studierenden zwischen Prüfungsphase und Nicht-Prüfungsphase

a) Mittelwerte und Statistische Tests für Stress

# Stress-Mittelwert pro Phase berechnen
data_rename <- data_rename %>%
  mutate(stress_mean_exam =
      rowMeans(
        cbind(
          psq_01_exam, psq_02_exam, psq_03_exam, psq_04_exam, psq_05_exam,
          psq_06_exam, psq_07_exam, psq_08_exam, psq_09_exam, psq_10_exam,
          psq_11_exam, psq_12_exam, psq_13_exam, psq_14_exam, psq_15_exam,
          psq_16_exam, psq_17_exam, psq_18_exam, psq_19_exam, psq_20_exam
        ),
        na.rm = TRUE
      ),

    stress_mean_no_exam =
      rowMeans(
        cbind(
          psq_01_no_exam, psq_02_no_exam, psq_03_no_exam, psq_04_no_exam, psq_05_no_exam,
          psq_06_no_exam, psq_07_no_exam, psq_08_no_exam, psq_09_no_exam, psq_10_no_exam,
          psq_11_no_exam, psq_12_no_exam, psq_13_no_exam, psq_14_no_exam, psq_15_no_exam,
          psq_16_no_exam, psq_17_no_exam, psq_18_no_exam, psq_19_no_exam, psq_20_no_exam
        ),
        na.rm = TRUE
      )
  )

b) Shapiro Wilk für Normalverteilung

shapiro.test(data_rename$stress_mean_exam)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_rename$stress_mean_exam
## W = 0.9224, p-value = 0.01033

c) Wilcox Test

wilcox.test(
  data_rename$stress_mean_exam, 
  data_rename$stress_mean_no_exam, 
  paired = TRUE)
## Warning in wilcox.test.default(data_rename$stress_mean_exam,
## data_rename$stress_mean_no_exam, : cannot compute exact p-value with ties
## Warning in wilcox.test.default(data_rename$stress_mean_exam,
## data_rename$stress_mean_no_exam, : cannot compute exact p-value with zeroes
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data_rename$stress_mean_exam and data_rename$stress_mean_no_exam
## V = 557, p-value = 8.049e-07
## alternative hypothesis: true location shift is not equal to 0

d) Effektgröße

data_long <- data_rename %>%
  mutate(id = row_number()) %>%  # wichtig für paired!
  select(id, stress_mean_exam, stress_mean_no_exam) %>%
  gather(
    key = "Phasen",
    value = "Phasen_stress_mean",
    stress_mean_exam, stress_mean_no_exam
  )

wilcox_effsize(
  data_long,
  Phasen_stress_mean ~ Phasen,
  paired = TRUE,
  id = id
)
## # A tibble: 1 × 7
##   .y.                group1           group2       effsize    n1    n2 magnitude
## * <chr>              <chr>            <chr>          <dbl> <int> <int> <ord>    
## 1 Phasen_stress_mean stress_mean_exam stress_mean…   0.854    39    34 large

Balkendiagramm Wahrgenommener Stress in Prüfungsphase und Nicht Prüfungsphase

stress_long <- data_rename %>%
  select(stress_mean_exam, stress_mean_no_exam) %>%
  pivot_longer(
    cols = c(stress_mean_exam, stress_mean_no_exam),
    names_to = "Phase",
    values_to = "Wert"
  ) %>%
  mutate(
    Phase = recode(
      Phase,
      stress_mean_exam    = "Prüfungsphase",
      stress_mean_no_exam = "Nicht Prüfungsphase"
    ),
    Phase = factor(Phase, levels = c("Nicht Prüfungsphase", "Prüfungsphase"))
  )

stress_summary <- stress_long %>%
  group_by(Phase) %>%
  summarise(
    Mean = mean(Wert, na.rm = TRUE),
    SD   = sd(Wert, na.rm = TRUE),
    .groups = "drop"
  )

p_stress <- ggplot(stress_summary, aes(x = Phase, y = Mean, fill = Phase)) +
  geom_col(color = "black", width = 0.6) +
  geom_errorbar(
    aes(ymin = pmax(Mean - SD, 0), ymax = Mean + SD),
    width = 0.2
  ) +
  scale_fill_manual(
    values = c(
      "Nicht Prüfungsphase" = "#4DA3FF",
      "Prüfungsphase"      = "#FF7F50"
    )
  ) +
  scale_y_continuous(limits = c(0, NA)) +
  labs(
    x = "",
    y = "Wahrgenommener Stress (1 = fast nie, 4 = meistens)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

p_stress

Gibt es einen Unterschied im Koffeinkonsum von Studierenden zwischen Prüfungsphase und Nicht-Prüfungsphase

a) mg/Tag Koffein berechnen (für jede Person)

# Koffein-mg pro Portion
koffein_mg <- c(
  kaffee      = 85,
  energydrink = 80,
  cola330     = 33,
  cola500     = 50,
  schwarztee  = 40,
  gruenetee   = 30,
  matcha      = 30   
)

data_rename <- data_rename %>%
  mutate(
    koffein_tag_exam =
      rowSums(cbind(
        kaffee_exam      * koffein_mg["kaffee"],
        energydrink_exam * koffein_mg["energydrink"],
        cola330_exam     * koffein_mg["cola330"],
        cola500_exam     * koffein_mg["cola500"],
        schwarztee_exam  * koffein_mg["schwarztee"],
        gruenetee_exam   * koffein_mg["gruenetee"],
        matcha_exam      * koffein_mg["matcha"]
      ), na.rm = TRUE) / 7,

    koffein_tag_no_exam =
      rowSums(cbind(
        kaffee_no_exam      * koffein_mg["kaffee"],
        energydrink_no_exam * koffein_mg["energydrink"],
        cola330_no_exam     * koffein_mg["cola330"],
        cola500_no_exam     * koffein_mg["cola500"],
        schwarztee_no_exam  * koffein_mg["schwarztee"],
        gruenetee_no_exam   * koffein_mg["gruenetee"],
        matcha_no_exam      * koffein_mg["matcha"]
      ), na.rm = TRUE) / 7
  )

b) Shapiro Wilk für Normalverteilung

shapiro.test(data_rename$koffein_tag_exam)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_rename$koffein_tag_exam
## W = 0.89278, p-value = 0.001187

c) Wilcox Test

wilcox.test(
  data_rename$koffein_tag_exam, 
  data_rename$koffein_tag_no_exam, 
  paired = TRUE)
## Warning in wilcox.test.default(data_rename$koffein_tag_exam,
## data_rename$koffein_tag_no_exam, : cannot compute exact p-value with ties
## Warning in wilcox.test.default(data_rename$koffein_tag_exam,
## data_rename$koffein_tag_no_exam, : cannot compute exact p-value with zeroes
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data_rename$koffein_tag_exam and data_rename$koffein_tag_no_exam
## V = 388, p-value = 2.652e-05
## alternative hypothesis: true location shift is not equal to 0

d) Effektstärke

#wide -> long
data_long2 <- data_rename %>%
  mutate(id = row_number()) %>%  # wichtig für paired!
  select(id, koffein_tag_exam,  koffein_tag_no_exam) %>%
  gather(
    key = "Phasen",
    value = "Phasen_koffein_mean",
    koffein_tag_exam, koffein_tag_no_exam
  )

wilcox_effsize(
  data_long2,
  Phasen_koffein_mean ~ Phasen,
  paired = TRUE,
  id = id
)
## # A tibble: 1 × 7
##   .y.                 group1           group2      effsize    n1    n2 magnitude
## * <chr>               <chr>            <chr>         <dbl> <int> <int> <ord>    
## 1 Phasen_koffein_mean koffein_tag_exam koffein_ta…   0.736    40    40 large

Balkendiagramm Koffeinmenge in Prüfungsphase und Nicht Prüfungsphase

koffein_long <- data_rename %>%
  select(koffein_tag_exam, koffein_tag_no_exam) %>%
  pivot_longer(
    cols = c(koffein_tag_exam, koffein_tag_no_exam),
    names_to = "Phase",
    values_to = "Wert"
  ) %>%
  mutate(
    Phase = recode(
      Phase,
      koffein_tag_exam    = "Prüfungsphase",
      koffein_tag_no_exam = "Nicht Prüfungsphase"
    ),
    Phase = factor(Phase, levels = c("Nicht Prüfungsphase", "Prüfungsphase"))
  )

koffein_summary <- koffein_long %>%
  group_by(Phase) %>%
  summarise(
    Mean = mean(Wert, na.rm = TRUE),
    SD   = sd(Wert, na.rm = TRUE),
    .groups = "drop"
  )

p_koffein <- ggplot(koffein_summary, aes(x = Phase, y = Mean, fill = Phase)) +
  geom_col(color = "black", width = 0.6) +
  geom_errorbar(
    aes(ymin = pmax(Mean - SD, 0), ymax = Mean + SD),
    width = 0.2
  ) +
  scale_fill_manual(
    values = c(
      "Nicht Prüfungsphase" = "#4DA3FF",
      "Prüfungsphase"      = "#FF7F50"
    )
  ) +
  scale_y_continuous(limits = c(0, NA)) +
  labs(
    x = "",
    y = "Koffeinmenge (mg/Tag)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

p_koffein