1 Persiapan

Pada tahap ini, beberapa paket digunakan dalam R untuk membantu proses pengolahan dan analisis data.

  • Paket readxl digunakan untuk membaca file Excel yang berisi dataset.

  • Paket tidyverse digunakan untuk melakukan manipulasi data, seperti seleksi kolom, penggabungan tabel, serta pembersihan nilai di luar rentang yang wajar.

  • Paket naniar digunakan untuk memeriksa dan meringkas jumlah data yang hilang (missing values).

  • Paket mice berfungsi untuk melakukan proses imputasi data, yaitu mengisi nilai yang hilang dengan pendekatan statistik yang sesuai.

  • Paket e1071 digunakan untuk menghitung nilai skewness sebagai bagian dari analisis deskriptif.

  • Paket rmarkdown digunakan untuk menampilkan hasil analisis dalam format tabel interaktif dan memudahkan penyajian laporan secara sistematis.

# Paket Utama
library(readxl)
library(tidyverse)
library(naniar)
library(mice)
library(e1071)
library(rmarkdown)

2 Wrangling Data

2.1 Merapikan Data

Langkah pertama dalam proses analisis adalah memuat data mentah dari file Excel berjudul “Dataset UTS - 517158.xlsx”. Data ini berisi hasil pengukuran beberapa variabel psikologis, seperti PHQ, GAD, Work Engagement (WE), dan Burnout (BO) yang masih dalam format panjang (long format).

Selanjutnya dilakukan transformasi bentuk data dari long menjadi wide menggunakan fungsi pivot_wider(). Transformasi ini diperlukan agar setiap responden memiliki satu baris data dengan kolom-kolom terpisah untuk masing-masing komponen pengukuran (bo1, bo2, bo3). Proses ini menggunakan kolom ID...6 sebagai pengenal unik responden.

Kemudian dilakukan penggabungan (merge) antara data identitas responden (kolom 1–5) dan data hasil pengukuran BO yang telah diubah menjadi wide menggunakan fungsi inner_join. Setelah digabung, kolom ID...3 diubah namanya menjadi ID agar lebih konsisten dan mudah dibaca. Dataset akhir hanya menyertakan variabel yang relevan untuk analisis, yaitu ID, JK, phq, gad, we, bo1, bo2, dan bo3.

# Data Source
dataset <- read_excel("Dataset UTS - 517158.xlsx")

# Transform Long to Wide
bo_wide <- pivot_wider(data = dataset,
                         id_cols = ID...6, 
                       names_from = BO, 
                       values_from = Response) 

# Penggabungan Data dan Pengurutan Kolom
dataset <- inner_join(dataset [,c(1:5)], bo_wide, by = c("ID...3" = "ID...6")) %>%
  rename(ID = ID...3) %>%
  select(ID, JK, phq, gad, we, bo1, bo2, bo3) 

# Pengecekan Data
lapply(dataset [,c(2:7)], unique)
## $JK
## [1] "male"   "female" "Female" "Male"   "MALE"   "FEMALE" NA      
## 
## $phq
##  [1] "29" "7"  "6"  "26" "17" "10" NA   "22" "20" "16" "13" "21" "2"  "30" "15"
## [16] "19" "8"  "27" "14" "25" "24" "1"  "3"  "11" "28" "9"  "18" "0"  "4"  "5" 
## [31] "12" "23"
## 
## $gad
##  [1] "0"  "5"  "25" "14" "21" "4"  "22" "15" "8"  "9"  "3"  "16" "2"  "18" "13"
## [16] NA   "20" "1"  "19" "23" "24" "12" "6"  "11" "17" "10" "7" 
## 
## $we
##  [1] "32" "55" "66" "31" "26" "21" "74" "45" "10" "28" "50" "1"  "9"  "15" "53"
## [16] "6"  "38" "1A" "19" "46" "39" "73" "22" "62" "72" "54" "2"  "51" "70" "1o"
## [31] "36" "67" "20" "11" "24" "47" "69" "71" "18" "33" "63" "5"  "3"  NA   "80"
## [46] "16" "44" "61" "84" "30" "57" "82" "14" "41" "42" "34" "37" "40" "25" "85"
## [61] "68" "27" "8"  "35" "17" "79" "64" "56" "43" "65" "58" "23" "49" "78" "59"
## [76] "29" "60" "77" "75" "48" "13" "12" "81" "4"  "52" "76" "7"  "83"
## 
## $bo1
##  [1] "3"  "5"  "30" "7"  "46" "4"  "43" "21" "41" "45" "10" "11" "17" "54" "22"
## [16] "19" "29" "6"  NA   "14" "49" "32" "15" "13" "47" "2o" "27" "8"  "37" "40"
## [31] "36" "52" "2"  "38" "9"  "50" "20" "42" "18" "28" "26" "0"  "33" "25" "04"
## [46] "23" "35" "16" "24" "51" "12" "44" "48" "39" "53" "1"  "34" "31"
## 
## $bo2
##  [1] "19" "28" "6"  "18" "0"  "2o" "22" "15" "14" "30" "2"  "9"  "7"  "13" "8" 
## [16] "17" NA   "21" "11" "29" "26" "1"  "27" "16" "5"  "24" "25" "20" "23" "3" 
## [31] "4"  "10" "12"

