Pengaruh Durasi Belajar dan Penggunaan Internet terhadap Lama Tidur

Naura Gezy Putri Prasetyo

2026-09-30

Pendahuluan

Latar Belakang

Data mahasiswa merupakan salah satu sumber informasi yang sangat berguna bagi institusi pendidikan. Melalui data tersebut, berbagai karakteristik mahasiswa dapat digambarkan, mulai dari identitas dasar seperti jenis kelamin, umur, dan asal kota, hingga kebiasaan sehari-hari seperti lama belajar, lama penggunaan internet, dan lama tidur, serta capaian akademik seperti kehadiran, nilai tugas, nilai ujian, dan nilai akhir.

Informasi tersebut dapat dimanfaatkan untuk memahami pola perilaku mahasiswa dan mendukung proses pengambilan keputusan berbasis data.

Namun, data yang dikumpulkan dalam kondisi nyata hampir tidak selalu berada dalam keadaan sempurna. Data dapat mengandung missing value, inkonsistensi penulisan, data duplikat, kesalahan tipe data, maupun nilai yang tidak wajar. Jika masalah tersebut tidak ditangani, hasil analisis dapat menjadi kurang akurat.

Oleh karena itu, sebelum melakukan analisis lebih lanjut, diperlukan proses eksplorasi dan pembersihan data (data cleaning). Pada laporan ini dilakukan pemeriksaan kualitas dataset mahasiswa, penanganan masalah data, analisis hubungan antara lama belajar, penggunaan internet, dan lama tidur mahasiswa, serta proses integrasi dan encoding data.

Rumusan Masalah

  1. Permasalahan kualitas data apa saja yang terdapat dalam dataset mahasiswa?
  2. Bagaimana cara menangani permasalahan tersebut menggunakan Excel dan R?
  3. Apakah lama belajar per minggu dan lama penggunaan internet per hari berkaitan dengan lama tidur mahasiswa per hari?
  4. Bagaimana data dari dua sumber dapat digabungkan?
  5. Bagaimana variabel jam belajar dapat diubah menjadi kategori dan kode numerik?

Tujuan

Tujuan dari analisis ini adalah:

  1. Mengetahui kondisi awal dataset mahasiswa.
  2. Mengidentifikasi missing value, data duplikat, inkonsistensi, dan nilai yang tidak wajar.
  3. Melakukan proses pembersihan data.
  4. Mengetahui hubungan antara jam belajar, penggunaan internet, dan lama tidur.
  5. Melakukan integrasi data dari dua sumber.
  6. Mengubah jam belajar menjadi kategori dan kode numerik.

Gambaran Dataset

Informasi Dataset

Dataset yang digunakan merupakan dataset mahasiswa yang digunakan sebagai bahan latihan eksplorasi dan pembersihan data.

Pada kondisi awal, dataset terdiri dari 1.215 baris dan 15 kolom. Setiap baris merepresentasikan satu catatan mahasiswa, sedangkan setiap kolom merepresentasikan karakteristik tertentu.

library(readxl)
file_data <- read_excel("C:/Users/User/Downloads/file_data.xlsx")
View(file_data)
# Lokasi file data (ubah jika file dipindahkan)
df <- file_data
df
## # A tibble: 1,215 × 15
##    ID_Mahasiswa Nama           Gender     Umur Semester Program_Studi Kota_Asal
##           <dbl> <chr>          <chr>     <dbl>    <dbl> <chr>         <chr>    
##  1       100740 Mahasiswa_0740 Laki-laki    20        3 Statistika    Pekanbaru
##  2       100789 Mahasiswa_0789 Perempuan    21        3 Statistika    Dumai    
##  3       100044 Mahasiswa_0044 Perempuan    19        3 Matematika    Pekanbaru
##  4       100156 Mahasiswa_0156 Laki-laki    24        5 Statistika    Pekanbaru
##  5       100495 Mahasiswa_0495 Perempuan    20        5 Statistika    Pekanbaru
##  6       100971 Mahasiswa_0971 Perempuan    21        3 Statistika    Pekanbaru
##  7       100271 Mahasiswa_0271 Perempuan    21        5 Statistika    Medan    
##  8       100591 Mahasiswa_0591 Laki-laki    19        5 Matematika    Pekanbaru
##  9       100124 Mahasiswa_0124 Laki-laki    21        3 Statistika    Dumai    
## 10       100114 Mahasiswa_0114 Perempuan    20        3 Statistika    Pekanbaru
## # ℹ 1,205 more rows
## # ℹ 8 more variables: Jam_Belajar_per_Minggu <dbl>, Kehadiran_Persen <dbl>,
## #   Nilai_Tugas <chr>, Nilai_Ujian <chr>, Nilai_Akhir <dbl>,
## #   Jam_Internet_per_Hari <dbl>, Jam_Tidur_per_Hari <dbl>,
## #   Kepuasan_Kuliah <dbl>
# Melihat ukuran dataset
dim(df)
## [1] 1215   15

Berdasarkan hasil pembacaan data, jumlah baris dan kolom dapat diketahui menggunakan fungsi dim(). Dataset awal memiliki 1.215 baris dan 15 kolom.

Menampilkan Data

