Packages

Paket-paket (packages) berikut digunakan untuk pengolahan data, analisis, serta pembuatan laporan. Setiap paket perlu diunduh terlebih dahulu dengan fungsi install.packages(” “) sebelum dapat dipanggil atau dijalankan.

library(e1071)       # untuk fungsi-fungsi statistik (misalnya menghitung skewness dan kurtosis)
library(kableExtra)  # untuk membuat tabel yang lebih rapi
library(knitr)       # untuk menggabungkan kode dan teks dalam laporan R Markdown (knit)
library(readxl)      # untuk membaca file Excel (.xls atau .xlsx) ke dalam R
library(rmarkdown)   # untuk me-render dokumen R Markdown ke format HTML, PDF, atau Word
library(tidyverse)   # untuk manipulasi, analisis, dan visualisasi data

Data Source

Working directory diarahkan ke folder tempat dataset disimpan agar file dapat di-import menggunakan fungsi read_xlsx(” “).

Nama dataset yang digunakan adalah “Dataset UTS — 518031.xlsx”.

data <- read_xlsx("Dataset UTS — 518031.xlsx")

Mengonversi Jenis dan Format Data

Dataset yang diberikan memiliki beberapa variabel dengan tipe data yang belum sesuai. Beberapa skor yang seharusnya bernilai numerik masih tersimpan sebagai teks (character). Oleh karena itu, perlu dilakukan konversi jenis data, khususnya pada variabel-variabel skor, agar dapat diolah secara kuantitatif.

Selain itu, dataset awal memiliki format long, di mana setiap respons untuk variabel BO (Burn Out) disajikan dalam baris yang terpisah. Format ini kurang efisien untuk analisis tertentu, sehingga perlu dikonversi menjadi format wide, di mana setiap kategori BO akan menjadi kolom tersendiri.

data <- data %>%
  # Mengonversi menjadi jenis data numerik
  mutate(across(c(we, gad, phq, Response), as.numeric),
         BO = as.character(BO)) %>%
  # Mengonversi menjadi format data *wide*
  pivot_wider(names_from = BO, values_from = Response)

Task 1: Data Wrangling

Dataset memiliki delapan variabel utama dan dua kolom ID dengan isi berbeda tanpa keterangan yang jelas dari sumber data. Untuk menjaga konsistensi, digunakan kolom ID…3 karena memiliki urutan yang lebih sistematis.

Selanjutnya, variabel-variabel diurutkan sesuai urutan yang diminta, yaitu: ID, JK, phq, gad, we, bo1, bo2, dan bo3. Setiap variabel juga divalidasi berdasarkan rentang skor sesuai skala pengukurannya, dan nilai di luar rentang diubah menjadi missing value (NA).

Pendekatan ini dipilih agar data lain yang masih valid dari partisipan yang sama tetap dipertahankan dan ukuran dataset tidak berkurang. Selain itu, sebagian besar fungsi analisis di R dapat menangani nilai NA dengan argumen na.rm = TRUE, sehingga proses analisis tetap dapat dilakukan tanpa mengubah integritas data.

Terakhir, data diurutkan berdasarkan nilai phq secara menurun (descending) dan bo2 secara menaik (ascending) serta ditampilkan strukturnya.

data_task1 <- data %>%
  # Mengurutkan variabel
  select(3, 4:5, 2, 1, 7:9) %>%
  # Memvalidasi rentang nilai tiap variabel
  mutate(
    phq = ifelse(phq >= 0 & phq <= 3, phq, NA),
    gad = ifelse(gad >= 0 & gad <= 3, gad, NA),
    we  = ifelse(we  >= 1 & we  <= 5, we, NA),
    bo1 = ifelse(bo1 >= 0 & bo1 <= 6, bo1, NA),
    bo2 = ifelse(bo2 >= 0 & bo2 <= 6, bo2, NA),
    bo3 = ifelse(bo3 >= 0 & bo3 <= 6, bo3, NA)
  ) %>%
  # Mengurutkan data variabel phq dan bo2
  arrange(desc(phq), bo2)
  # Menampilkan struktur data
  data_task1 %>% head(10)
