Melakukan import data yang berasal dari kaggle, didapatkan seperti dibawah ini:

#Import data
data <- read.csv("C:/Users/LENOVO/Documents/PSD/Expanded_data_with_more_features.csv", header = TRUE, sep =";")
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 ...

SOAL

  1. Periksa distribusi dari variabel math, reading dan writing score, cek apakah ada outlier
  2. Apa yang dimaksud dengan oulier? jelaskan cara memeriksa dan menanggulanginya?
  3. Jam belajar manakah per minggu yang paling banyak dilakukan oleh student
  4. Periksa perbedaan nilai student (math, writing, reading) per ethnic
  5. cek korelasi antar variabel math, reading, and writing score menggunakan corelation heatmap
  6. Periksa perbedaan antara nilai student per PracticeSport. Apakah rata-rata math score pada siswa menunjukkan nilai yang tinggi pada student yang sering berolahraga

JAWABAN

No.1

Untuk memeriksa apakah terdapat outliers, dapat menggunakan visualisasi yaitu boxplot pada masing-masing variabel math, reading, dan writing score

#outliers math score
boxplot_math <- boxplot(data$MathScore, main = "Boxplot Math Score", col = "pink")

boxplot_reading <- boxplot(data$ReadingScore, main ="Boxplot Reading Score", col = "skyblue")

boxplot_writing <- boxplot(data$WritingScore, main = "Boxplot Writing Score", col = "lightgreen")

Dari visualisasi di atas, diketahui bahwa terdapat ouliers dari setiap variabel. Variabel Math Score terdapat oulier yang sangat jauh dari rentang batasnya, dapat dilihat dari 1 titik yang memiliki jarak paling jauh dibandingkan titik lainnya. Sedangkan untuk outlier yang di reading score memiliki jarak yang lumayan sama dan untuk writing score terdapat 2 titik atau 2 nilai yang memiliki perbedaan lumayan jauh denagn batas bawah dan outlier lainnya.

No.2

Outlier adalah data observasi yang berbeda secara signifikan dari sebagian besar nilai lain dalam kelompoknya.

Untuk mengetahui apakah terdapat outliers, dapat dilihat dengan menggunakan visualisasi seperti boxplot di atas. outliers berupa titik-titik di luar rentang boxplot atau batas atas dan bawah.Tidak hanya itu, untuk mendeteksi apakah terdapat outlier juga bisa menggunakan histogram. Dan jika ingin menghitung secara manual dapat menggunakan rumus yaitu:

Batas bawah : Q1 - (1.5 x IQR)

Batas atas : Q3 + (1.5 x IQR)

Untuk mengatasinya yaitu :

No.3

Untuk mengetahui jam belajar per minggu siswa yang paling banyak dengan menggunakan bar chart.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
data$WklyStudyHours <- ifelse(grepl("<", data$WklyStudyHours), "<5 Jam", 
                      ifelse(grepl("5 -- 10", data$WklyStudyHours), "5-10 Jam", 
                      ifelse(grepl(">", data$WklyStudyHours), ">10 Jam", "Unknown")))

# Menghitung jumlah siswa per kategori
study_counts <- as.data.frame(table(data$WklyStudyHours))
names(study_counts) <- c("Kategori", "Jumlah_Siswa")
study_counts <- study_counts[order(-study_counts$Jumlah_Siswa), ]

ggplot(study_counts, aes(x = reorder(Kategori, -Jumlah_Siswa), y = Jumlah_Siswa, fill = "darkgrey")) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  geom_text(aes(label = Jumlah_Siswa), vjust = -0.5) +
  scale_fill_identity() +
  labs(title = "Jumlah Siswa Berdasarkan Jam Belajar", x = "Kategori Jam Belajar", y = "Jumlah Siswa") +
  theme_minimal()

