Data yang digunakan di tugas ini adalah https://www.kaggle.com/datasets/desalegngeb/students-exam-scores?resource=download

1.Periksa distribusi dari variabel math, reading dan writing score, cek apakah ada outlier!

data<- read.csv("C:/Users/LENOVO/Downloads/archive/Expanded_data_with_more_features.csv")
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 ...
#Boxplotnya say
boxplot(data$MathScore, main = "Boxplot Math Score", col = "orange")

boxplot(data$ReadingScore, main = "Boxplot Reading Score", col = "darkgray")

boxplot(data$WritingScore, main = "Boxplot Writing Score", col = "lightyellow")

#Fungsi untuk mencari outlier
get_outliers <- function(x) {
  Q1 <- quantile(x, 0.25)
  Q3 <- quantile(x, 0.75)
  IQR <- Q3 - Q1
  lower_bound <- Q1 - 1.5 * IQR
  upper_bound <- Q3 + 1.5 * IQR
  return(x[x < lower_bound | x > upper_bound])
}

#Cek outlier
get_outliers(data$MathScore)
##  [1] 18  0 21 18  8 21 22 17 20 16 21 21 22 19 22 22 22 17 20 15 15 18 18 11 19
## [26] 12 12 13 18 22 17 19 21 21  9 18 21 22 10  7 22 21 17 22 10 22 14 14 19 19
## [51] 11  9 10 13 18 20 21 16 13 22 13 22 10 16 21 21 16 18 20 19  9 19 11  9 21
## [76] 19
get_outliers(data$ReadingScore)
##  [1] 17 25 23 24 24 26 23 21 18 25 15 23 24 11 17 24 23 26 24 17 20 24 24 25 19
## [26] 25 16 20 22 26 22 27 27 23 22 23 19 23 24 11 27 24 26 22 27 23 17 23 12 12
## [51] 18 23 16 27 23 23 21 20 20 26 26 21 23 26 27 24 27 16 23 24 23 12 26 15 21
## [76] 27 17 25 18 19 10 25 23 25 25 26 18 14 25 19
get_outliers(data$WritingScore)
##   [1] 10 21 19 26 15 23 17 25 26 24 15 20 21 25 24 23  6 17 24 22 22 21 25 14 26
##  [26] 25 18 16 19 23 26 19 24 14 17 26 24 24 21 24 23 15 26 24 18 19 20 21 24 15
##  [51] 24 12 22 25 18 16 24 26 17 19 24 18  9 19 20 25 18 21 23 19 16 18 25 23 20
##  [76] 20 20 22 26 26 26 24 26 25 18 20 23 24 23 17 15 21 12 25 16 25 20 18 13 26
## [101] 20 23 21 26 26 22  4 20 24

Dari tampilan diatas dapat disimpulkan bahwa dari ketiga variabel memiliki banyak outlier. ## MathScore Dari MathScore terdapat beberapa nilai dibawah batas IQR/Outlier, misalnya 8, 9, 10, dst. Artinya terdapat cukup banyak siswa yang memiliki nilai matematika jauh lebih rendah jika dibandingkan mayoritas siswa lainnya.

ReadingScore

Dari ReadingScore ada beberapa nilai dibawah juga seperti MathScore, seperti 11, 12, 13, dst. Artinya distribusi nilai membaca para siswa memiliki beberapa nilai rendah jika dibandingkan mayoritas siswa lainnya.

WritingScore

Dari WritingScore juga ada nilai dibawah seperti ReadingScore & MathScore, seperti 6, 9, 10, dst. Artinya nilai menulis para siswa memiliki beberapa yang nilainya jauh lebih rendah jika dibandingkan mayoritas siswa yang lainnya.

2. Apa yang dimaksud dengan outlier? Jelaskan cara memeriksa dan menanggulanginya!

Outlier adalah nilai yang menyimpang jauh dari mayoritas data lainnya. Biasanya, outlier muncul sebagai nilai yang terlalu kecil atau terlalu besar, sehingga dapat mempengaruhi hasil analisis statistik, seperti rata-rata dan regresi.

Untuk memeriksa outlier kita dapat menggunakan:

Boxplot

Untuk memeriksa secara visual, dimana titik-titik diluar garis itu dianggap sebagai outlier.

Metode IQR

  • Menghitung Q1(Kuartil Bawah/25%)
  • Menghitung Q3(Kuartil Atas/75%)
  • Hitung IQR = Q3 - Q1
  • Tentukan batas bawah & atas:
  • Lower = Q1 - 1,5 x IQR
  • Upper = Q3 + 1,5 x IQR

Untuk menanggulanginya kita dapat membiarkannya, menghapusnya(jika kesalahan input/nilainya mengganggu analisis), ditransformasi(log atau sejenisnya), diimputasi(digantikan dengan nilai median, mean, atau prediksi dari model jika perlu.)