head(df, 10)
## # A tibble: 10 × 15
##    ID_Mahasiswa Nama           Gender     Umur Semester Program_Studi Kota_Asal
##           <dbl> <chr>          <chr>     <dbl>    <dbl> <chr>         <chr>    
##  1       100740 Mahasiswa_0740 Laki-laki    20        3 Statistika    Pekanbaru
##  2       100789 Mahasiswa_0789 Perempuan    21        3 Statistika    Dumai    
##  3       100044 Mahasiswa_0044 Perempuan    19        3 Matematika    Pekanbaru
##  4       100156 Mahasiswa_0156 Laki-laki    24        5 Statistika    Pekanbaru
##  5       100495 Mahasiswa_0495 Perempuan    20        5 Statistika    Pekanbaru
##  6       100971 Mahasiswa_0971 Perempuan    21        3 Statistika    Pekanbaru
##  7       100271 Mahasiswa_0271 Perempuan    21        5 Statistika    Medan    
##  8       100591 Mahasiswa_0591 Laki-laki    19        5 Matematika    Pekanbaru
##  9       100124 Mahasiswa_0124 Laki-laki    21        3 Statistika    Dumai    
## 10       100114 Mahasiswa_0114 Perempuan    20        3 Statistika    Pekanbaru
## # ℹ 8 more variables: Jam_Belajar_per_Minggu <dbl>, Kehadiran_Persen <dbl>,
## #   Nilai_Tugas <chr>, Nilai_Ujian <chr>, Nilai_Akhir <dbl>,
## #   Jam_Internet_per_Hari <dbl>, Jam_Tidur_per_Hari <dbl>,
## #   Kepuasan_Kuliah <dbl>

Output tersebut menunjukkan beberapa baris pertama dari dataset mahasiswa.

Variabel dalam Dataset

Dataset terdiri dari 15 variabel sebagai berikut.

No Variabel Jenis Keterangan
1 ID_Mahasiswa Identitas Kode unik mahasiswa
2 Nama Identitas Nama mahasiswa
3 Gender Kategorik Jenis kelamin
4 Umur Numerik Umur mahasiswa dalam tahun
5 Semester Numerik Semester yang sedang ditempuh
6 Program_Studi Kategorik Program studi mahasiswa
7 Kota_Asal Kategorik Kota asal mahasiswa
8 Jam_Belajar_per_Minggu Numerik Jumlah jam belajar dalam satu minggu
9 Kehadiran_Persen Numerik Persentase kehadiran
10 Nilai_Tugas Numerik Nilai tugas
11 Nilai_Ujian Numerik Nilai ujian
12 Nilai_Akhir Numerik Nilai akhir
13 Jam_Internet_per_Hari Numerik Lama penggunaan internet per hari
14 Jam_Tidur_per_Hari Numerik Lama tidur per hari
15 Kepuasan_Kuliah Numerik Tingkat kepuasan kuliah dengan skala 1–5

Sumber Data

Dataset yang digunakan merupakan data eksternal dan data sekunder, karena data diperoleh dari pihak lain dan tidak dikumpulkan secara langsung oleh peneliti dari mahasiswa sebagai responden.

Dataset digunakan sebagai bahan latihan pengolahan dan pembersihan data. Oleh karena itu, pemeriksaan kualitas data tetap diperlukan sebelum data digunakan untuk analisis.

Jenis Data

Dataset termasuk data terstruktur karena data tersusun dalam bentuk baris dan kolom dengan struktur variabel yang jelas. Kondisi tersebut memungkinkan data untuk diolah menggunakan Excel maupun R.

Eksplorasi Data Awal

Struktur Data

Struktur data diperiksa untuk mengetahui nama variabel, tipe data, dan bentuk data yang digunakan.

str(df)
## tibble [1,215 × 15] (S3: tbl_df/tbl/data.frame)
##  $ ID_Mahasiswa          : num [1:1215] 100740 100789 100044 100156 100495 ...
##  $ Nama                  : chr [1:1215] "Mahasiswa_0740" "Mahasiswa_0789" "Mahasiswa_0044" "Mahasiswa_0156" ...
##  $ Gender                : chr [1:1215] "Laki-laki" "Perempuan" "Perempuan" "Laki-laki" ...
##  $ Umur                  : num [1:1215] 20 21 19 24 20 21 21 19 21 20 ...
##  $ Semester              : num [1:1215] 3 3 3 5 5 3 5 5 3 3 ...
##  $ Program_Studi         : chr [1:1215] "Statistika" "Statistika" "Matematika" "Statistika" ...
##  $ Kota_Asal             : chr [1:1215] "Pekanbaru" "Dumai" "Pekanbaru" "Pekanbaru" ...
##  $ Jam_Belajar_per_Minggu: num [1:1215] 3.6 13 13.3 11.8 13.8 20.1 7 14.4 10.4 21.4 ...
##  $ Kehadiran_Persen      : num [1:1215] 90 81 83.4 87.9 93.8 NA 78.6 90.4 85.8 88.4 ...
##  $ Nilai_Tugas           : chr [1:1215] "45" "74.7" "76.900000000000006" "55.4" ...
##  $ Nilai_Ujian           : chr [1:1215] "95.2" "81.599999999999994" "94.3" "93.4" ...
##  $ Nilai_Akhir           : num [1:1215] 78.6 81.1 86.7 80 93.8 86.6 71.5 89.5 85.5 88.4 ...
##  $ Jam_Internet_per_Hari : num [1:1215] 5.8 3.4 4.4 4.6 5.6 5.9 2.1 5.3 7.4 7.3 ...
##  $ Jam_Tidur_per_Hari    : num [1:1215] 4.9 7.7 5.6 7.5 6.3 6.3 7 7.1 6.1 5.5 ...
##  $ Kepuasan_Kuliah       : num [1:1215] 5 4 4 3 5 3 3 2 3 4 ...

