1. Wstęp

Niniejsza analiza przedstawia związek między stylem życia studentów, czynnikami demograficznymi i akademickimi a samopoczuciem młodych dorosłych. Celem raportu jest identyfikacja powodów, które powodują pogorszenie zdrowia psychicznego u badanej grupy.

2. Przygotowanie danych

Dane pochodzą ze strony kaggle. Zostały zebrane za pomocą elektronicznych ankiet rozesłanych studentom kierunków informatycznych. Odpowiedzi studentów oczyszczono, zanonimizowano i ujednolicono. Analiza tych danych jest istotna, ponieważ zdrowie psychiczne młodych dorosłych pogorszyło się w ostatnich latach, a zrozumienie przyczyn tego stanu może pomóc w szukaniu rozwiązań.

2.1 Wczytywanie bibliotek

library(tidyverse)
library(knitr)
library(DT)
library(readr)
library(RColorBrewer)
library(patchwork)
library(fmsb)
library(plotly)
library(ggcorrplot)

2.2 Utworzenie przykładowych danych

2.2.1 Dane studentów

Poniższa interaktywna tabela przedstawia pełen zbiór danych zawierający 21 kolumn. Pozwala ona na wgląd w surowe informacje o każdym ze studentów.

DT::datatable(studenci, 
              options = list(scrollX = TRUE),
              caption = "Pełen zbiór danych")

2.2.2 Selekcja najistotniejszych dla analizy zmiennych

Do dalszej części badania wybrano zmienne mające kluczowy wpływ na zdrowie psychiczne. Nazwy kolumn zostały przetłumaczone dla zwiększenia czytelności raportu.

dane_wybrane <- studenci %>%
  select(gender, age, cgpa, average_sleep, academic_pressure, depression) %>%
  rename(
    Płeć = gender,
    Wiek = age,
    "Średnia ocen" = cgpa,
    "Średni sen" = average_sleep,
    "Presja akademicka" = academic_pressure,
    "Depresja" = depression
  )
DT::datatable(dane_wybrane, caption = "Podstawowe wskaźniki zdrowia psychicznego i nauki")

3. Czyszczenie i transformacja danych

W celu przygotowania danych do analizy przeprowadzono konfigruację typów zmiennych.

studenci_analiza <- studenci %>%
  mutate(
    gender = as.factor(gender),
    university = as.factor(university),
    degree_level = as.factor(degree_level),
    degree_major = as.factor(degree_major),
    campus_discrimination = as.factor(campus_discrimination),
    academic_year = as.factor(academic_year),
    cgpa = as.factor(cgpa),
    residential_status = as.factor(residential_status),
    sports_engagement = as.factor(sports_engagement),
    average_sleep = as.factor(average_sleep),
    
    stress_relief_activities = as.character(stress_relief_activities),
    
    academic_workload = as.numeric(academic_workload),
    academic_pressure = as.numeric(academic_pressure),
    financial_concerns = as.numeric(financial_concerns),
    study_satisfaction = as.numeric(study_satisfaction),
    social_relationships = as.numeric(social_relationships),
    depression = as.numeric(depression),
    anxiety = as.numeric(anxiety),
    isolation = as.numeric(isolation),
    future_insecurity = as.numeric(future_insecurity),
    age = as.numeric(age)
  )

4 Analiza danych

4.1 Charakterystyka grupy badawczej

ggplot(studenci_analiza, aes(x = gender, fill = gender)) + 
  geom_bar() +
  scale_fill_manual(values = c("Female" = "#FFB6C1", "Male" = "#ADD8E6")) +
  scale_x_discrete(labels = c("Female" = "Kobiety", "Male" = "Mężczyźni")) +
  labs(title = "Struktura płci", x = "Płeć", y = "Liczba studentów") +
  theme_minimal() +
  theme(legend.position = "none") #ukrycie legendy

ggplot(studenci_analiza, aes(x = degree_major, fill = degree_major)) +
  geom_bar() +
  scale_fill_brewer(palette = "Pastel1") +
  scale_x_discrete(labels = c("Computer Science" = "Informatyka", "Information Technology" = "Technologie IT",
  "Software Engineering" = "Inżynieria oprogramowania",
  "Data Science" = "Analiza danych")) +
  labs(title = "Rozkład kierunków studiów", x = "Kierunek studiów", y = "Liczba studentów") +
  theme_minimal() + 
  theme(legend.position = "none")