2.2 Membersihkan dan Mengurutkan Data

Tahap berikutnya adalah menyeragamkan penulisan variabel JK dengan huruf kecil (female dan male), mengonversinya menjadi tipe data faktor, serta mengubah variabel phq, gad, we, bo1, bo2, dan bo3 menjadi tipe numerik. Hal ini dilakukan karena penulisan kategori jenis kelamin (JK) pada data awal tidak seragam, misalnya ada variasi seperti Male, male, atau MALE. Penyeragaman menjadi huruf kecil dan konversi ke tipe data faktor diperlukan agar proses analisis, termasuk imputasi data, dapat berjalan dengan benar. Selain itu, terdapat nilai yang tidak valid atau tidak numerik pada beberapa variabel (misalnya kesalahan pengetikan seperti “2o” alih-alih “20”) sehingga pembersihan dan konversi tipe data menjadi numeric perlu dilakukan untuk memastikan seluruh nilai dapat dianalisis secara statistik.

Selain itu, dilakukan pula pembersihan nilai di luar rentang yang valid. Setiap variabel memiliki rentang skor maksimum dan minimum yang sesuai skala pengukuran:

  • phq valid antara 0–27

  • gad valid antara 0–21

  • we valid antara 17–85

  • bo1 valid antara 0–54

  • bo2 valid antara 0–30

  • bo3 valid antara 0–48

Nilai yang berada di luar rentang tersebut dikonversi menjadi NA (missing value) agar tidak memengaruhi analisis selanjutnya.

Setelah pembersihan, skor phq diurutkan dari tertinggi ke terendah dan kemudian bo2 dari yang terendah ke tertinggi. Tahap akhir pada bagian ini menampilkan 10 baris pertama data yang telah dibersihkan serta struktur dataset (str()) untuk memastikan tipe data dan variabel sudah sesuai.

# Pembersihan Value di Luar Rentang
dataset_clean <- dataset %>%
  mutate(
    JK = tolower(JK),
    JK = factor(JK, levels = c("male", "female")), 
    across(c(phq, gad, we, bo1, bo2, bo3), as.numeric),
    phq = ifelse(phq < 0 | phq > 27, NA, phq),
    gad = ifelse(gad < 0 | gad > 21, NA, gad),
    we = ifelse(we < 17 | we > 85, NA, we),
    bo1 = ifelse(bo1 < 0 | bo1 > 54, NA, bo1),
    bo2 = ifelse(bo2 < 0 | bo2 > 30, NA, bo2),
    bo3 = ifelse(bo3 < 0 | bo3 > 48, NA, bo3)
  )

# Pengurutan Data
dataset_clean <- dataset_clean %>%
  arrange(desc(phq), bo2)

# Tampilan Data
head(dataset_clean, 10)
str(dataset_clean)
## tibble [100,000 × 8] (S3: tbl_df/tbl/data.frame)
##  $ ID : chr [1:100000] "ID_2109" "ID_3839" "ID_3900" "ID_4961" ...
##  $ JK : Factor w/ 2 levels "male","female": 1 2 2 2 2 2 2 2 1 2 ...
##  $ phq: num [1:100000] 27 27 27 27 27 27 27 27 27 27 ...
##  $ gad: num [1:100000] 15 NA 16 8 8 11 13 11 20 4 ...
##  $ we : num [1:100000] 30 76 NA 39 50 NA NA 35 51 20 ...
##  $ bo1: num [1:100000] 0 19 0 9 12 54 16 51 33 30 ...
##  $ bo2: num [1:100000] 0 0 0 0 0 0 0 0 0 0 ...
##  $ bo3: num [1:100000] 10 47 1 38 35 0 18 7 27 48 ...

3 Missing Data

Sebelum memulai proses analisis, dilakukan pemeriksaan terhadap data hilang (missing). Semua variabel dalam dataset diperiksa, yang mencakup variabel ID, JK, phq, gad, we, bo1, bo2, dan bo3.