3. Jam belajar manakah per minggu yang paling banyak dilakukan oleh student?

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(data, aes(x = WklyStudyHours)) +
  geom_bar(fill = "blue") +
  labs(title = "Frekuensi Jam Belajar per Minggu",
       x = "Jam Belajar per Minggu",
       y = "Jumlah Siswa")

Dari visualisasi di atas, dapat disimpulkan bahwa durasi jam belajar yang paling banyak digunakan oleh para siswa adalah diantara 5-10 jam perminggu.

4. Periksa perbedaan nilai student(math, writing, reading) per ethnic!

library(ggplot2)
#Nilai Matematika
ggplot(data, aes(x = EthnicGroup, y = MathScore)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Math Score per Ethnic Group")

#Nilai Membaca
ggplot(data, aes(x = EthnicGroup, y = ReadingScore)) +
  geom_boxplot(fill = "pink") +
  labs(title = "Reading Score per Ethnic Group")

#Nilai Menulis
ggplot(data, aes(x = EthnicGroup, y = WritingScore)) +
  geom_boxplot(fill = "lightblue") +
  labs(title = "Writing Score per Ethnic Group")

aggregate(MathScore ~ EthnicGroup, data = data, FUN = mean)
##   EthnicGroup MathScore
## 1              66.18587
## 2     group A  62.99189
## 3     group B  63.49022
## 4     group C  64.69572
## 5     group D  67.66640
## 6     group E  75.29894
aggregate(ReadingScore ~ EthnicGroup, data = data, FUN = mean)
##   EthnicGroup ReadingScore
## 1                 68.91576
## 2     group A     66.78774
## 3     group B     67.32046
## 4     group C     68.43823
## 5     group D     70.38225
## 6     group E     74.25142
aggregate(WritingScore ~ EthnicGroup, data = data, FUN = mean)
##   EthnicGroup WritingScore
## 1                 67.90054
## 2     group A     65.25192
## 3     group B     65.89513
## 4     group C     66.99924
## 5     group D     70.89084
## 6     group E     72.67706

MathScore

Dari hasil analisis, didapatkan bahwa Group E memiliki nilai rata-rata matematika tertinggi, sementara Group A terendah.

ReadingScore

Dari hasil analisis, didapatkan bahwa Group E memiliki nilai rata-rata membaca tertinggi, sementara Group A terendah.

WritingScore

Dari hasil analisis, didapatkan bahwa Group E memiliki nilai rata-rata menulis tertinggi, sementara Group A terendah

Ini menunjukkan bahwa perbedaan etnis berkorelasi dengan perbedaan performa akademik dalam data yang digunakan.

5. Cek korelasi antar variabel math, reading, and writing score menggunakan corelation heatmap!

cor(data[, c("MathScore", "ReadingScore", "WritingScore")])
##              MathScore ReadingScore WritingScore
## MathScore    1.0000000    0.8178249    0.8071182
## ReadingScore 0.8178249    1.0000000    0.9525844
## WritingScore 0.8071182    0.9525844    1.0000000
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 = "color", addCoef.col = "white", number.cex = 0.8)

Ketiga variabel (MathScore, ReadingScore, dan WritingScore) memiliki hubungan positif yang kuat. Ini menunjukkan bahwa kemampuan akademik siswa cenderung seimbang di ketiga bidang ini. Hasil ini juga memperkuat kemungkinan bahwa intervensi belajar di satu bidang bisa berdampak pada bidang lainnya. Terutama dengan korelasi Reading–Writing dimana korelasinya paling kuat yaitu sebesar 0.95, yang menunjukkan hubungan sangat erat.

6. Periksa perbedaan antara nilai student per PracticeSport! Apakah rata-rata math score pada siswa menunjukkan nilai yang tinggi pada student yang sering berolahraga?

aggregate(MathScore ~ PracticeSport, data = data, FUN = mean)
##   PracticeSport MathScore
## 1                66.63708
## 2         never  64.17108
## 3     regularly  67.83916
## 4     sometimes  66.27483
aggregate(ReadingScore ~ PracticeSport, data = data, FUN = mean)
##   PracticeSport ReadingScore
## 1                   69.58796
## 2         never     68.33766
## 3     regularly     69.94302
## 4     sometimes     69.24131
aggregate(WritingScore ~ PracticeSport, data = data, FUN = mean)
##   PracticeSport WritingScore
## 1                   68.51981
## 2         never     66.52273
## 3     regularly     69.60400
## 4     sometimes     68.07244
boxplot(MathScore ~ PracticeSport, data = data, col = "coral")

Berdasarkan data yang didapatkan, siswa yang paling sering berolahraga (“regularly”) memiliki nilai matematika rata-rata tertinggo, yaitu sebesar 67.84. Sedangkan siswa yang tidak pernah berolahraga (“never”) memiliki nilai matematika rata-rata terendah, yaitu 64.17.

Jadi jawabannya iya, siswa yang sering berolahraga menunjukkan nilai rata-rata matematika yang tinggi.