Dari bar chart di atas, diketahui bahwa jam belajar siswa per minggu terbanyak di 5-10 jam dengan jumlah 16246 siswa. Lalu jumlah siswa sebanyak 8238 untuk kurang dari 5 jam per minggunya. Sebanyak 5202 untuk lebih dari 10 jam dan sisanya yaitu 955 untuk jam belajar siswa yang tidak diketahui.

No.4

Perbandingan nilai siswa per ethnic berdasarkan nilai math, reading dan writing menggunakan rata-rata nilainya untuk mengetahui perbandingannya.

library(ggplot2)
transpose_data <- reshape2::melt(data, id.vars = "EthnicGroup", measure.vars = c("MathScore", "ReadingScore", "WritingScore")) #menggunakan reshape2::melt untuk mengubah bentuk data yang awalnya per baris, menjadi perkolom

ggplot(transpose_data, aes(x = EthnicGroup, y = value, fill = variable)) +
  geom_bar(stat = "summary", fun = "mean", position = "dodge") +
  labs(title = "Rata-rata Nilai Siswa berdasarkan Etnis", x = "Etnis", y = "Rata-rata Nilai") +
  theme_minimal() +
  scale_fill_manual(values = c("MathScore" = "skyblue", "ReadingScore" = "blue", "WritingScore" = "navy"))

Dari 5 grup A, B, C, D, E dan tidak diketahui, math score rata-rata tertinggi berada di grup E dan rata-rata terendah berada di grup A, Reading score rata-rata tertinggi berada di grup E dan rata-rata terendah berada di grup A Sedangkan writing score rata-rata tertinggi berada di Grup E dan rata-rata terendah berada di grup A. Sehingga untuk rata-rata tertinggi keseluruhan berada di grup E dan rata-rata terendah berada di grup A.

No. 5

Korelasi antar variabel math score, reading score dan writing score dengan menggunakan heatmap

library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.3
## corrplot 0.95 loaded
nilai <- data[, c("MathScore", "ReadingScore", "WritingScore")]
korelasi_matrix <- cor(nilai, use = "complete.obs")

corrplot(korelasi_matrix, method = "color", type = "lower", tl.col = "black", tl.srt = 40, addCoef.col = "white", number.cex = 0.9)

Dari heatmap korelasi di atas, diketahui bahwa korelasi terbesar maka berwarna semakin biru. Korelasi antara reading score dan math score sebesar 0.82 yang berarti memiliki korelasi yang tinggi dan memiliki warna biru yang sedikit gelap. Korelasi Writing Score dengan Math Score sebesar 0.81 yang artinya bahwa memiliki hubungan yang kuat antar variabel dan memiliki warna biru yang sedikit gelap tetapi tidak segelap korelasi antara Reading Score dan Math Score. Dan korelasi Writing Score dengan Reading Score sebesar 0.95 yang artinya mendekati sempurna bahwa terdapat hubungan yang sangat kuat antar 2 variabel dan memiliki warna biru yang gelap.

No. 6

Untuk mengetahui apakah siswa yang sering berolahraga mempengaruhi nilai matematika siswa. maka dibuarkan barchart untuk mengetahui itu

library(ggplot2)
ggplot(data, aes(x= PracticeSport, y= MathScore))+
  geom_bar(stat = "summary", fun = "mean")+
  geom_text(stat = "summary", fun = "mean", aes(label = round(..y.., 1)), vjust = -0.5, size = 4) +
  labs(title = "Rata-rata nilai matematika berdasarkan kebiasaan olahraga", x = "Kebiasaan olahraga", y ="rata-rata nilai matematika")+
  theme_minimal()
## Warning: The dot-dot notation (`..y..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(y)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Dari visualisasi di atas, diketahui bahwa kebiasaan olahraga tidak mempengaruhi nilai Matematika dibuktikan dengan siswa yang tidak berolahraga memiliki rata-rata math score yang rendah dibandingkan dengan rata-rata math score siswa yang sering berolahraga.