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
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")
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)
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 ...
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)
| Missing_Data | |
|---|---|
| ID…3 | 66667 |
| JK | 68667 |
| phq | 155577 |
| gad | 152447 |
| we | 160115 |
| bo1 | 153236 |
| bo2 | 145252 |
| bo3 | 150937 |
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)
| 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)
| 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 |