## # A tibble: 10 × 8
##    ID...3   JK       phq   gad    we   bo1   bo2   bo3
##    <chr>    <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 ID_3986  female     3    NA    NA    NA     0    NA
##  2 ID_4232  female     3     2     4    NA     0    NA
##  3 ID_6419  male       3    NA    NA    NA     0    NA
##  4 ID_7127  FEMALE     3    NA    NA    NA     0    NA
##  5 ID_7610  male       3    NA    NA    NA     0    NA
##  6 ID_27065 MALE       3    NA    NA    NA     0    NA
##  7 ID_29420 Female     3    NA    NA    NA     0    NA
##  8 ID_30359 female     3    NA    NA    NA     0    NA
##  9 ID_30740 MALE       3    NA    NA    NA     0    NA
## 10 ID_36656 female     3    NA    NA    NA     0    NA
  str(data_task1)
## tibble [166,667 × 8] (S3: tbl_df/tbl/data.frame)
##  $ ID...3: chr [1:166667] "ID_3986" "ID_4232" "ID_6419" "ID_7127" ...
##  $ JK    : chr [1:166667] "female" "female" "male" "FEMALE" ...
##  $ phq   : num [1:166667] 3 3 3 3 3 3 3 3 3 3 ...
##  $ gad   : num [1:166667] NA 2 NA NA NA NA NA NA NA NA ...
##  $ we    : num [1:166667] NA 4 NA NA NA NA NA NA NA NA ...
##  $ bo1   : num [1:166667] NA NA NA NA NA NA NA NA NA NA ...
##  $ bo2   : num [1:166667] 0 0 0 0 0 0 0 0 0 0 ...
##  $ bo3   : num [1:166667] NA NA NA NA NA NA NA NA NA NA ...

Task 2: Missing Data

Langkah selanjutnya adalah memeriksa jumlah data yang hilang (missing values) pada setiap variabel. Hasilnya kemudian ditampilkan dalam bentuk tabel agar lebih mudah dibaca.

kable(data.frame(Missing_Data = colSums(is.na(data_task1))), 
             caption = "Jumlah Missing Data per Variabel") %>% 
  kable_styling(full_width = FALSE)
Jumlah Missing Data per Variabel
Missing_Data
ID…3 66667
JK 68667
phq 155577
gad 152447
we 160115
bo1 153236
bo2 145252
bo3 150937

Task 3: Statistik

Langkah ini bertujuan untuk menghitung statistik deskriptif (rata-rata, standard deviation, dan skewness) serta matriks korelasi antarvariabel.

Nilai yang hilang (missing values) ditangani dengan metode pairwise complete observation agar setiap pasangan variabel tetap dapat dihitung meskipun ada data kosong.

# Statistik Deskriptif
stat_deskriptif <- data_task1 %>%
  summarise(across(where(is.numeric),
                   list(Mean = ~mean(.x, na.rm = TRUE),
                        SD   = ~sd(.x, na.rm = TRUE),
                        Skewness = ~skewness(.x, na.rm = TRUE)),
                   .names = "{.col}_{.fn}")) %>%
  pivot_longer(everything(),
               names_to = c("Variabel", "Statistik"),
               names_sep = "_") %>%
  pivot_wider(names_from = Statistik, values_from = value) %>%
  mutate(across(where(is.numeric), round, 2))

# Matriks Korelasi
matriks_korelasi <- data %>%
  select(where(is.numeric)) %>%
  cor(use = "pairwise.complete.obs") %>%
  round(2) %>%
  as.data.frame()

# Menampilkan hasil
kable(stat_deskriptif, caption = "Tabel 1. Statistik Deskriptif") %>%
  kable_styling(full_width = FALSE)
Tabel 1. Statistik Deskriptif
Variabel Mean SD Skewness
phq 1.50 1.11 0.00
gad 1.49 1.11 0.02
we 3.14 1.35 -0.27
bo1 3.22 2.08 -0.09
bo2 2.99 2.00 0.00
bo3 2.95 1.95 0.01
kable(matriks_korelasi, caption = "Tabel 2. Matriks Korelasi") %>%
  kable_styling(full_width = FALSE)
Tabel 2. Matriks Korelasi
we gad phq bo1 bo2 bo3
we 1.00 0 -0.01 0.01 0.00 0.01
gad 0.00 1 0.00 0.00 0.00 0.00
phq -0.01 0 1.00 0.00 -0.01 0.00
bo1 0.01 0 0.00 1.00 0.00 0.00
bo2 0.00 0 -0.01 0.00 1.00 0.00
bo3 0.01 0 0.00 0.00 0.00 1.00