ggplot(studenci_analiza, aes(x = age)) +
  geom_histogram(binwidth = 1, fill = "#eda8e0", color = "white") +
  geom_vline(aes(xintercept = mean(age)), 
             color = "skyblue", 
             size = 1) +
  scale_x_continuous(breaks = seq(17, 26, by = 1)) +
  annotate("text", 
           x = mean(studenci_analiza$age) + 1, 
           y = 5, 
           label = paste("Średnia wieku:", round(mean(studenci_analiza$age), 0)),
           color = "black") +
  labs(title = "Rozkład wieku z zaznaczoną średnią", x = "Wiek", y = "Liczba studentów") +
  theme_minimal() 

ggplot(studenci_analiza, aes(x = academic_year, fill = academic_year)) +
  geom_bar() +
  scale_fill_brewer(palette = "Pastel1", direction = -1) + #bierze od tylu kolory z palety
  scale_x_discrete(labels = c("1st year" = "Pierwszy rok", 
                              "2nd year" = "Drugi Rok", 
                              "3rd year" = "Trzeci Rok",
                              "4th year" = "Czwarty Rok")) +
  labs(title = "Rok studiów", x = "Rok studiów", y = "Liczba studentów") +
  theme_minimal() + 
  theme(legend.position = "none")

4.2 Analiza czynników wpływających na depresję

4.2.1 Wpływ stylu życia na nasilenie objawów depresyjnych

wykres1 <- studenci_analiza %>%
  group_by(average_sleep) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = average_sleep, y = srednia, fill = average_sleep)) +
  ylim(0, 5) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = brewer.pal(9, "Pastel1")[c(7, 8, 1)]) +
  theme_minimal() + theme(legend.position = "none") +
  scale_x_discrete(labels = c("2-4 hrs" = "2-4 h", "4-6 hrs" = "4-6 h", "7-8 hrs" = "7-8 h")) +
  labs(title = "Sen", x = "Średnia długość snu", y = "Średni poziom nasilenia objawów depresyjnych")

wykres2 <- studenci_analiza %>%
  group_by(sports_engagement) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = sports_engagement, y = srednia, fill = sports_engagement)) +
  ylim(0, 5) +
  geom_bar(stat = "identity") + #zeby sam nie liczyl, tylko wzial z sredniej
  scale_fill_manual(values = brewer.pal(9, "Pastel1")[c(3, 4, 5, 6)]) +
  scale_x_discrete(labels = c("1-3 times" = "1-3", "4-6 times" = "4-6", "7+ times" = "7+", "No Sports" = "Brak sportu")) +
  theme_minimal() + theme(legend.position = "none") +
  labs(title = "Sport",x = "Średnia ilość treningów w tygodniu", y = "")
wykres1 + wykres2

4.2.2 Wpływ czynników demograficznych na nasilenie objawów depresyjnych

wykres1 <- studenci_analiza %>%
  group_by(gender) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = gender, y = srednia, fill = gender)) +
  geom_bar(stat = "identity") +
  ylim(0, 5) +
  scale_fill_manual(values = c("Female" = "#FFB6C1", "Male" = "#ADD8E6")) + 
  theme_minimal() + theme(legend.position = "none") +
  scale_x_discrete(labels = c("Female" = "Kobiety", "Male" = "Mężczyźni")) +
  labs(title = "Płeć", x = "Płeć", y = "Średni poziom nasilenia objawów depresyjnych")

srednie_wiek <- studenci_analiza %>%
  group_by(age) %>%
  summarise(srednia = mean(depression))

wykres2 <- ggplot(srednie_wiek, aes(x = age, y = srednia)) +
  geom_col(fill = "#eda8e0", color = "white") +
  scale_x_continuous(breaks = seq(17, 26, by = 1)) +
  theme_minimal() +
  labs(title = "Wiek", x = "Wiek",
       y = "")

wykres1 + wykres2

wykres1 <- studenci_analiza %>%
  group_by(residential_status) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = residential_status, y = srednia, fill = residential_status)) +
  geom_bar(stat = "identity") +
  ylim(0, 5) +
  scale_fill_manual(values = c("On-Campus" = "#a0e092", "Off-Campus" = "#82dce8")) + 
  theme_minimal() + theme(legend.position = "none") +
  scale_x_discrete(labels = c("On-Campus" = "Na terenie kampusu", "Off-Campus" = "Poza terenem kampusu")) +
  labs(title = "Miejsce zamieszkania", x = "Zakwaterowanie", y = "Średni poziom nasilenia objawów depresyjnych")

