R Markdown

1. Import Data

# Load library
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(ggcorrplot)

data<- read.csv("C:/Users/PC-MS/OneDrive/Documents/PSD/Expanded_Data.csv")

# Menampilkan 6 baris pertama dari dataset
head(data)
##   X Gender EthnicGroup         ParentEduc    LunchType TestPrep
## 1 0 female              bachelor's degree     standard     none
## 2 1 female     group C       some college     standard         
## 3 2 female     group B    master's degree     standard     none
## 4 3   male     group A associate's degree free/reduced     none
## 5 4   male     group C       some college     standard     none
## 6 5 female     group B associate's degree     standard     none
##   ParentMaritalStatus PracticeSport IsFirstChild NrSiblings TransportMeans
## 1             married     regularly          yes          3     school_bus
## 2             married     sometimes          yes          0               
## 3              single     sometimes          yes          4     school_bus
## 4             married         never           no          1               
## 5             married     sometimes          yes          0     school_bus
## 6             married     regularly          yes          1     school_bus
##   WklyStudyHours MathScore ReadingScore WritingScore
## 1            < 5        71           71           74
## 2         5 - 10        69           90           88
## 3            < 5        87           93           91
## 4         5 - 10        45           56           42
## 5         5 - 10        76           78           75
## 6         5 - 10        73           84           79
str(data)
## 'data.frame':    30641 obs. of  15 variables:
##  $ X                  : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ Gender             : chr  "female" "female" "female" "male" ...
##  $ EthnicGroup        : chr  "" "group C" "group B" "group A" ...
##  $ ParentEduc         : chr  "bachelor's degree" "some college" "master's degree" "associate's degree" ...
##  $ LunchType          : chr  "standard" "standard" "standard" "free/reduced" ...
##  $ TestPrep           : chr  "none" "" "none" "none" ...
##  $ ParentMaritalStatus: chr  "married" "married" "single" "married" ...
##  $ PracticeSport      : chr  "regularly" "sometimes" "sometimes" "never" ...
##  $ IsFirstChild       : chr  "yes" "yes" "yes" "no" ...
##  $ NrSiblings         : int  3 0 4 1 0 1 1 1 3 NA ...
##  $ TransportMeans     : chr  "school_bus" "" "school_bus" "" ...
##  $ WklyStudyHours     : chr  "< 5" "5 - 10" "< 5" "5 - 10" ...
##  $ MathScore          : int  71 69 87 45 76 73 85 41 65 37 ...
##  $ ReadingScore       : int  71 90 93 56 78 84 93 43 64 59 ...
##  $ WritingScore       : int  74 88 91 42 75 79 89 39 68 50 ...

2. Pemeriksaan Outlier pada variabel math, reading dan writing score.

# Boxplot
par(mfrow = c(1,3))
boxplot(data$MathScore, main = "Math Score", col = "#d62728")
boxplot(data$ReadingScore, main = "Reading Score", col = "#2ca02c")
boxplot(data$WritingScore, main = "Writing Score", col = "#ff7f0e")

interpetasi boxplot

Outlier pada boxplot di atas terlihat jelas terutama pada ketiga jenis skor, yaitu Math, Reading, dan Writing. Outlier ditandai dengan titik-titik di bawah garis whisker, yang menunjukkan nilai-nilai yang secara signifikan lebih rendah dari sebaran utama data. Pada Math Score, jumlah outlier paling banyak dan ekstrem, bahkan ada nilai yang mendekati nol, mengindikasikan adanya siswa yang memiliki kemampuan matematika jauh di bawah rata-rata. Pada Reading dan Writing Score, outlier juga muncul namun tidak sebanyak Math, dan nilainya cenderung tidak terlalu ekstrem. Kehadiran outlier ini menunjukkan adanya variasi performa siswa yang besar, serta pentingnya perhatian lebih pada siswa-siswa dengan nilai sangat rendah agar dapat diberikan dukungan akademik tambahan.

3. Apa yang dimaksud dengan oulier? jelaskan cara memeriksa dan menanggulanginya?

Outlier adalah data yang nilainya jauh berbeda atau menyimpang secara signifikan dari sebagian besar data lainnya dalam suatu dataset. Outlier bisa sangat rendah atau sangat tinggi dibandingkan nilai lainnya, dan dapat memengaruhi analisis statistik karena dapat menggeser rata-rata atau menimbulkan kesan yang menyesatkan terhadap sebaran data.

