library(MASS)
library(readxl)
# Import data dari Excel
data <- read_excel("C:/Users/MyBook Hype/Downloads/Expanded_data_with_more_features.xlsx")
str(data)
## tibble [30,641 × 15] (S3: tbl_df/tbl/data.frame)
## $ ...1 : num [1:30641] 0 1 2 3 4 5 6 7 8 9 ...
## $ Gender : chr [1:30641] "female" "female" "female" "male" ...
## $ EthnicGroup : chr [1:30641] NA "group C" "group B" "group A" ...
## $ ParentEduc : chr [1:30641] "bachelor's degree" "some college" "master's degree" "associate's degree" ...
## $ LunchType : chr [1:30641] "standard" "standard" "standard" "free/reduced" ...
## $ TestPrep : chr [1:30641] "none" NA "none" "none" ...
## $ ParentMaritalStatus: chr [1:30641] "married" "married" "single" "married" ...
## $ PracticeSport : chr [1:30641] "regularly" "sometimes" "sometimes" "never" ...
## $ IsFirstChild : chr [1:30641] "yes" "yes" "yes" "no" ...
## $ NrSiblings : num [1:30641] 3 0 4 1 0 1 1 1 3 NA ...
## $ TransportMeans : chr [1:30641] "school_bus" NA "school_bus" NA ...
## $ WklyStudyHours : chr [1:30641] "< 5" "5 - 10" "< 5" "5 - 10" ...
## $ MathScore : num [1:30641] 71 69 87 45 76 73 85 41 65 37 ...
## $ ReadingScore : num [1:30641] 71 90 93 56 78 84 93 43 64 59 ...
## $ WritingScore : num [1:30641] 74 88 91 42 75 79 89 39 68 50 ...
library(ggplot2)
# Boxplot untuk Math Score
ggplot(data, aes(y = MathScore)) +
geom_boxplot(fill = "blue", alpha = 0.5) +
labs(title = "Boxplot Math Score", y = "Math Score")
# Boxplot untuk Reading Score
ggplot(data, aes(y = ReadingScore)) +
geom_boxplot(fill = "green", alpha = 0.5) +
labs(title = "Boxplot Reading Score", y = "Reading Score")
# Boxplot untuk Writing Score
ggplot(data, aes(y = WritingScore)) +
geom_boxplot(fill = "red", alpha = 0.5) +
labs(title = "Boxplot Writing Score", y = "Writing Score")
Outlier adalah data yang memiliki nilai ekstrem atau jauh berbeda dari sebagian besar data lainnya dalam suatu dataset. Outlier dapat terjadi karena kesalahan pengukuran, variasi alami dalam data, atau kejadian luar biasa.
cara memeriksa outlier : - Menggunakan Statistik Deskriptif : Hitung rata-rata (mean) dan simpangan baku (standar deviasi),Jika suatu nilai lebih dari 3 standar deviasi dari mean, maka kemungkinan besar itu adalah outlier.
mean_value <- mean(data$MathScore)
sd_value <- sd(data$MathScore)
outliers <- data[data$MathScore > (mean_value + 3 * sd_value) | data$MathScore < (mean_value - 3 * sd_value),]
library(ggplot2)
ggplot(data, aes(y = ReadingScore)) + geom_boxplot()
- Menggunakan IQR (Interquartile Range) : Outlier didefinisikan sebagai
nilai yang lebih kecil dari Q1 - 1.5 × IQR atau lebih besar dari Q3 +
1.5 × IQR
Q1 <- quantile(data$WritingScore, 0.25)
Q3 <- quantile(data$WritingScore, 0.75)
IQR_value <- Q3 - Q1
lower_bound <- Q1 - 1.5 * IQR_value
upper_bound <- Q3 + 1.5 * IQR_value
outliers <- data[data$WritingScore < lower_bound | data$WritingScore > upper_bound, ]
cara menanggulangi outlier - memeriksa penyebabnya - Menghapus Outlier (Jika Tidak Relevan atau Kesalahan Input)
data_clean <- data[data$ReadingScore >= lower_bound & data$ReadingScore <= upper_bound, ]
data$nilai_transformed <- log(data$ReadingScore)
data$WklyStudyHours <- as.factor(data$WklyStudyHours)
ggplot(data, aes(x = factor(WklyStudyHours))) +
geom_bar(fill = "purple", color = "black") +
labs(title = "Distribusi Jam Belajar per Minggu", x = "Jam Belajar", y = "Jumlah Siswa") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplot(data, aes(x = EthnicGroup, y = MathScore, fill = EthnicGroup)) +
geom_boxplot() +
labs(title = "Perbedaan Math Score berdasarkan Ethnic Group", x = "Ethnic Group", y = "Math Score")
ggplot(data, aes(x = EthnicGroup, y = ReadingScore, fill = EthnicGroup)) +
geom_boxplot() +
labs(title = "Perbedaan Reading Score berdasarkan Ethnic Group", x = "Ethnic Group", y = "Reading Score")
ggplot(data, aes(x = EthnicGroup, y = WritingScore, fill = EthnicGroup)) +
geom_boxplot() +
labs(title = "Perbedaan Writing Score berdasarkan Ethnic Group", x = "Ethnic Group", y = "Writing Score")
library(ggcorrplot)
# Menghitung matriks korelasi
cor_matrix <- cor(na.omit(data[, c("MathScore", "ReadingScore", "WritingScore")]))
# Plot heatmap korelasi
ggcorrplot(cor_matrix, method = "circle", type = "lower", lab = TRUE)
Berdasarkan heatmap korelasi, terdapat hubungan positif yang kuat antara tiga skor: Reading Score, Writing Score, dan Math Score. - Reading Score dan Writing Score memiliki korelasi sangat kuat (0.95), menunjukkan bahwa siswa dengan kemampuan membaca yang baik cenderung memiliki kemampuan menulis yang baik juga. - Math Score dan Reading Score memiliki korelasi cukup kuat (0.82), menandakan bahwa performa dalam matematika berhubungan dengan kemampuan membaca. - Math Score dan Writing Score juga memiliki korelasi cukup kuat (0.81), tetapi hubungan ini sedikit lebih lemah dibandingkan dengan reading-writing.
kesimpulan : Secara keseluruhan, skor membaca dan menulis memiliki hubungan paling erat, sedangkan skor matematika masih berkorelasi positif tetapi tidak sekuat keterkaitan membaca-menulis.
Boxplot ini menunjukkan perbedaan nilai matematika (Math Score) berdasarkan kebiasaan berolahraga (Practice Sport). - Kategori “Never” (tidak pernah olahraga) memiliki median Math Score yang lebih rendah dibandingkan kategori lainnya, dengan banyak outlier di bagian bawah. - Kategori “Regularly” (berolahraga secara rutin) memiliki median yang lebih tinggi dibandingkan “Never”, menunjukkan kemungkinan hubungan positif antara olahraga teratur dan nilai matematika yang lebih baik. - Kategori “Sometimes” (kadang-kadang olahraga) memiliki distribusi yang mirip dengan “Regularly”, tetapi sedikit lebih lebar. - Kategori “NA” (tidak ada data) memiliki distribusi yang mirip dengan “Sometimes”, tetapi dengan lebih sedikit variasi.
kesimpulan : Secara keseluruhan, data ini menunjukkan bahwa siswa yang berolahraga secara teratur atau kadang-kadang cenderung memiliki Math Score lebih tinggi dibandingkan mereka yang tidak pernah berolahraga.