srednie_problemy <- studenci_analiza %>%
  group_by(financial_concerns) %>%
  summarise(srednia = mean(depression))

wykres2 <- ggplot(srednie_problemy, aes(x = financial_concerns, y = srednia)) +
  geom_col(fill = "#ebeb9d", color = "white") +
  scale_x_continuous(breaks = seq(0, 5, by = 1)) +
  ylim(0, 5) +
  xlim(0, 5) +
  theme_minimal() +
  labs(title = "Stopień obaw finansowych", y = "",
       x = "Poczucie trudności materialnych")

wykres1 + wykres2

4.2.3 Wpływ czynników akademickich na nasilenie objawów depresyjnych

rokstudiow <- studenci_analiza %>%
  group_by(academic_year) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = academic_year, y = srednia, fill = academic_year)) +
  geom_bar(stat = "identity") +
  ylim(0, 5) +
  coord_flip() +
  scale_fill_brewer(palette = "Pastel1", direction = -1) + 
  theme_minimal() + theme(legend.position = "none") +
  scale_x_discrete(labels = c("1st year" = "Pierwszy rok", 
                              "2nd year" = "Drugi Rok", 
                              "3rd year" = "Trzeci Rok", 
                              "4th year" = "Czwarty Rok")) +
  labs(title = "Rok studiów", x = "Rok studiów", y = "")

kierunek <- studenci_analiza %>%
  group_by(degree_major) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = degree_major, y = srednia, fill = degree_major)) +
  geom_bar(stat = "identity") +
  ylim(0, 5) +
  coord_flip() +
  scale_fill_brewer(palette = "Pastel1") +
  scale_x_discrete(labels = c("Computer Science" = "Informatyka", "Information Technology" = "Technologie IT",
  "Software Engineering" = "Inżynieria oprogramowania",
  "Data Science" = "Analiza danych")) + 
  theme_minimal() + theme(legend.position = "none") +
  labs(title = "Kierunek Studiów", x = "Kierunek Studiów", y = "")

(rokstudiow + kierunek) + 
  plot_annotation(caption = "Średni poziom nasilenia objawów depresyjnych") & 
  theme(plot.caption = element_text(size = 10, hjust = 0.5)) # centrowanie podpisu

satysfakcja <- studenci_analiza %>%
  group_by(study_satisfaction) %>%
  summarise(srednia = mean(depression))

satysfakcjaznauki <- ggplot(satysfakcja, aes(x = study_satisfaction, y = srednia)) +
  geom_col(fill = "#8bf0e9", color = "white") +
  scale_x_continuous(breaks = seq(0, 5, by = 1)) +
  ylim(0, 5) +
  xlim(0, 5) +
  theme_minimal() +
  labs(title = "Stopień satysfakcji z nauki", y = "Średni poziom nasilenia objawów depresyjnych",
       x = "Poziom poczucia satysfakcji z nauki")

sredniaocen <- studenci_analiza %>%
  group_by(cgpa) %>%
  summarise(srednia = mean(depression)) %>%
  ggplot(aes(x = cgpa, y = srednia, fill = cgpa)) +
  geom_bar(stat = "identity") +
  ylim(0, 5) +
  scale_fill_manual(values = brewer.pal(9, "Pastel1")[c(2, 9, 7, 5, 8, 1)]) + 
  theme_minimal() + theme(legend.position = "none") +
  labs(title = "Średnia ocen", x = "Średnia ocen", y = "")

satysfakcjaznauki + sredniaocen

presja <- studenci_analiza %>%
  group_by(academic_pressure) %>%
  summarise(srednia = mean(depression))

presjanauka <- ggplot(presja, aes(x = academic_pressure, y = srednia)) +
  geom_col(fill = brewer.pal(9, "Pastel1")[3],, color = "white") +
  scale_x_continuous(breaks = seq(0, 5, by = 1)) +
  ylim(0, 5) +
  xlim(0, 5) +
  theme_minimal() +
  labs(title = "Stopień presji akademickiej", y = "Średni poziom nasilenia objawów depresyjnych",
       x = "Poziom odczuwania presji spowodowanej nauką")


praca <- studenci_analiza %>%
  group_by(academic_workload) %>%
  summarise(srednia = mean(depression))