Cara Memeriksa Outlier

Beberapa cara umum untuk mendeteksi outlier:

  1. Menggunakan Boxplot
    • Outlier muncul sebagai titik di luar whisker (batas atas dan bawah)
  2. Z-score (untuk data normal)Z-score (untuk data normal)
    • Hitung z-score: (𝑥- xbar )/𝜎, Jika z-score > 3 atau < -3, maka nilai dianggap outlier.
  3. Visualisasi lain seperti histogram, scatter plot, atau distribusi normal

Cara Menanggulangi Outlier

  1. Validasi Data
    • Periksa apakah outlier berasal dari kesalahan input data (typo, kesalahan alat ukur). Jika ya, bisa diperbaiki atau dihapus.
  2. Pisahkan dan Analisis Terpisah
    • Outlier bisa mencerminkan kasus khusus yang layak dianalisis sendiri, misalnya siswa dengan kebutuhan khusus atau prestasi luar biasa.
  3. Transformasi Data
    • Gunakan transformasi seperti logarithmic, square root, atau Winsorizing untuk mengurangi efek ekstrem.
  4. Gunakan Metode Statistik yang Robust
    • Gunakan median atau IQR daripada rata-rata dan standar deviasi, karena lebih tahan terhadap outlier.
  5. Penghapusan (sebagai opsi terakhir)
    • Hapus outlier hanya jika terbukti tidak relevan atau merusak analisis secara tidak wajar, dan harus dijelaskan dalam pelaporan.

4. Jam belajar per minggu yang paling banyak dilakukan oleh student

# Load library jika belum
library(tidyverse)

# Buat kategori jam belajar jadi 3 grup + Lainnya
data <- data %>%
  mutate(JamBelajarGrup = case_when(
    WklyStudyHours == "< 5" ~ "< 5 jam",
    WklyStudyHours == "5 - 10" ~ "5–10 jam",
    WklyStudyHours == "> 10" ~ "> 10 jam",
    TRUE ~ "Lainnya"
  ))

# Hitung frekuensi
study_freq <- table(data$JamBelajarGrup)
study_df <- as.data.frame(study_freq)
colnames(study_df) <- c("JamBelajar", "Jumlah")

