Berdasarkan ketiga boxplot yang dilampirkan untuk skor Math, Reading, dan Writing. Ketiga variabel memiliki outlier, terutama di sisi skor rendah, Math Score memiliki outlier ekstrem, yang bisa menjadi perhatian dalam analisis lebih lanjut, Serta Distribusi Reading dan Writing cenderung lebih stabil, walaupun juga memiliki outlier.
Outlier adalah nilai yang jauh berbeda dari nilai lainnya dalam kumpulan data. Nilai ini muncul sebagai pengecualian dalam pola data yang ada. Nilai yang ada di outlier bisa jauh lebih tinggi maupun lebih rendah dibandingkan dengan nilai-nilai lain dalam dataset.
Cara Memeriksa Outlier: 1. Visualisasi Boxplot: seperti yang sudah kamu tampilkan. Titik di luar “whiskers” adalah outlier. Histogram / Scatter Plot: dapat menunjukkan data yang jauh dari distribusi utama. 2. Metode Statistik a. IQR (Interquartile Range) Hitung Q1 (kuartil bawah) dan Q3 (kuartil atas). IQR = Q3 - Q1 Nilai dianggap outlier jika: < Q1 - 1.5IQR atau > Q3 + 1.5IQR b. Z-Score Mengukur berapa jauh suatu nilai dari rata-rata dalam satuan standar deviasi. Z-score = (X - mean) / std_dev Biasanya nilai dengan Z-score > 3 atau < -3 dianggap outlier.
Cara Menanggulangi Outlier: 1. Periksa Sumbernya Apakah outlier disebabkan oleh kesalahan input data? Misalnya: typo, format salah, dll. 2. Pisahkan atau Tandai Tandai data outlier untuk analisis terpisah. Bisa bermanfaat untuk segmentasi (misalnya: siswa berbakat atau underperforming). 3. Transformasi Data Gunakan log, square root, atau Box-Cox transformasi untuk “menjinakkan” outlier. 4. Hapus (Remove) Jika outlier adalah error atau tidak relevan untuk analisis. Catatan: Hati-hati, hanya hapus jika ada alasan yang kuat. 5. Gunakan Metode yang Robust Median, IQR, atau model robust (seperti regresi robust) yang tidak terpengaruh outlier.
Jam belajar per minggu yang paling banyak dilakukan oleh siswa adalah 5 - 10 jam, dengan 16.246 siswa memilih kategori ini. Distribusi lengkapnya: 5 - 10 jam → 16.246 siswa (paling umum), < 5 jam → 8.238 siswa, dan > 10 jam → 5.202 siswa
Secara umum, Group E selalu memiliki rata-rata nilai tertinggi di semua kategori (Math, Reading, Writing), sedangkan Group B dan C cenderung memiliki nilai lebih rendah dibandingkan kelompok lain.
Semua lingkaran besar dan berwarna biru tua menunjukkan nilai korelasi positif tinggi, yang mendekati angka 1 pada skala di samping. Korelasi ini berarti bahwa semakin tinggi nilai dalam satu bidang (misalnya matematika), maka cenderung tinggi juga di bidang lain (membaca & menulis). Dalam konteks pendidikan, ini bisa menunjukkan bahwa kemampuan akademik di satu area terkait erat dengan area lainnya.
Pengaruh olahraga paling terlihat pada Math Score. Siswa yang rutin berolahraga cenderung memiliki performa akademik lebih baik, terutama dalam mata pelajaran eksak seperti matematika. Perbedaan pada Reading dan Writing lebih kecil, tapi tetap menunjukkan tren positif bagi yang rutin berolahraga.
# Membaca data
data <- read.csv("C:/data psd/Expanded_data_with_more_features.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
# Memeriksa struktur data
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 ...
# Menampilkan ringkasan statistik untuk nilai Math, Reading, dan Writing
summary(data$MathScore)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 56.00 67.00 66.56 78.00 100.00
summary(data$ReadingScore)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.00 59.00 70.00 69.38 80.00 100.00
summary(data$WritingScore)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.00 58.00 69.00 68.42 79.00 100.00
# Histogram untuk distribusi nilai
hist(data$MathScore, main="Distribusi Math Score", xlab="Math Score", col="blue", breaks=20)
hist(data$ReadingScore, main="Distribusi Reading Score", xlab="Reading Score", col="green", breaks=20)
hist(data$WritingScore, main="Distribusi Writing Score", xlab="Writing Score", col="red", breaks=20)
# Boxplot untuk mendeteksi outlier
boxplot(data$MathScore, main="Boxplot Math Score", ylab="Math Score")
boxplot(data$ReadingScore, main="Boxplot Reading Score", ylab="Reading Score")
boxplot(data$WritingScore, main="Boxplot Writing Score", ylab="Writing Score")
# Menghitung frekuensi jam belajar per minggu
study_hours_freq <- table(data$WklyStudyHours)
print(study_hours_freq)
##
## < 5 > 10 5 - 10
## 955 8238 5202 16246
# Membuat barplot untuk frekuensi jam belajar
barplot(study_hours_freq, main="Frekuensi Jam Belajar Per Minggu",
xlab="Jam Belajar Per Minggu", ylab="Frekuensi", col="lightblue")
# Menemukan jam belajar yang paling sering dilakukan
most_frequent_study_hours <- names(which.max(study_hours_freq))
most_frequent_count <- max(study_hours_freq)
cat("Jam belajar per minggu yang paling banyak dilakukan adalah:",
most_frequent_study_hours, "dengan frekuensi:", most_frequent_count)
## Jam belajar per minggu yang paling banyak dilakukan adalah: 5 - 10 dengan frekuensi: 16246
# Mengelompokkan data berdasarkan EthnicGroup
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data_grouped <- data %>% group_by(EthnicGroup)
# Menghitung rata-rata nilai per kelompok etnis
data_summarised <- data_grouped %>% summarise(
MathScore = mean(MathScore),
ReadingScore = mean(ReadingScore),
WritingScore = mean(WritingScore)
)
# Membuat barplot untuk perbedaan nilai per kelompok etnis
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(data_summarised, aes(x = EthnicGroup, y = MathScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Math per Ethnic", xlab = "Ethnic Group", ylab = "Rata-rata Nilai Math")
ggplot(data_summarised, aes(x = EthnicGroup, y = ReadingScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Reading per Ethnic", xlab = "Ethnic Group", ylab = "Rata-rata Nilai Reading")
ggplot(data_summarised, aes(x = EthnicGroup, y = WritingScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Writing per Ethnic", xlab = "Ethnic Group", ylab = "Rata-rata Nilai Writing")
# Menghitung dan memvisualisasikan korelasi antara nilai
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.3
## corrplot 0.95 loaded
corr_matrix <- cor(data[,c("MathScore", "ReadingScore", "WritingScore")])
corrplot(corr_matrix, method = "circle")
corrplot(corr_matrix, method = "circle", colors = c("blue", "red", "green"),
title = "Korelasi Antara Variabel", xlab = "Variabel", ylab = "Variabel")
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "colors" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "colors" is not a graphical parameter
## Warning in title(title, ...): "colors" is not a graphical parameter
# Mengelompokkan data berdasarkan PracticeSport
data_grouped <- data %>% group_by(PracticeSport)
# Menghitung rata-rata nilai per kelompok praktik olahraga
data_summarised <- data_grouped %>% summarise(
MathScore = mean(MathScore),
ReadingScore = mean(ReadingScore),
WritingScore = mean(WritingScore)
)
# Membuat barplot untuk perbedaan nilai per praktik olahraga
ggplot(data_summarised, aes(x = PracticeSport, y = MathScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Math per PracticeSport", xlab = "PracticeSport", ylab = "Rata-rata Nilai Math")
ggplot(data_summarised, aes(x = PracticeSport, y = ReadingScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Reading per PracticeSport", xlab = "PracticeSport", ylab = "Rata-rata Nilai Reading")
ggplot(data_summarised, aes(x = PracticeSport, y = WritingScore)) +
geom_bar(stat = "identity") +
labs(title = "Perbedaan Nilai Writing per PracticeSport", xlab = "PracticeSport", ylab = "Rata-rata Nilai Writing")