Berdasarkan struktur tersebut dapat diketahui apakah masing-masing variabel sudah memiliki tipe data yang sesuai. Variabel numerik seperti umur, semester, jam belajar, nilai, jam internet, dan jam tidur seharusnya memiliki tipe numerik, sedangkan variabel seperti nama, gender, program studi, dan kota asal merupakan data kategorik atau karakter.

Jumlah Baris dan Kolom

cat("Jumlah baris :", nrow(df), "\n")
## Jumlah baris : 1215
cat("Jumlah kolom :", ncol(df), "\n")
## Jumlah kolom : 15

Dataset awal terdiri dari 1.215 baris dan 15 kolom.

Ringkasan Statistik

base::summary(df)
##   ID_Mahasiswa           Nama            Gender          Umur       
##  Min.   :100001   Length   :1215   Length   :1215   Min.   : -3.00  
##  1st Qu.:100302   N.unique :1200   N.unique :   8   1st Qu.: 20.00  
##  Median :100601   N.blank  :   0   N.blank  :   0   Median : 21.00  
##  Mean   :100601   Min.nchar:  14   Min.nchar:   1   Mean   : 20.69  
##  3rd Qu.:100901   Max.nchar:  19   Max.nchar:   9   3rd Qu.: 22.00  
##  Max.   :101200                                     Max.   :150.00  
##                                                                     
##     Semester       Program_Studi      Kota_Asal    Jam_Belajar_per_Minggu
##  Min.   :3.000   Length   :1215   Length   :1215   Min.   : 2.00         
##  1st Qu.:3.000   N.unique :   3   N.unique :  13   1st Qu.:10.50         
##  Median :3.000   N.blank  :   0   N.blank  :   0   Median :13.90         
##  Mean   :3.375   Min.nchar:  10   Min.nchar:   5   Mean   :13.85         
##  3rd Qu.:4.000   Max.nchar:  10   Max.nchar:   9   3rd Qu.:17.20         
##  Max.   :5.000                                     Max.   :29.60         
##                                                    NAs    :12            
##  Kehadiran_Persen    Nilai_Tugas      Nilai_Ujian    Nilai_Akhir    
##  Min.   :-10.00   Length   :1215   Length   :1215   Min.   : -8.00  
##  1st Qu.: 82.90   N.unique : 381   N.unique : 201   1st Qu.: 81.80  
##  Median : 87.70   N.blank  :   0   N.blank  :   0   Median : 86.10  
##  Mean   : 87.69   Min.nchar:   2   Min.nchar:   2   Mean   : 85.48  
##  3rd Qu.: 93.00   Max.nchar:  18   Max.nchar:  18   3rd Qu.: 89.80  
##  Max.   :125.00   NAs      :   8   NAs      :   8   Max.   :120.00  
##  NAs    :10                                                         
##  Jam_Internet_per_Hari Jam_Tidur_per_Hari Kepuasan_Kuliah
##  Min.   :-1.000        Min.   : 1.000     Min.   :0.00   
##  1st Qu.: 3.400        1st Qu.: 6.000     1st Qu.:3.00   
##  Median : 4.500        Median : 6.700     Median :4.00   
##  Mean   : 4.552        Mean   : 6.724     Mean   :3.62   
##  3rd Qu.: 5.700        3rd Qu.: 7.400     3rd Qu.:4.00   
##  Max.   :30.000        Max.   :20.000     Max.   :8.00   
##                                           NAs    :8

Ringkasan statistik digunakan untuk melihat nilai minimum, kuartil, median, mean, dan maksimum pada variabel numerik serta distribusi sederhana pada variabel kategorik.

Pemeriksaan Missing Value

missing_data <- data.frame(
  Variabel = names(df),
  Jumlah_Missing = sapply(df, function(x) sum(is.na(x))),
  Persentase_Missing = round(
    sapply(df, function(x) mean(is.na(x))) * 100,
    2
  )
)

missing_data
##                                      Variabel Jumlah_Missing Persentase_Missing
## ID_Mahasiswa                     ID_Mahasiswa              0               0.00
## Nama                                     Nama              0               0.00
## Gender                                 Gender              0               0.00
## Umur                                     Umur              0               0.00
## Semester                             Semester              0               0.00
## Program_Studi                   Program_Studi              0               0.00
## Kota_Asal                           Kota_Asal              0               0.00
## Jam_Belajar_per_Minggu Jam_Belajar_per_Minggu             12               0.99
## Kehadiran_Persen             Kehadiran_Persen             10               0.82
## Nilai_Tugas                       Nilai_Tugas              8               0.66
## Nilai_Ujian                       Nilai_Ujian              8               0.66
## Nilai_Akhir                       Nilai_Akhir              0               0.00
## Jam_Internet_per_Hari   Jam_Internet_per_Hari              0               0.00
## Jam_Tidur_per_Hari         Jam_Tidur_per_Hari              0               0.00
## Kepuasan_Kuliah               Kepuasan_Kuliah              8               0.66

Pemeriksaan missing value dilakukan untuk mengetahui apakah terdapat data kosong pada masing-masing variabel. Variabel yang memiliki nilai missing perlu diperhatikan sebelum analisis lebih lanjut.

Pemeriksaan Data Duplikat

jumlah_duplikat <- sum(duplicated(df))

