Import Data

data <- read.csv("Expanded data with more features.csv", stringsAsFactors = FALSE)

1

Cek Nama Kolom

colnames(data)[colnames(data) == "MathScore"] <- "math"
colnames(data)[colnames(data) == "ReadingScore"] <- "reading"
colnames(data)[colnames(data) == "WritingScore"] <- "writing"

Tipe Data Numerik

data$math <- as.numeric(data$math)
data$reading <- as.numeric(data$reading)
data$writing <- as.numeric(data$writing)

Visualisasi Boxplot untuk outlier

boxplot(data$math, main = "Boxplot Math Score", col = "pink")

boxplot(data$reading, main = "Boxplot Reading Score", col = "red")

boxplot(data$writing, main = "Boxplot Writing Score", col = "brown")

2

Outlier

Outlier data adalah nilai yang berbeda jauh dari mayoritas data lainnya dalam suatu set. Data outlier dapat muncul karena kesalahan pengukuran, kesalahan input data, atau karena adanya anomali dalam data yang diukur.

Cara memeriksa outlier

Outlier dapat diperiksa dengan boxplot (visualisasi yang memperlihatkan nilai pencilan) dan Statistik IQR (Dengan menemukan quartil pertama dan ketiga (Q1&Q3) kemudian menghitung nilai IQR nya dengan mengurangi Q1 dan Q3).

Contoh boxplot untuk memeriksa outlier

boxplot(data$math, main = "Boxplot Math Score", col = "maroon")

boxplot(data$reading, main = "Boxplot Reading Score", col = "red")

boxplot(data$writing, main = "Boxplot Writing Score", co = "pink")

## Cara mengulangi 1. Hapus jika dianggap data error 2. Transformasi data 3. Analisis terpisah 4. Imputasi diganti dengan nilai median atau rata-rata

3

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## 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
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Lihat jumlah masing-masing kategori
table(data$WklyStudyHours)
## 
##           < 5   > 10 5 - 10 
##    955   8238   5202  16246
# Buat tabel frekuensi dan visualisasinya
studytime_freq <- data %>%
  count(WklyStudyHours) %>%
  arrange(desc(n))

ggplot(studytime_freq, aes(x = WklyStudyHours, y = n)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Distribusi Jam Belajar per Minggu",
       x = "Jam Belajar (self-study)",
       y = "Jumlah Siswa") +
  theme_minimal()

4

# Boxplot untuk nilai Math per Ethnic
boxplot(math ~ EthnicGroup, data = data,
        main = "Math Score per Ethnic", col = "blue",
        xlab = "Ethnic Group", ylab = "Math Score")

# Boxplot untuk nilai Reading per Ethnic
boxplot(reading ~ EthnicGroup, data = data,
        main = "Reading Score per Ethnic", col = "green",
        xlab = "Ethnic Group", ylab = "Reading Score")

# Boxplot untuk nilai Writing per Ethnic
boxplot(writing ~ EthnicGroup, data = data,
        main = "Writing Score per Ethnic", col = "pink",
        xlab = "Ethnic Group", ylab = "Writing Score")

5

library(ggplot2)
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.3.3
nilai <- data[, c("math", "reading", "writing")]
cor_matrix <- cor(nilai, use = "complete.obs")
cor_long <- melt(cor_matrix)

ggplot(cor_long, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(value, 2)), size = 5) +
  scale_fill_gradient2(low = "red", high = "blue", mid = "white", midpoint = 0.5) +
  theme_minimal() +
  labs(title = "Heatmap Korelasi Nilai", x = "", y = "") +
  theme(axis.text = element_text(size = 12))

6

library(dplyr)
library(ggplot2)

# Visualisasi boxplot
boxplot(math ~ PracticeSport, data = data, main = "Math Score vs PracticeSport", col = "lightblue")

# Rata-rata Math Score berdasarkan kategori PracticeSport
data %>%
  group_by(PracticeSport) %>%
  summarise(Mean_Math = mean(math, na.rm = TRUE),
            SD_Math = sd(math, na.rm = TRUE),
            Count = n())