Missing data ditangani menggunakan metode imputasi dengan pertimbangan bahwa penghapusan data (listwise deletion) dapat mengurangi jumlah sampel secara signifikan dan berpotensi menurunkan kekuatan analisis. Imputasi dilakukan menggunakan paket mice dengan multiple imputation (m = 5). Metode yang digunakan adalah sebagai berikut.

  • Variabel kategorik JK diimputasi menggunakan logistic regression (logreg).

  • Variabel numerik (phq, gad, we, bo1, bo2, bo3) diimputasi menggunakan Predictive Mean Matching (pmm).

Metode ini dipilih karena mampu mempertahankan distribusi asli data dan mengurangi bias yang dapat muncul akibat pengisian nilai missing.

Setelah proses imputasi, dilakukan pemeriksaan ulang untuk memastikan bahwa seluruh missing data telah berhasil terisi dengan baik.

# Check Missing Data
missing_before <- naniar::miss_var_summary(dataset_clean) 

# Penanganan Missing Data
meth <- c(
  ID = "",
  JK = "logreg",
  phq = "pmm",
  gad = "pmm",
  we = "pmm",
  bo1 = "pmm",
  bo2 = "pmm", 
  bo3 = "pmm"
)

imputed_data <- mice(dataset_clean, m = 5, method = meth, printFlag = FALSE)

completed_data <- complete(imputed_data, 1)

# Check Perubahan Missing Data
missing_after <- naniar::miss_var_summary(completed_data)

missing_compare <- missing_before %>%
  select(variable, n_miss_before = n_miss, pct_miss_before = pct_miss) %>%
  inner_join(
    missing_after %>%
      select(variable, n_miss_after = n_miss, pct_miss_after = pct_miss),
    by = "variable"
  )

# Tampilan Tabel Perbandingan
rmarkdown::paged_table(missing_compare)

Tabel di atas menunjukkan perbandingan jumlah nilai missing sebelum dan sesudah imputasi. Sesudah proses imputasi, semua variabel numerik yang terpilih telah terisi (n_miss_after = 0) sehingga analisis deskriptif dan korelasi dapat dilakukan pada dataset.

4 Statistik Deskriptif dan Korelasi

Setelah imputasi, kemudian dihitung statistik deskriptif (mean, standar deviasi, skewness) untuk setiap variabel numerik yang relevan. Variabel yang dianalisis meliputi phq (depresi), gad (kecemasan), we (work engagement), serta tiga dimensi burnout (bo1, bo2, bo3). Matriks korelasi Pearson juga dihitung pada variabel-variabel tersebut.

# Pemilihan Variabel Untuk Tabel Gabungan 
vars_for_corr <- c("phq", "gad", "we", "bo1", "bo2","bo3")

# Subset Data Numerik 
sel <- completed_data %>%
  select(all_of(vars_for_corr))

# Analisis Deskriptif: mean, SD, skewness
desc_df <- data.frame(
  variable  = vars_for_corr,
  mean      = sapply(sel, function(x) mean(x, na.rm = TRUE)),
  sd        = sapply(sel, function(x) sd(x, na.rm = TRUE)),
  skewness  = sapply(sel, function(x) e1071::skewness(x, na.rm = TRUE, type = 2))
)

# Matriks Korelasi (Pearson)
cor_mat <- cor(sel, use = "pairwise.complete.obs", method = "pearson")

# Penggabungan dalam Satu Tabel
combo <- cbind(
  desc_df,
  as.data.frame(cor_mat[desc_df$variable, desc_df$variable])
)

# Pengubahan Nama Kolom Korelasi
names(combo)[ (ncol(desc_df)+1):ncol(combo) ] <- paste0("r_", vars_for_corr)

# Pengubahan Rownames
rownames(combo) <- 1:6

# Perapian Desimal
combo <- combo %>%
  mutate(across(where(is.numeric), ~round(., 2)))

# Display
paged_table(combo)
  • Berdasarkan hasil analisis deskriptif, rata-rata skor pada seluruh variabel menunjukkan tingkat yang relatif sedang dan standar deviasi yang moderat. Hal ini menandakan adanya variasi antarpartisipan, tetapi tidak menunjukkan perbedaan yang ekstrem.
  • Nilai skewness sebagian besar mendekati nol sehingga distribusi data dapat dikatakan cukup normal. Hal ini menunjukkan bahwa data ini dapat digunakan untuk analisis parametrik seperti korelasi Pearson.
  • Hasil analisis korelasi menghasilkan nilai korelasi yang mendekati 0 pada seluruh variabel. Hal ini menandakan bahwa perubahan pada satu variabel tidak disertai perubahan terarah pada variabel lain.