cat("Jumlah baris duplikat:", jumlah_duplikat)
## Jumlah baris duplikat: 14

Data duplikat merupakan baris yang tercatat lebih dari satu kali. Duplikat dapat menyebabkan jumlah observasi menjadi lebih besar dari jumlah mahasiswa sebenarnya dan dapat memengaruhi hasil analisis.

Pemeriksaan ID Mahasiswa

jumlah_id_duplikat <- sum(duplicated(df$ID_Mahasiswa))

cat("Jumlah ID mahasiswa yang duplikat:", jumlah_id_duplikat)
## Jumlah ID mahasiswa yang duplikat: 15

ID mahasiswa seharusnya bersifat unik. Jika terdapat ID yang muncul lebih dari satu kali, perlu diperiksa apakah data tersebut benar-benar duplikat atau merupakan catatan yang berbeda.

Pemeriksaan Konsistensi Data

Gender

table(df$Gender, useNA = "ifany")
## 
##    Female         L Laki-laki      Male         P Perempuan      Pria    Wanita 
##         6         2       539         4         8       646         3         7

Pemeriksaan dilakukan untuk mengetahui apakah penulisan kategori gender sudah konsisten.

Program Studi

table(df$Program_Studi, useNA = "ifany")
## 
## Matematika Sains Data Statistika 
##        172        112        931

Pemeriksaan program studi digunakan untuk mengetahui kategori yang tersedia serta mendeteksi kemungkinan adanya perbedaan penulisan.

Kota Asal

head(sort(table(df$Kota_Asal, useNA = "ifany"), decreasing = TRUE), 20)
## 
## Pekanbaru    Padang     Medan     Dumai     Jambi pekanbaru    padang     jambi 
##       546       206       179       133       121         7         6         4 
##     JAMBI     DUMAI PEKANBARU    PADANG     MEDAN 
##         4         3         3         2         1

Pemeriksaan kota asal dilakukan untuk melihat variasi kategori dan mendeteksi kemungkinan inkonsistensi penulisan.

Pemeriksaan Nilai Tidak Wajar

Nilai tidak wajar diperiksa berdasarkan batas logis dari masing-masing variabel.

Umur

sum(df$Umur < 15 | df$Umur > 100, na.rm = TRUE)
## [1] 2

Umur di luar rentang yang wajar perlu diperiksa karena dapat menunjukkan kesalahan pencatatan.

Semester

sum(df$Semester < 1 | df$Semester > 14, na.rm = TRUE)
## [1] 0

Semester yang berada di luar rentang yang ditentukan dapat dianggap sebagai nilai yang perlu diperiksa.

Kehadiran

sum(
  df$Kehadiran_Persen < 0 |
  df$Kehadiran_Persen > 100,
  na.rm = TRUE
)
## [1] 2

Nilai kehadiran seharusnya berada pada rentang 0 sampai 100 persen.

Nilai Tugas

sum(
  df$Nilai_Tugas < 0 |
  df$Nilai_Tugas > 100,
  na.rm = TRUE
)
## [1] 1206

Nilai Ujian

sum(
  df$Nilai_Ujian < 0 |
  df$Nilai_Ujian > 100,
  na.rm = TRUE
)
## [1] 688

Nilai Akhir

sum(
  df$Nilai_Akhir < 0 |
  df$Nilai_Akhir > 100,
  na.rm = TRUE
)
## [1] 2

Kepuasan Kuliah

sum(
  df$Kepuasan_Kuliah < 1 |
  df$Kepuasan_Kuliah > 5,
  na.rm = TRUE
)
## [1] 2

Permasalahan Data

Berdasarkan eksplorasi awal, pemeriksaan kualitas data difokuskan pada beberapa jenis permasalahan, yaitu:

  1. Missing value, yaitu terdapat nilai yang kosong pada beberapa variabel.
  2. Data duplikat, yaitu terdapat baris atau ID mahasiswa yang tercatat lebih dari satu kali.
  3. Inkonsistensi data, yaitu adanya kemungkinan perbedaan penulisan pada variabel kategorik.
  4. Nilai tidak wajar, yaitu nilai yang berada di luar batas logis variabel.
  5. Ketidaksesuaian tipe data, apabila variabel numerik terbaca sebagai karakter.

Jumlah permasalahan aktual dapat dilihat dari output pemeriksaan pada bagian sebelumnya.

Data Cleaning

Pemeriksaan Tipe Data

sapply(df, class)
##           ID_Mahasiswa                   Nama                 Gender 
##              "numeric"            "character"            "character" 
##                   Umur               Semester          Program_Studi 
##              "numeric"              "numeric"            "character" 
##              Kota_Asal Jam_Belajar_per_Minggu       Kehadiran_Persen 
##            "character"              "numeric"              "numeric" 
##            Nilai_Tugas            Nilai_Ujian            Nilai_Akhir 
##            "character"            "character"              "numeric" 
##  Jam_Internet_per_Hari     Jam_Tidur_per_Hari        Kepuasan_Kuliah 
##              "numeric"              "numeric"              "numeric"

Pemeriksaan tipe data dilakukan untuk memastikan bahwa variabel numerik telah terbaca sebagai numerik.

Konversi Variabel Numerik

kolom_numerik <- c(
  "ID_Mahasiswa",
  "Umur",
  "Semester",
  "Jam_Belajar_per_Minggu",
  "Kehadiran_Persen",
  "Nilai_Tugas",
  "Nilai_Ujian",
  "Nilai_Akhir",
  "Jam_Internet_per_Hari",
  "Jam_Tidur_per_Hari",
  "Kepuasan_Kuliah"
)

