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.
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
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>
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 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 menggunakan boxplot untuk melihat perbedaan distribusi tingkat stres berdasarkan gender.
ggplot(Dataset_manova, aes(x = gender, y = stress_level, fill = gender)) +
geom_boxplot()
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.
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
cortest.bartlett(cor(Y), n = nrow(Y))
## $chisq
## [1] 327.1586
##
## $p.value
## [1] 1.315404e-70
##
## $df
## [1] 3
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 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 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 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")