data<- read.csv("C:/Users/User/Downloads/Expanded_Data.csv")
#Menampilkan 6 baris pertama dari data set
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 10-May 69 90 88
## 3 < 5 87 93 91
## 4 10-May 45 56 42
## 5 10-May 76 78 75
## 6 10-May 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" "10-May" "< 5" "10-May" ...
## $ 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 ...
# 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
# Ubah format wide ke long menggunakan pivot_longer()
data_long <- data %>%
pivot_longer(cols = c(MathScore, ReadingScore, WritingScore),
names_to = "variable",
values_to = "value")
# Boxplot dengan outlier berwarna merah
ggplot(data_long, aes(x = variable, y = value, fill = variable)) +
geom_boxplot(outlier.color = "red", outlier.shape = 16, outlier.size = 1.5) + # Outlier lebih terlihat
theme_minimal() +
labs(title = "Boxplot untuk Deteksi Outlier")
Boxplot menunjukkan distribusi nilai MathScore, ReadingScore, dan WritingScore, serta mendeteksi outlier yang ditandai dengan titik merah. Terlihat banyak outlier di bagian bawah, yang berarti ada cukup banyak siswa dengan nilai jauh lebih rendah dibanding mayoritas. Banyaknya outlier ini bisa disebabkan oleh beberapa faktor, seperti kemampuan akademik yang beragam, kurangnya waktu belajar, atau faktor eksternal seperti kondisi sosial ekonomi. Secara statistik, outlier muncul jika data memiliki distribusi yang miring (skewed), di mana sebagian kecil siswa memiliki skor sangat rendah dibandingkan rata-rata. Outlier dalam boxplot ini ditentukan berdasarkan metode Interquartile Range (IQR), di mana nilai yang terlalu jauh dari rentang normal dianggap sebagai outlier.
A. Outlier adalah nilai yang jauh berbeda dari data lainnya. Bisa dibilang, ini adalah angka yang terlalu kecil atau terlalu besar dibandingkan nilai normal dalam dataset.
B. cara memeriksa Outlier
C. Cara Menanggulanginya
# Jam Belajar per Minggu yang Paling Sering Dilakukan
# Load library
library(tidyverse)
# Cek distribusi jam belajar per minggu
ggplot(data, aes(x = WklyStudyHours)) +
geom_bar(fill = "steelblue", color = "black") +
theme_minimal() +
labs(title = "Distribusi Jam Belajar Per Minggu",
x = "Jam Belajar per Minggu",
y = "Jumlah Siswa")
# Cek jam belajar yang paling sering dilakukan
most_common_study_hours <- data %>%
count(WklyStudyHours) %>%
arrange(desc(n)) %>%
head(1)
print(most_common_study_hours)
## WklyStudyHours n
## 1 10-May 16246
Grafik distribusi menunjukkan bahwa mayoritas siswa memiliki jam belajar dalam kategori 10-May, menjadikannya sebagai modus dari distribusi ini. Kategori <5 memiliki jumlah siswa lebih banyak dibandingkan >10, tetapi tetap jauh lebih rendah dibandingkan kategori 10-May. Pola ini menunjukkan bahwa sebagian besar siswa menghabiskan waktu belajar dalam rentang 10-May, sementara siswa yang belajar lebih dari 10 jam merupakan kelompok dengan jumlah lebih sedikit.
# Load library
library(tidyverse)
# ANOVA untuk Math Score
anova_math <- aov(MathScore ~ EthnicGroup, data = data)
summary(anova_math)
## Df Sum Sq Mean Sq F value Pr(>F)
## EthnicGroup 5 433219 86644 390.5 <2e-16 ***
## Residuals 30635 6797185 222
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ANOVA untuk Reading Score
anova_reading <- aov(ReadingScore ~ EthnicGroup, data = data)
summary(anova_reading)
## Df Sum Sq Mean Sq F value Pr(>F)
## EthnicGroup 5 151623 30325 142.4 <2e-16 ***
## Residuals 30635 6522586 213
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ANOVA untuk Writing Score
anova_writing <- aov(WritingScore ~ EthnicGroup, data = data)
summary(anova_writing)
## Df Sum Sq Mean Sq F value Pr(>F)
## EthnicGroup 5 197543 39509 170.2 <2e-16 ***
## Residuals 30635 7110172 232
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil uji ANOVA menunjukkan bahwa terdapat perbedaan yang signifikan dalam skor Matematika, Membaca, dan Menulis berdasarkan kelompok etnis. Untuk skor Matematika, nilai F sebesar 390.5 dengan p-value < 2e-16 menunjukkan bahwa perbedaan antar kelompok sangat signifikan. Hal serupa terjadi pada skor Membaca dengan nilai F sebesar 142.4 dan skor Menulis dengan nilai F sebesar 170.2, yang keduanya juga memiliki p-value < 2e-16. Karena semua p-value jauh di bawah 0.05, kita dapat menyimpulkan bahwa kelompok etnis memiliki pengaruh signifikan terhadap ketiga jenis skor tersebut.
# Load library
library(tidyverse)
library(ggcorrplot)
# Ambil kolom yang dibutuhkan
nilai <- data %>% select(MathScore, ReadingScore, WritingScore)
# Hitung matriks korelasi
cor_matrix <- cor(nilai, use = "complete.obs")
# Tampilkan heatmap korelasi
ggcorrplot(cor_matrix,
method = "circle",
lab = TRUE,
type = "lower",
title = "Heatmap Korelasi Antar Nilai Math, Reading, dan Writing")
Heatmap korelasi ini menunjukkan hubungan antara nilai Matematika (MathScore), Membaca (ReadingScore), dan Menulis (WritingScore). Korelasi yang ditunjukkan semuanya positif, dengan nilai yang cukup tinggi, yang mengindikasikan hubungan yang kuat antara ketiga variabel tersebut.
ReadingScore vs WritingScore memiliki korelasi tertinggi sebesar 0.95, menunjukkan bahwa siswa yang memiliki nilai tinggi dalam Membaca cenderung memiliki nilai tinggi dalam Menulis.
MathScore vs ReadingScore memiliki korelasi sebesar 0.82, menunjukkan hubungan positif yang kuat antara kemampuan Matematika dan Membaca.
MathScore vs WritingScore memiliki korelasi sebesar 0.81, yang juga menunjukkan hubungan positif antara kemampuan Matematika dan Menulis.
Secara keseluruhan, ketiga skor ini memiliki korelasi yang kuat satu sama lain, yang dapat menunjukkan bahwa kemampuan akademik di satu bidang cenderung berkaitan dengan bidang lainnya.
Hasil analisis menunjukkan bahwa frekuensi olahraga berpengaruh signifikan terhadap nilai matematika siswa. Dari hasil perhitungan rata-rata, siswa yang berolahraga secara teratur memiliki nilai matematika tertinggi (67,8), diikuti oleh mereka yang berolahraga sesekali (66,3), dan yang tidak pernah berolahraga memiliki nilai terendah (64,2). Uji ANOVA mengonfirmasi bahwa perbedaan ini signifikan (F = 59,31, p < 0,001). Uji post-hoc Tukey juga menunjukkan bahwa siswa yang berolahraga secara teratur memiliki perbedaan signifikan dibandingkan dengan siswa yang tidak pernah berolahraga (p < 0,001). Ini menunjukkan bahwa semakin sering siswa berolahraga, semakin tinggi kecenderungan mereka untuk mendapatkan nilai matematika yang lebih baik.