for (kol in kolom_numerik) {
  if (kol %in% names(df)) {
    df[[kol]] <- as.numeric(df[[kol]])
  }
}

Konversi dilakukan agar variabel yang seharusnya berupa angka dapat digunakan dalam perhitungan statistik dan analisis regresi.

Membersihkan Spasi pada Data Kategorik

kolom_kategorik <- c(
  "Nama",
  "Gender",
  "Program_Studi",
  "Kota_Asal"
)

for (kol in kolom_kategorik) {
  if (kol %in% names(df)) {
    df[[kol]] <- trimws(df[[kol]])
  }
}

Pembersihan spasi dilakukan untuk mengurangi kemungkinan kategori yang sebenarnya sama tetapi dianggap berbeda akibat adanya spasi tambahan.

Standarisasi Gender

df$Gender <- case_when(
  tolower(trimws(df$Gender)) %in%
    c("laki-laki", "laki laki", "laki_laki", "laki") ~ "Laki-laki",

  tolower(trimws(df$Gender)) %in%
    c("perempuan", "wanita") ~ "Perempuan",

  TRUE ~ df$Gender
)

Standarisasi dilakukan agar kategori yang memiliki arti sama menggunakan penulisan yang seragam.

Penanganan Nilai Tidak Wajar

Nilai yang berada di luar rentang logis akan diubah menjadi NA agar tidak digunakan sebagai nilai valid dalam analisis.

df <- df %>%
  mutate(
    Umur = ifelse(Umur < 15 | Umur > 100, NA, Umur),

    Semester = ifelse(
      Semester < 1 | Semester > 14,
      NA,
      Semester
    ),

    Kehadiran_Persen = ifelse(
      Kehadiran_Persen < 0 |
      Kehadiran_Persen > 100,
      NA,
      Kehadiran_Persen
    ),

    Nilai_Tugas = ifelse(
      Nilai_Tugas < 0 |
      Nilai_Tugas > 100,
      NA,
      Nilai_Tugas
    ),

    Nilai_Ujian = ifelse(
      Nilai_Ujian < 0 |
      Nilai_Ujian > 100,
      NA,
      Nilai_Ujian
    ),

    Nilai_Akhir = ifelse(
      Nilai_Akhir < 0 |
      Nilai_Akhir > 100,
      NA,
      Nilai_Akhir
    ),

    Kepuasan_Kuliah = ifelse(
      Kepuasan_Kuliah < 1 |
      Kepuasan_Kuliah > 5,
      NA,
      Kepuasan_Kuliah
    )
  )

Dengan cara tersebut, nilai yang tidak memenuhi batas logis tidak langsung dianggap sebagai data yang benar.

Penanganan Duplikat

Baris duplikat dapat dihapus menggunakan fungsi distinct().

jumlah_sebelum <- nrow(df)

df_clean <- df %>%
  distinct()

jumlah_sesudah <- nrow(df_clean)

cat("Jumlah baris sebelum cleaning :", jumlah_sebelum, "\n")
## Jumlah baris sebelum cleaning : 1215
cat("Jumlah baris sesudah cleaning :", jumlah_sesudah, "\n")
## Jumlah baris sesudah cleaning : 1201
cat("Jumlah baris yang dihapus     :", jumlah_sebelum - jumlah_sesudah)
## Jumlah baris yang dihapus     : 14

Penghapusan dilakukan terhadap baris yang benar-benar identik.

Penanganan Missing Value

Jumlah missing value setelah proses pemeriksaan dapat dilihat kembali.

missing_after <- data.frame(
  Variabel = names(df_clean),
  Jumlah_Missing = sapply(
    df_clean,
    function(x) sum(is.na(x))
  )
)

missing_after
##                                      Variabel Jumlah_Missing
## ID_Mahasiswa                     ID_Mahasiswa              0
## Nama                                     Nama              0
## Gender                                 Gender              0
## Umur                                     Umur              2
## Semester                             Semester              0
## Program_Studi                   Program_Studi              0
## Kota_Asal                           Kota_Asal              0
## Jam_Belajar_per_Minggu Jam_Belajar_per_Minggu             12
## Kehadiran_Persen             Kehadiran_Persen             12
## Nilai_Tugas                       Nilai_Tugas             10
## Nilai_Ujian                       Nilai_Ujian             10
## Nilai_Akhir                       Nilai_Akhir              2
## Jam_Internet_per_Hari   Jam_Internet_per_Hari              0
## Jam_Tidur_per_Hari         Jam_Tidur_per_Hari              0
## Kepuasan_Kuliah               Kepuasan_Kuliah             10

Untuk analisis regresi, observasi yang memiliki missing value pada variabel yang digunakan dapat dikeluarkan menggunakan na.omit().

data_regresi <- df_clean %>%
  select(
    Jam_Tidur_per_Hari,
    Jam_Belajar_per_Minggu,
    Jam_Internet_per_Hari
  ) %>%
  na.omit()

nrow(data_regresi)
## [1] 1189

Perbandingan Sebelum dan Sesudah Cleaning

perbandingan <- data.frame(
  Kondisi = c(
    "Sebelum Cleaning",
    "Sesudah Cleaning"
  ),
  Jumlah_Baris = c(
    nrow(df),
    nrow(df_clean)
  ),
  Jumlah_Kolom = c(
    ncol(df),
    ncol(df_clean)
  )
)