pracanauka <- ggplot(praca, aes(x = academic_workload, y = srednia)) +
  geom_col(fill = "#c689e0", color = "white") +
  scale_x_continuous(breaks = seq(0, 5, by = 1)) +
  ylim(0, 5) +
  xlim(0, 5) +
  theme_minimal() +
  labs(title = "Poziom obciążenia nauką", y = "",
       x = "Poczucie natłoku pracy")

presjanauka + pracanauka

4.3 Analiza obciążeń psychicznych

4.3.1 Analiza średniego profilu obciążeń psychicznych

Wykres prezentuje wielowymiarowy profil obciążeń psychicznych studenta. Równomierny rozkład wyników na siatce wskazuje na współwystępowanie depresji, lęku, izolacji i niepewności przyszłości na zbliżonym poziomie.

radar_data <- studenci_analiza %>%
  summarise(
    Depresja = mean(depression),
    Lęk = mean(anxiety),
    Izolacja = mean(isolation),
    `Niepewność\nprzyszłości` = mean(future_insecurity) 
  )

radar_final <- rbind(rep(4,4), rep(2,4), radar_data) #to mowi powtorz 4 razy liczbe 4 i powtorz 4 razy 2
#na poczatku trzeba wziac max i min

par(mar = c(1, 1, 2, 1)) #marginesy: dol, lewo, gora, prawo

radarchart(radar_final, 
           axistype = 1, #typy osi
           pcol = "#FF69B4", # Kolor linii
           pfcol = rgb(255, 105, 180, alpha = 100, maxColorValue = 255), # Wypełnienie (różowy z przezroczystością 0.4)
           plwd = 3, # grubosc linii
           
           
           cglcol = "grey80", #kKolor siatki
           cglty = 1,         # viagla linia siatki
           axislabcol = "grey50", 
           caxislabels = seq(2, 4, 0.5), # skala od 0 do 5, co 1
           cglwd = 0.8, #grubosc linii siatki
           
           vlcex = 1.1, # Wielkość czcionki nazw zmiennych
           title = "Profil obciążeń psychicznych przeciętnego studenta"
)

4.3.2 Związek między poszczególnymi obciążeniami psychicznymi

Mapa cieplna pozwala przanalizować stopień korelacj między różnymi rodzajami obciążeń psychicznych. Zestawienie to pozwala zauważyć silny związek między depresją a lękiem oraz depresją i izolacją.

macierz <- cor(studenci_analiza[, c("depression", "anxiety", "isolation", "future_insecurity")])
nazwy <- c("Depresja", "Lęk", "Izolacja", "Niepewność przyszłości")

par(mar = c(1, 1, 2, 1))

colnames(macierz) <- nazwy
rownames(macierz) <- nazwy

ggcorrplot(macierz, 
           lab = TRUE, #wypisuje wynik na kratce
           colors = c("#96c4e3", "white", "#FF69B4"), 
           title = "Związek między problemami",
           hc.order = TRUE, outline.color = "white")

4.4 Analiza sposobów radzenia sobie ze stresem

Wykres obrazuje strukturę strategii radzenia sobie ze stresem. Rozkład ten wykazuje, że najczęstszymi sposobami radzenia sobie ze stresem są Aktywności Religijne, Rozrywka Online oraz Kontakty Społeczne.

fig <-  studenci_analiza %>%
  separate_rows(stress_relief_activities, sep = ", ") %>%
  
mutate(stress_relief_activities = recode(stress_relief_activities, "Online Entertainment" = "Rozrywka Online", "Religious Activities" = "Aktywności Religijne", "Social Connections" = "Kontakty Społeczne", "Outdoor Activities" = "Aktywności na świeżym powietrzu", "Sports and Fitness" = "Sport i Fitness", "Nothing" = "Nic", "Sleep" = "Sen", "Creative Outlets" = "Kreatywne ujście")) %>%
plot_ly(x = ~stress_relief_activities, 
          type = 'histogram', 
          marker = list(color = 'hotpink')) %>%
  layout(title = 'Sposoby radzenia sobie ze stresem',
         plot_bgcolor = 'white', 
        paper_bgcolor = 'white',
        xaxis = list(
      title = "Czynność",
      gridcolor = 'grey80',   
      zerolinecolor = 'grey80' #kolor linii 0
    ),
    yaxis = list(
      title = "Liczba Studentów",
      gridcolor = 'grey80',      
      zerolinecolor = 'grey80'
    )
  )

fig

