Pendahuluan

Kesehatan mental mahasiswa menjadi salah satu isu penting dalam dunia pendidikan, terutama berkaitan dengan tingkat stres, kecemasan, dan depresi. Faktor-faktor seperti beban akademik, pola tidur, dan perbedaan karakteristik individu seperti gender diduga memiliki pengaruh terhadap kondisi tersebut.

Penelitian ini bertujuan untuk menganalisis pengaruh gender terhadap kondisi kesehatan mental mahasiswa yang diukur melalui variabel stress level, anxiety score, dan depression score. Selain itu, digunakan metode Multivariate Analysis of Covariance (MANCOVA) untuk mengontrol variabel kovariat berupa durasi tidur (sleep_hours), sehingga hasil analisis menjadi lebih akurat.

Load Library

library(readr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(psych)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
library(biotools)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## ---
## biotools version 4.3
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(corrplot)
## corrplot 0.95 loaded

Load Data

Dataset <- read_csv("student_mental_health_burnout.csv")
## Rows: 1000000 Columns: 20
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (2): gender, risk_level
## dbl (18): age, academic_year, study_hours_per_day, exam_pressure, academic_p...
## 
## ℹ 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.
str(Dataset)
## spc_tbl_ [1,000,000 Ă— 20] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ age                 : num [1:1000000] 23 20 29 27 24 29 21 23 26 19 ...
##  $ gender              : chr [1:1000000] "Male" "Male" "Male" "Male" ...
##  $ academic_year       : num [1:1000000] 2 3 2 4 4 3 3 2 4 3 ...
##  $ study_hours_per_day : num [1:1000000] 5.6 5.6 2.58 4.61 2.19 ...
##  $ exam_pressure       : num [1:1000000] 6.49 5.63 6.02 6.68 4.01 ...
##  $ academic_performance: num [1:1000000] 68.4 67.7 58.4 68.9 69.1 ...
##  $ stress_level        : num [1:1000000] 4.117 0.349 3.476 6.779 1.855 ...
##  $ anxiety_score       : num [1:1000000] 2.28 0 2.43 4.51 1.1 ...
##  $ depression_score    : num [1:1000000] 1.987 0 0.852 4.286 0 ...
##  $ sleep_hours         : num [1:1000000] 6.88 7.46 8.95 4.57 5.99 ...
##  $ physical_activity   : num [1:1000000] 2.73 3.69 3.3 2.07 4.03 ...
##  $ social_support      : num [1:1000000] 6.47 0 6.9 2.35 4.51 ...
##  $ screen_time         : num [1:1000000] 4.99 3.86 5.43 6.3 4.9 ...
##  $ internet_usage      : num [1:1000000] 4.98 5.14 3.06 6.93 5.13 ...
##  $ financial_stress    : num [1:1000000] 3.45 2.81 4.92 6.92 4.38 ...
##  $ family_expectation  : num [1:1000000] 3.59 5.48 6.07 6.56 5.93 ...
##  $ burnout_score       : num [1:1000000] 2.04 0 0 7.23 0 ...
##  $ mental_health_index : num [1:1000000] 7.07 9.86 7.63 4.65 8.93 ...
##  $ risk_level          : chr [1:1000000] "Low" "Low" "Low" "High" ...
##  $ dropout_risk        : num [1:1000000] 1.747 0 0.697 5.381 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   age = col_double(),
##   ..   gender = col_character(),
##   ..   academic_year = col_double(),
##   ..   study_hours_per_day = col_double(),
##   ..   exam_pressure = col_double(),
##   ..   academic_performance = col_double(),
##   ..   stress_level = col_double(),
##   ..   anxiety_score = col_double(),
##   ..   depression_score = col_double(),
##   ..   sleep_hours = col_double(),
##   ..   physical_activity = col_double(),
##   ..   social_support = col_double(),
##   ..   screen_time = col_double(),
##   ..   internet_usage = col_double(),
##   ..   financial_stress = col_double(),
##   ..   family_expectation = col_double(),
##   ..   burnout_score = col_double(),
##   ..   mental_health_index = col_double(),
##   ..   risk_level = col_character(),
##   ..   dropout_risk = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

Data Preparation

Pada tahap ini dilakukan proses pembersihan dan seleksi data. Data diambil secara acak sebanyak 200 observasi untuk mempermudah proses analisis dan menghindari masalah komputasi.

Selanjutnya dipilih variabel yang relevan dengan penelitian, yaitu gender sebagai variabel independen, stress level, anxiety score, dan depression score sebagai variabel dependen, serta sleep_hours sebagai variabel kovariat.

Data yang memiliki missing value dihapus menggunakan fungsi na.omit(), dan variabel kategorikal seperti gender diubah menjadi tipe faktor agar dapat dianalisis dengan metode MANOVA dan MANCOVA.

summary(Dataset)
##       age        gender          academic_year   study_hours_per_day
##  Min.   :17   Length:1000000     Min.   :1.000   Min.   : 0.000     
##  1st Qu.:20   Class :character   1st Qu.:2.000   1st Qu.: 3.651     
##  Median :23   Mode  :character   Median :3.000   Median : 4.998     
##  Mean   :23                      Mean   :2.501   Mean   : 5.002     
##  3rd Qu.:26                      3rd Qu.:4.000   3rd Qu.: 6.346     
##  Max.   :29                      Max.   :4.000   Max.   :14.000     
##  exam_pressure    academic_performance  stress_level    anxiety_score   
##  Min.   : 1.000   Min.   :42.37        Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 4.945   1st Qu.:67.18        1st Qu.: 3.103   1st Qu.: 1.924  
##  Median : 5.999   Median :71.00        Median : 4.244   Median : 2.970  
##  Mean   : 5.999   Mean   :71.00        Mean   : 4.246   Mean   : 2.986  
##  3rd Qu.: 7.052   3rd Qu.:74.82        3rd Qu.: 5.385   3rd Qu.: 4.015  
##  Max.   :10.000   Max.   :97.25        Max.   :10.000   Max.   :10.000  
##  depression_score    sleep_hours     physical_activity social_support  
##  Min.   :0.000000   Min.   : 3.000   Min.   :0.000     Min.   : 0.000  
##  1st Qu.:0.005198   1st Qu.: 5.491   1st Qu.:1.991     1st Qu.: 3.650  
##  Median :1.047839   Median : 6.502   Median :3.001     Median : 4.999  
##  Mean   :1.274728   Mean   : 6.502   Mean   :3.011     Mean   : 5.000  
##  3rd Qu.:2.086397   3rd Qu.: 7.515   3rd Qu.:4.011     3rd Qu.: 6.350  
##  Max.   :8.530800   Max.   :10.000   Max.   :7.000     Max.   :10.000  
##   screen_time     internet_usage   financial_stress family_expectation
##  Min.   : 1.000   Min.   : 1.000   Min.   : 0.000   Min.   : 0.000    
##  1st Qu.: 3.651   1st Qu.: 3.491   1st Qu.: 3.657   1st Qu.: 4.647    
##  Median : 5.004   Median : 5.002   Median : 5.001   Median : 6.000    
##  Mean   : 5.019   Mean   : 5.038   Mean   : 5.003   Mean   : 5.983    
##  3rd Qu.: 6.351   3rd Qu.: 6.507   3rd Qu.: 6.355   3rd Qu.: 7.352    
##  Max.   :12.000   Max.   :14.000   Max.   :10.000   Max.   :10.000    
##  burnout_score     mental_health_index  risk_level         dropout_risk  
##  Min.   : 0.0000   Min.   : 1.310      Length:1000000     Min.   :0.000  
##  1st Qu.: 0.1248   1st Qu.: 6.142      Class :character   1st Qu.:0.000  
##  Median : 1.4965   Median : 7.074      Mode  :character   Median :1.010  
##  Mean   : 1.7841   Mean   : 7.023                         Mean   :1.325  
##  3rd Qu.: 2.8895   3rd Qu.: 7.962                         3rd Qu.:2.174  
##  Max.   :10.0000   Max.   :10.000                         Max.   :9.326
set.seed(123)
Dataset_sample <- Dataset[sample(nrow(Dataset), 200), ]
Dataset_baru <- Dataset_sample[, c("gender","stress_level","anxiety_score","depression_score","study_hours_per_day","academic_year","sleep_hours","screen_time","financial_stress","burnout_score")]
Dataset_baru <- na.omit(Dataset_baru)
dim(Dataset_baru)
## [1] 200  10
Dataset_manova <- Dataset_baru[, c("gender","stress_level","anxiety_score","depression_score")]
Dataset_manova$gender <- as.factor(Dataset_manova$gender)

Analisis Deskriptif

Analisis deskriptif dilakukan untuk melihat gambaran umum data berdasarkan gender.

describe(Dataset_manova)
##                  vars   n mean   sd median trimmed  mad min  max range skew
## gender*             1 200 1.57 0.55   2.00    1.56 0.00   1 3.00  2.00 0.24
## stress_level        2 200 4.11 1.73   4.00    4.08 1.54   0 8.57  8.57 0.18
## anxiety_score       3 200 2.90 1.55   2.82    2.83 1.70   0 7.90  7.90 0.46
## depression_score    4 200 1.20 1.30   0.84    1.00 1.24   0 6.32  6.32 1.11
##                  kurtosis   se
## gender*             -0.97 0.04
## stress_level        -0.11 0.12
## anxiety_score        0.16 0.11
## depression_score     0.71 0.09
Dataset_manova %>%
group_by(gender) %>%
summarise(
mean_stress = mean(stress_level),
mean_anxiety = mean(anxiety_score),
mean_depression = mean(depression_score),
.groups = "drop")
## # A tibble: 3 Ă— 4
##   gender mean_stress mean_anxiety mean_depression
##   <fct>        <dbl>        <dbl>           <dbl>
## 1 Female        4.05         2.93            1.18
## 2 Male          4.21         2.91            1.21
## 3 Other         3.32         2.27            1.26

Visualisasi Data

Visualisasi menggunakan boxplot untuk melihat perbedaan distribusi tingkat stres berdasarkan gender.

ggplot(Dataset_manova, aes(x = gender, y = stress_level, fill = gender)) +
  geom_boxplot()

Uji Asumsi

Sebelum dilakukan analisis MANOVA, dilakukan uji asumsi untuk memastikan bahwa data memenuhi syarat analisis multivariat. Uji yang dilakukan meliputi uji korelasi antar variabel dependen, uji Bartlett, serta uji Box’s M untuk kesamaan matriks kovarians.

Korelasi antar variabel

Y <- Dataset_baru[, c("stress_level", "anxiety_score", "depression_score")]
cor(Y)
##                  stress_level anxiety_score depression_score
## stress_level        1.0000000     0.7999106        0.6804776
## anxiety_score       0.7999106     1.0000000        0.6000590
## depression_score    0.6804776     0.6000590        1.0000000

Bartlett Test

cortest.bartlett(cor(Y), n = nrow(Y))
## $chisq
## [1] 327.1586
## 
## $p.value
## [1] 1.315404e-70
## 
## $df
## [1] 3

Box’s M Test

Dataset_baru$group <- Dataset_baru$gender
biotools::boxM(Y, Dataset_baru$group)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 5.4207, df = 12, p-value = 0.9424

Analisis MANOVA

Analisis MANOVA digunakan untuk menguji apakah terdapat perbedaan tingkat stress, anxiety, dan depression berdasarkan gender.

model_manova <- manova(
  cbind(stress_level, anxiety_score, depression_score) ~ gender,
  data = Dataset_manova
)

summary(model_manova, test = "Wilks")
##            Df   Wilks approx F num Df den Df Pr(>F)
## gender      2 0.97699  0.76099      6    390  0.601
## Residuals 197
summary.aov(model_manova)
##  Response stress_level :
##              Df Sum Sq Mean Sq F value Pr(>F)
## gender        2   5.17  2.5837  0.8629 0.4235
## Residuals   197 589.84  2.9941               
## 
##  Response anxiety_score :
##              Df Sum Sq Mean Sq F value Pr(>F)
## gender        2   2.50  1.2479  0.5143 0.5987
## Residuals   197 478.01  2.4265               
## 
##  Response depression_score :
##              Df Sum Sq Mean Sq F value Pr(>F)
## gender        2   0.06 0.02762  0.0161 0.9841
## Residuals   197 338.63 1.71892

Hasil uji MANOVA menunjukkan bahwa nilai Wilks’ Lambda digunakan untuk menentukan signifikansi pengaruh gender terhadap variabel dependen secara simultan. Jika nilai p-value < 0.05, maka dapat disimpulkan bahwa terdapat perbedaan yang signifikan berdasarkan gender.

Analisis MANCOVA

Analisis MANCOVA dilakukan dengan menambahkan variabel kovariat yaitu sleep_hours untuk mengontrol pengaruh durasi tidur terhadap kondisi kesehatan mental mahasiswa.

Dataset_mancova <- Dataset_baru[, c("gender","stress_level","anxiety_score","depression_score","sleep_hours")]
model_mancova <- manova(
  cbind(stress_level, anxiety_score, depression_score) ~ gender + sleep_hours,
  data = Dataset_mancova
)
summary(model_mancova, test = "Wilks")
##              Df   Wilks approx F num Df den Df    Pr(>F)    
## gender        2 0.97610   0.7870      6    388    0.5805    
## sleep_hours   1 0.89527   7.5651      3    194 8.218e-05 ***
## Residuals   196                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary.aov(model_mancova)
##  Response stress_level :
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## gender        2   5.17   2.584  0.9523   0.3876    
## sleep_hours   1  58.04  58.040 21.3914 6.79e-06 ***
## Residuals   196 531.80   2.713                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response anxiety_score :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## gender        2   2.50   1.248  0.5616    0.5712    
## sleep_hours   1  42.47  42.472 19.1132 1.998e-05 ***
## Residuals   196 435.54   2.222                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response depression_score :
##              Df Sum Sq Mean Sq F value   Pr(>F)   
## gender        2   0.06  0.0276  0.0167 0.983400   
## sleep_hours   1  15.25 15.2503  9.2433 0.002686 **
## Residuals   196 323.38  1.6499                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil MANCOVA menunjukkan bahwa setelah mengontrol variabel sleep_hours, pengaruh gender terhadap stress, anxiety, dan depression dapat dianalisis dengan lebih akurat.

Jika nilai p-value < 0.05, maka dapat disimpulkan bahwa gender memiliki pengaruh signifikan terhadap kondisi kesehatan mental mahasiswa setelah mempertimbangkan durasi tidur.

Korelasi

korelasi dilakukan untuk melihat hubungan antar variabel, baik antar variabel dependen maupun dengan variabel kovariat.

mat_korelasi <- cor(Dataset_mancova[, c("stress_level","anxiety_score","depression_score","sleep_hours")])
corrplot(mat_korelasi, method = "color", addCoef.col = "black")