perbandingan
##            Kondisi Jumlah_Baris Jumlah_Kolom
## 1 Sebelum Cleaning         1215           15
## 2 Sesudah Cleaning         1201           15

Perbandingan tersebut digunakan untuk melihat perubahan jumlah observasi setelah proses pembersihan data.

Dataset Setelah Cleaning

dim(df_clean)
## [1] 1201   15
str(df_clean)
## tibble [1,201 × 15] (S3: tbl_df/tbl/data.frame)
##  $ ID_Mahasiswa          : num [1:1201] 100740 100789 100044 100156 100495 ...
##  $ Nama                  : chr [1:1201] "Mahasiswa_0740" "Mahasiswa_0789" "Mahasiswa_0044" "Mahasiswa_0156" ...
##  $ Gender                : chr [1:1201] "Laki-laki" "Perempuan" "Perempuan" "Laki-laki" ...
##  $ Umur                  : num [1:1201] 20 21 19 24 20 21 21 19 21 20 ...
##  $ Semester              : num [1:1201] 3 3 3 5 5 3 5 5 3 3 ...
##  $ Program_Studi         : chr [1:1201] "Statistika" "Statistika" "Matematika" "Statistika" ...
##  $ Kota_Asal             : chr [1:1201] "Pekanbaru" "Dumai" "Pekanbaru" "Pekanbaru" ...
##  $ Jam_Belajar_per_Minggu: num [1:1201] 3.6 13 13.3 11.8 13.8 20.1 7 14.4 10.4 21.4 ...
##  $ Kehadiran_Persen      : num [1:1201] 90 81 83.4 87.9 93.8 NA 78.6 90.4 85.8 88.4 ...
##  $ Nilai_Tugas           : num [1:1201] 45 74.7 76.9 55.4 83.7 71.3 52.1 69.9 70.2 77.5 ...
##  $ Nilai_Ujian           : num [1:1201] 95.2 81.6 94.3 93.4 100 91.5 83.7 100 99.2 89.1 ...
##  $ Nilai_Akhir           : num [1:1201] 78.6 81.1 86.7 80 93.8 86.6 71.5 89.5 85.5 88.4 ...
##  $ Jam_Internet_per_Hari : num [1:1201] 5.8 3.4 4.4 4.6 5.6 5.9 2.1 5.3 7.4 7.3 ...
##  $ Jam_Tidur_per_Hari    : num [1:1201] 4.9 7.7 5.6 7.5 6.3 6.3 7 7.1 6.1 5.5 ...
##  $ Kepuasan_Kuliah       : num [1:1201] 5 4 4 3 5 3 3 2 3 4 ...
base::summary(df_clean)
##   ID_Mahasiswa           Nama            Gender          Umur     
##  Min.   :100001   Length   :1201   Length   :1201   Min.   :18.0  
##  1st Qu.:100301   N.unique :1200   N.unique :   7   1st Qu.:20.0  
##  Median :100601   N.blank  :   0   N.blank  :   0   Median :21.0  
##  Mean   :100601   Min.nchar:  14   Min.nchar:   1   Mean   :20.6  
##  3rd Qu.:100901   Max.nchar:  19   Max.nchar:   9   3rd Qu.:22.0  
##  Max.   :101200                                     Max.   :40.0  
##                                                     NAs    :2     
##     Semester       Program_Studi      Kota_Asal    Jam_Belajar_per_Minggu
##  Min.   :3.000   Length   :1201   Length   :1201   Min.   : 2.00         
##  1st Qu.:3.000   N.unique :   3   N.unique :  13   1st Qu.:10.50         
##  Median :3.000   N.blank  :   0   N.blank  :   0   Median :13.90         
##  Mean   :3.376   Min.nchar:  10   Min.nchar:   5   Mean   :13.84         
##  3rd Qu.:4.000   Max.nchar:  10   Max.nchar:   9   3rd Qu.:17.10         
##  Max.   :5.000                                     Max.   :29.60         
##                                                    NAs    :12            
##  Kehadiran_Persen  Nilai_Tugas      Nilai_Ujian      Nilai_Akhir    
##  Min.   : 65.50   Min.   : 45.00   Min.   : 66.30   Min.   : 61.00  
##  1st Qu.: 82.90   1st Qu.: 62.60   1st Qu.: 92.00   1st Qu.: 81.85  
##  Median : 87.70   Median : 69.70   Median : 97.90   Median : 86.10  
##  Mean   : 87.73   Mean   : 69.64   Mean   : 95.45   Mean   : 85.52  
##  3rd Qu.: 93.00   3rd Qu.: 76.45   3rd Qu.:100.00   3rd Qu.: 89.80  
##  Max.   :100.00   Max.   :100.00   Max.   :100.00   Max.   :100.00  
##  NAs    :12       NAs    :10       NAs    :10       NAs    :2       
##  Jam_Internet_per_Hari Jam_Tidur_per_Hari Kepuasan_Kuliah
##  Min.   :-1.000        Min.   : 1.000     Min.   :1.00   
##  1st Qu.: 3.400        1st Qu.: 6.000     1st Qu.:3.00   
##  Median : 4.500        Median : 6.700     Median :4.00   
##  Mean   : 4.554        Mean   : 6.724     Mean   :3.62   
##  3rd Qu.: 5.700        3rd Qu.: 7.400     3rd Qu.:4.00   
##  Max.   :30.000        Max.   :20.000     Max.   :5.00   
##                                           NAs    :10