# Pie chart tanpa angka
ggplot(study_df, aes(x = "", y = Jumlah, fill = JamBelajar)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  labs(title = "Distribusi Jam Belajar per Minggu (3 Kategori + Lainnya)") +
  scale_fill_manual(values = c(
    "< 5 jam" = "#d62728",     # Merah elegan
    "5–10 jam" = "#9467bd",    # Ungu kalem
    "> 10 jam" = "#2ca02c",    # Hijau segar
    "Lainnya" = "#8c564b"      # Coklat kalem untuk kategori tidak dikenal
  )) +
  theme_void() +
  theme(
    legend.title = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
  )

interpetasi pie chart

Pie chart yang ditampilkan menunjukkan distribusi jumlah siswa berdasarkan durasi belajar per minggu yang dikelompokkan menjadi empat kategori: “< 5 jam”, “5–10 jam”, “> 10 jam”, dan “Lainnya”. Kategori “5–10 jam” merupakan kelompok yang paling dominan, menandakan bahwa sebagian besar siswa memiliki kebiasaan belajar dalam rentang waktu yang moderat dan stabil. Kategori ini mencerminkan keseimbangan antara waktu belajar dan aktivitas lainnya, yang biasanya cukup untuk mendukung pencapaian akademik tanpa tekanan berlebihan. Sementara itu, kategori “> 10 jam” juga menunjukkan proporsi yang cukup besar, mengindikasikan adanya kelompok siswa yang sangat rajin dan mungkin memiliki target akademik tinggi atau mengikuti bimbingan tambahan. Di sisi lain, hanya sedikit siswa yang termasuk dalam kategori “< 5 jam”, yang berarti mereka memiliki waktu belajar mingguan yang relatif rendah dan berpotensi membutuhkan dukungan tambahan. Selain itu, terdapat juga kategori “Lainnya” yang mencakup data yang tidak terklasifikasi dengan baik, seperti data kosong atau input tidak valid. Meskipun jumlahnya kecil, keberadaan data ini tetap penting untuk diperhatikan guna menjaga kualitas analisis. Secara keseluruhan, pie chart ini memberikan gambaran umum mengenai kebiasaan belajar siswa yang sebagian besar berada pada tingkat sedang, dengan sekelompok kecil siswa yang sangat rajin atau justru sangat sedikit belajar.

5. korelasi antar variabel math, reading, and writing score menggunakan corelation heatmap

# Korelasi
score_data <- data %>% select(MathScore, ReadingScore, WritingScore)
cor_matrix <- cor(score_data, use = "complete.obs")

# Heatmap korelasi dengan gradasi putih → merah muda → merah tua
ggcorrplot(
  cor_matrix,
  type = "lower",
  lab = TRUE,
  lab_size = 4,
  colors = c("#ffffff", "#f7c6c7", "#990000"),
  title = "Heatmap Korelasi Skor Akademik",
  ggtheme = theme_minimal()
)

interpetasi heatmap

Heatmap korelasi di atas menunjukkan hubungan antara tiga jenis skor akademik siswa, yaitu MathScore, ReadingScore, dan WritingScore. Warna pada heatmap merepresentasikan tingkat kekuatan korelasi antara masing-masing pasangan variabel, dengan gradasi dari putih (lemah), merah muda (sedang), hingga merah tua (kuat). Semua pasangan skor memiliki korelasi positif yang sangat kuat, dengan nilai korelasi tertinggi antara ReadingScore dan WritingScore, yang mendekati angka 1, menandakan bahwa siswa yang memiliki kemampuan membaca yang baik cenderung juga memiliki kemampuan menulis yang tinggi. MathScore juga menunjukkan korelasi yang cukup kuat dengan kedua skor lainnya, khususnya dengan ReadingScore, meskipun berada dalam bidang yang berbeda. Warna merah tua yang mendominasi grafik memperkuat kesimpulan bahwa ketiga skor ini saling berhubungan erat, sehingga peningkatan pada satu aspek kemungkinan besar akan diikuti oleh peningkatan pada aspek lainnya. Temuan ini menunjukkan bahwa pendekatan pembelajaran terpadu yang mendorong perkembangan semua aspek akademik secara bersamaan dapat memberikan hasil yang lebih optimal.

6.Periksa perbedaan antara nilai student per PracticeSport. Apakah rata-rata math score pada siswa menunjukkan nilai yang tinggi pada student yang sering berolahraga

# Statistik deskriptif rata-rata MathScore berdasarkan PracticeSport
library(dplyr)

data %>%
  group_by(PracticeSport) %>%
  summarise(
    Jumlah_Siswa = n(),
    RataRata_Math = round(mean(MathScore, na.rm = TRUE), 1),
    SD_Math = round(sd(MathScore, na.rm = TRUE), 2)
  ) %>%
  arrange(desc(RataRata_Math))  # Urutkan dari rata-rata tertinggi
## # A tibble: 4 × 4
##   PracticeSport Jumlah_Siswa RataRata_Math SD_Math
##   <chr>                <int>         <dbl>   <dbl>
## 1 "regularly"          10793          67.8    15.6
## 2 ""                     631          66.6    14.9
## 3 "sometimes"          15213          66.3    15.2
## 4 "never"               4004          64.2    14.9

Interpretasi

Berdasarkan analisis deskriptif, terdapat perbedaan rata-rata nilai matematika (MathScore) berdasarkan kebiasaan olahraga siswa (PracticeSport). Siswa yang rutin berolahraga memiliki rata-rata nilai tertinggi, menunjukkan bahwa aktivitas fisik yang teratur kemungkinan memberikan dampak positif terhadap performa akademik. Sementara itu, siswa yang kadang-kadang berolahraga memiliki nilai rata-rata yang sedikit lebih rendah, tetapi masih lebih baik dibandingkan mereka yang tidak pernah berolahraga. Rata-rata nilai terendah justru ditemukan pada kelompok siswa yang tidak melakukan aktivitas olahraga sama sekali. Hal ini dapat mengindikasikan bahwa olahraga tidak hanya bermanfaat bagi kesehatan fisik, tetapi juga dapat membantu meningkatkan konsentrasi, stamina belajar, serta performa akademik, khususnya dalam mata pelajaran matematika. Meski demikian, analisis lebih lanjut masih diperlukan untuk memastikan apakah hubungan ini bersifat kausal.