Schemat pokazuje związek między strategią radzenia sobie ze stresem, a nasileniem objawów depresyjnych. Stosunkowo równomierny rozkład wskazuje na brak dużego związku między sposobem regulacji emocji, a pogorszeniem nastroju.

fig <-  studenci_analiza %>%
  separate_rows(stress_relief_activities, sep = ", ") %>%
  mutate(stress_relief_activities = recode(stress_relief_activities, "Online Entertainment" = "Rozrywka Online", 
"Religious Activities" = "Aktywności Religijne",
"Social Connections" = "Kontakty Społeczne", 
"Outdoor Activities" = "Aktywności na świeżym powietrzu",
"Sports and Fitness" = "Sport i Fitness", 
"Nothing" = "Nic", "Sleep" = "Sen",
"Creative Outlets" = "Kreatywne ujście")) %>%
  group_by(stress_relief_activities) %>%
  summarise(srednia = mean(depression)) %>%
  

plot_ly(x = ~stress_relief_activities, y = ~ srednia,
          type = 'bar', #histogram sam liczy i policzylby l studentow zamiast depresji
          marker = list(color = 'hotpink')) %>%
  layout(title = 'Sposoby radzenia sobie ze stresem',
         plot_bgcolor = 'white', 
        paper_bgcolor = 'white',
        xaxis = list(
      title = "Czynność",
      gridcolor = 'grey80',   
      zerolinecolor = 'grey80' #kolor linii 0
    ),
    yaxis = list(
      title = "Średni poziom nasilenia objawów depresyjnych",
      gridcolor = 'grey80',      
      zerolinecolor = 'grey80'
    )
  )


fig

4.5 Czy depresja i lęk łączą się ze sobą?

Poniższe zestawienie wizualizuje silną zależność między lękiem, izolacją i depresją.

pal <- c("#7586e6", "#47d1de", "#81d699", "#e5f069", "#f04141")
fig <- plot_ly(data = studenci_analiza, x = ~anxiety, y = ~isolation, color = ~as.factor(depression), colors = pal,
               type = 'scatter',  # wymusza typ wykresu
               mode = 'markers', #zeby byly kropki
               marker = list(size = 10)) %>%
               layout(
    title = list(text = "Relacja poziomu lęku i izolacji względem depresji"),
    xaxis = list(title = "Poziom odczuwanego lęku", gridcolor = 'grey80'),
    yaxis = list(title = "Poziom izolacji społecznej",  gridcolor = 'grey80'),
    plot_bgcolor = 'white',
    paper_bgcolor = 'white',
    legend = list(title = list(text = "Poziom depresji")))

fig

5. Wnioski

Na podstawie przeprowadzonej analizy można sformułować następujące wnioski:

STYL ŻYCIA

  • Sen: tudenci śpiący najdłużej charakteryzują się najmniejszym poziomem nasilenia objawów depresyjnych;
  • Aktywność fizyczna: Optymalna ilość treningów w tygodniu dla dobrego samopoczucia to 4-6.

CZYNNIKI DEMOGRAFICZNE

  • Płeć: Kobiety deklarują wyższe natężenie objawów pogorszenia dobrostanu psychicznego;
  • Wiek: Najgorzej czują się najmłodsi i najstarsi studenci;
  • Miejsce zamieszkania: Adres zamieszkania (na kampusie lub poza nim) nie wpływa na dobrostan psychiczny studentów.

CZYNNIKI AKADEMICKIE

  • Rok studiów: Studenci na drugim roku czują się najgorzej, natomiast na czwartym - najlepiej;
  • Satysfakcja z nauki: Im większy jest stopień satysfakcji z nauki, tym mniejszy staje się poziom depresji;
  • Presja: Presja akademicka i obciążenie nauką wpływają negatywnie na samopoczucie studentów.

KORELACJE:

  • Przeciętny student odczuwa na podobnym poziomie lęk, izolację, depresję oraz niepewność przyszłości;
  • najsilniej korelują ze sobą lęk i depresja, a najsłabiej izolacja i niepewność przyszłości;
  • poziom izolacji spolecznej, leku i depresji silnie ze soba korelują.

STRES:

  • najwięcej studentow radzi sobie ze stresem udzielając się w aktywnościach religijnych, a drugą z kolei najpopularniejszą strategią jest rozrywka online;
  • najlepsze samopoczucie mają studenci, którzy radzą sobie ze stresem mając kontakty społeczne.