Setelah proses cleaning, dataset diperiksa kembali untuk memastikan bahwa struktur data tetap sesuai dan variabel dapat digunakan untuk analisis selanjutnya.

Analisis Regresi

Tujuan Analisis

Analisis regresi dilakukan untuk mengetahui hubungan antara:

  • Jam_Belajar_per_Minggu sebagai variabel bebas pertama.
  • Jam_Internet_per_Hari sebagai variabel bebas kedua.
  • Jam_Tidur_per_Hari sebagai variabel terikat.

Model regresi yang digunakan adalah:

Jam_Tidur_per_Hari = β₀ + β₁(Jam_Belajar_per_Minggu) + β₂(Jam_Internet_per_Hari) + ε

Membuat Model Regresi

model <- lm(
  Jam_Tidur_per_Hari ~
    Jam_Belajar_per_Minggu +
    Jam_Internet_per_Hari,
  data = data_regresi
)

summary(model)
## 
## Call:
## lm(formula = Jam_Tidur_per_Hari ~ Jam_Belajar_per_Minggu + Jam_Internet_per_Hari, 
##     data = data_regresi)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.7454 -0.6667 -0.0129  0.6550 13.2273 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            6.504226   0.117371  55.416   <2e-16 ***
## Jam_Belajar_per_Minggu 0.013864   0.006256   2.216   0.0269 *  
## Jam_Internet_per_Hari  0.005847   0.016445   0.356   0.7222    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.08 on 1186 degrees of freedom
## Multiple R-squared:  0.004265,   Adjusted R-squared:  0.002586 
## F-statistic:  2.54 on 2 and 1186 DF,  p-value: 0.07931

Interpretasi Koefisien

coef(model)
##            (Intercept) Jam_Belajar_per_Minggu  Jam_Internet_per_Hari 
##            6.504226268            0.013863601            0.005847137

Koefisien regresi digunakan untuk melihat arah hubungan masing-masing variabel bebas terhadap lama tidur ketika variabel bebas lainnya dianggap tetap.

Koefisien positif menunjukkan hubungan searah, sedangkan koefisien negatif menunjukkan hubungan berlawanan arah.

R-Squared

summary(model)$r.squared
## [1] 0.004264759

Nilai R-squared menunjukkan proporsi variasi lama tidur yang dapat dijelaskan oleh variabel jam belajar dan jam penggunaan internet dalam model.

Uji Signifikansi

summary(model)$coefficients
##                           Estimate  Std. Error    t value   Pr(>|t|)
## (Intercept)            6.504226268 0.117371097 55.4159112 0.00000000
## Jam_Belajar_per_Minggu 0.013863601 0.006255976  2.2160572 0.02687684
## Jam_Internet_per_Hari  0.005847137 0.016444877  0.3555598 0.72223347

Nilai p-value digunakan untuk melihat signifikansi statistik dari masing-masing variabel dalam model. Interpretasi dilakukan dengan mempertimbangkan tingkat signifikansi yang digunakan, misalnya 5%.

Visualisasi Data

Hubungan Jam Belajar dan Jam Tidur

ggplot(
  data_regresi,
  aes(
    x = Jam_Belajar_per_Minggu,
    y = Jam_Tidur_per_Hari
  )
) +
  geom_point() +
  geom_smooth(
    method = "lm",
    se = TRUE
  ) +
  labs(
    title = "Hubungan Jam Belajar dengan Jam Tidur",
    x = "Jam Belajar per Minggu",
    y = "Jam Tidur per Hari"
  ) +
  theme_minimal()

Grafik digunakan untuk melihat pola hubungan antara jumlah jam belajar per minggu dan lama tidur per hari.

Hubungan Penggunaan Internet dan Jam Tidur

ggplot(
  data_regresi,
  aes(
    x = Jam_Internet_per_Hari,
    y = Jam_Tidur_per_Hari
  )
) +
  geom_point() +
  geom_smooth(
    method = "lm",
    se = TRUE
  ) +
  labs(
    title = "Hubungan Penggunaan Internet dengan Jam Tidur",
    x = "Jam Internet per Hari",
    y = "Jam Tidur per Hari"
  ) +
  theme_minimal()

Grafik menunjukkan pola hubungan antara lama penggunaan internet dan lama tidur mahasiswa.

Kategorisasi Jam Belajar

Jam belajar per minggu dapat diubah menjadi variabel kategorik.

Catatan: batas kategori di bawah merupakan contoh. Jika dosen memberikan interval tertentu, gunakan interval yang ditentukan oleh dosen.

df_clean <- df_clean %>%
  mutate(
    Kategori_Jam_Belajar = case_when(
      Jam_Belajar_per_Minggu < 10 ~ "Rendah",
      Jam_Belajar_per_Minggu < 20 ~ "Sedang",
      Jam_Belajar_per_Minggu >= 20 ~ "Tinggi",
      TRUE ~ NA_character_
    )
  )

Melihat Hasil Kategorisasi

table(
  df_clean$Kategori_Jam_Belajar,
  useNA = "ifany"
)
## 
## Rendah Sedang Tinggi   <NA> 
##    260    798    131     12

Kategorisasi tersebut mengubah nilai numerik jam belajar menjadi tiga kelompok, yaitu rendah, sedang, dan tinggi.

Encoding Variabel

Setelah variabel jam belajar dibuat menjadi kategori, kategori tersebut dapat diubah menjadi kode numerik.