## # A tibble: 4 × 4
##   PracticeSport Mean_Math SD_Math Count
##   <chr>             <dbl>   <dbl> <int>
## 1 ""                 66.6    14.9   631
## 2 "never"            64.2    14.9  4004
## 3 "regularly"        67.8    15.6 10793
## 4 "sometimes"        66.3    15.2 15213
# ANOVA
anova_result <- aov(math ~ PracticeSport, data = data)
summary(anova_result)
##                  Df  Sum Sq Mean Sq F value Pr(>F)    
## PracticeSport     3   41751   13917   59.31 <2e-16 ***
## Residuals     30637 7188652     235                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Visualisasi
avg_math <- data %>%
  group_by(PracticeSport) %>%
  summarise(mean = mean(math, na.rm = TRUE),
            sd = sd(math, na.rm = TRUE))

ggplot(avg_math, aes(x = PracticeSport, y = mean, fill = PracticeSport)) +
  geom_bar(stat = "identity", width = 0.5) +
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd), width = 0.2) +
  labs(title = "Rata-rata Math Score Berdasarkan PracticeSport",
       y = "Mean Math Score", x = "Practice Sport") +
  theme_minimal()

##Interpretasi

1

Distribusi data (Math Score)

Outlier

Mayoritas siswa memiliki skor matematika sedang hingga tinggi, tetapi ada sejumlah siswa dengan nilai yang sangat rendah yang menjadi outlier. Ini bisa menunjukkan adanya perbedaan kemampuan yang signifikan atau masalah dalam pembelajaran matematika bagi sebagian siswa.

Distribusi data (Reading Score)

Outlier

Skor membaca terlihat cukup baik, tetapi masih terdapat siswa dengan kemampuan membaca yang jauh di bawah rata rata, meski tidak semenonjol skor math.

Distribusi (Writing)

Outlier

Skor menulis memperlihatkan sebaran yang lebih luas, dan lebih banyak siswa dengan nilai rendah. Ini bisa menjadi indikasi bahwa kemampuan menulis merupakan tantangan bagi sebagian besar siswa dibanding membaca.

3

Mayoritas siswa menghabiskan waktu belajar mandiri sekitar 5 hingga 10 jam setiap minggu, menunjukkan bahwa ini adalah durasi yang paling umum dan mungkin dianggap cukup seimbang oleh para siswa.

4

Kelompok etnis E memiliki nilai median tertinggi pada semua mata pelajaran (matematika, membaca, dan menulis), menunjukkan performa akademik terbaik. Sebaliknya, kelompok B dan C cenderung memiliki nilai median lebih rendah. Outlier dengan nilai rendah paling banyak ditemukan pada kelompok C dan D, terutama pada mata pelajaran membaca dan menulis.

5

Berdasarkan heatmap korelasi, ketiga nilai (math, reading, dan writing) memiliki hubungan positif yang kuat. Korelasi tertinggi terdapat antara nilai reading dan writing (0.95), menunjukkan bahwa siswa dengan kemampuan membaca yang baik cenderung juga memiliki kemampuan menulis yang baik. Korelasi antara math dengan reading (0.82) dan math dengan writing (0.81) juga cukup tinggi, menandakan hubungan yang erat antar ketiganya, meskipun sedikit lebih lemah dibandingkan reading-writing.

6

Dari kedua grafik terlihat bahwa siswa yang berolahraga secara rutin (regularly) memiliki rata-rata nilai matematika yang sedikit lebih tinggi dibandingkan dengan siswa yang tidak pernah atau hanya kadang-kadang berolahraga. Median dan rata-rata nilai matematika pada kelompok ini sedikit lebih unggul, seperti terlihat pada boxplot dan bar chart. Meskipun begitu, selisih antar kelompok tidak terlalu besar dan terdapat tumpang tindih pada rentang nilai, yang ditunjukkan oleh error bar dan sebaran nilai. Hal ini menunjukkan bahwa meskipun ada kecenderungan positif antara kebiasaan berolahraga dan nilai matematika, perbedaannya tidak terlalu mencolok secara visual.