df_clean <- df_clean %>%
  mutate(
    Kode_Jam_Belajar = case_when(
      Kategori_Jam_Belajar == "Rendah" ~ 1,
      Kategori_Jam_Belajar == "Sedang" ~ 2,
      Kategori_Jam_Belajar == "Tinggi" ~ 3,
      TRUE ~ NA_real_
    )
  )

Hasil Encoding

df_clean %>%
  select(
    Jam_Belajar_per_Minggu,
    Kategori_Jam_Belajar,
    Kode_Jam_Belajar
  ) %>%
  head(10)
## # A tibble: 10 × 3
##    Jam_Belajar_per_Minggu Kategori_Jam_Belajar Kode_Jam_Belajar
##                     <dbl> <chr>                           <dbl>
##  1                    3.6 Rendah                              1
##  2                   13   Sedang                              2
##  3                   13.3 Sedang                              2
##  4                   11.8 Sedang                              2
##  5                   13.8 Sedang                              2
##  6                   20.1 Tinggi                              3
##  7                    7   Rendah                              1
##  8                   14.4 Sedang                              2
##  9                   10.4 Sedang                              2
## 10                   21.4 Tinggi                              3

Hasil encoding menunjukkan bahwa kategori jam belajar telah direpresentasikan dalam bentuk kode numerik.

Kategori Kode
Rendah 1
Sedang 2
Tinggi 3

Visualisasi Kategori Jam Belajar

ggplot(
  df_clean,
  aes(x = Kategori_Jam_Belajar)
) +
  geom_bar() +
  labs(
    title = "Distribusi Kategori Jam Belajar",
    x = "Kategori Jam Belajar",
    y = "Jumlah Mahasiswa"
  ) +
  theme_minimal()

Grafik menunjukkan jumlah mahasiswa pada masing-masing kategori jam belajar.

Hasil Akhir Data

cat("Jumlah baris akhir :", nrow(df_clean), "\n")
## Jumlah baris akhir : 1201
cat("Jumlah kolom akhir :", ncol(df_clean), "\n")
## Jumlah kolom akhir : 17
head(df_clean, 10)
## # A tibble: 10 × 17
##    ID_Mahasiswa Nama           Gender     Umur Semester Program_Studi Kota_Asal
##           <dbl> <chr>          <chr>     <dbl>    <dbl> <chr>         <chr>    
##  1       100740 Mahasiswa_0740 Laki-laki    20        3 Statistika    Pekanbaru
##  2       100789 Mahasiswa_0789 Perempuan    21        3 Statistika    Dumai    
##  3       100044 Mahasiswa_0044 Perempuan    19        3 Matematika    Pekanbaru
##  4       100156 Mahasiswa_0156 Laki-laki    24        5 Statistika    Pekanbaru
##  5       100495 Mahasiswa_0495 Perempuan    20        5 Statistika    Pekanbaru
##  6       100971 Mahasiswa_0971 Perempuan    21        3 Statistika    Pekanbaru
##  7       100271 Mahasiswa_0271 Perempuan    21        5 Statistika    Medan    
##  8       100591 Mahasiswa_0591 Laki-laki    19        5 Matematika    Pekanbaru
##  9       100124 Mahasiswa_0124 Laki-laki    21        3 Statistika    Dumai    
## 10       100114 Mahasiswa_0114 Perempuan    20        3 Statistika    Pekanbaru
## # ℹ 10 more variables: Jam_Belajar_per_Minggu <dbl>, Kehadiran_Persen <dbl>,
## #   Nilai_Tugas <dbl>, Nilai_Ujian <dbl>, Nilai_Akhir <dbl>,
## #   Jam_Internet_per_Hari <dbl>, Jam_Tidur_per_Hari <dbl>,
## #   Kepuasan_Kuliah <dbl>, Kategori_Jam_Belajar <chr>, Kode_Jam_Belajar <dbl>

Dataset akhir merupakan dataset yang telah melalui beberapa tahap pemeriksaan dan pembersihan sehingga dapat digunakan untuk analisis lebih lanjut.

Kesimpulan

Berdasarkan proses eksplorasi dan pembersihan data yang telah dilakukan, dapat disimpulkan bahwa dataset mahasiswa perlu diperiksa terlebih dahulu sebelum digunakan dalam analisis. Pemeriksaan dilakukan terhadap struktur data, missing value, duplikasi, konsistensi data, tipe data, dan nilai yang tidak wajar.

Proses data cleaning dilakukan untuk memperbaiki kualitas data sehingga data menjadi lebih terstruktur dan siap digunakan dalam analisis.

Analisis regresi digunakan untuk melihat hubungan antara jam belajar per minggu dan jam penggunaan internet per hari terhadap jam tidur per hari. Hasil regresi dapat dilihat berdasarkan koefisien, nilai R-squared, dan p-value yang dihasilkan oleh model.

Selain itu, dilakukan proses integrasi data menggunakan ID_Mahasiswa sebagai kunci penggabungan. Variabel jam belajar juga dikategorikan menjadi kategori rendah, sedang, dan tinggi, kemudian diubah menjadi kode numerik melalui proses encoding.

Dengan demikian, seluruh tahapan mulai dari eksplorasi, pembersihan, analisis, integrasi, hingga encoding dapat dilakukan secara sistematis menggunakan R.

Lampiran Kode

Seluruh kode yang digunakan dalam proses pengolahan dan analisis data ditampilkan pada setiap bagian laporan agar proses analisis dapat direproduksi kembali.