NIM : 16231050

Berikut merupakan data yang digunakan pada soal, dan dibawah adalah kodingannya untuk mengimport data dengan menggunakan Rstudio:

data<- read.csv("D:/Download/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 ...

Pertanyaan :

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

Untuk mengetahui distribusi suatu variabel, kita dapat menggunakan visualisasi histogram guna melihat apakah data tersebut berdistribusi normal atau tidak. Berikut merupakan contoh kodingan yang dapat digunakan :

library(ggplot2)
library(gridExtra)

p1 <- ggplot(data, aes(x = MathScore)) + 
  geom_histogram(binwidth = 5, fill = "yellow", alpha = 0.5, color = "black") + 
  geom_density(color = "red", size = 1) +
  labs(title = "Distribusi Math Score", x = "Math Score", y = "Frequency") + 
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p2 <- ggplot(data, aes(x = ReadingScore)) + 
  geom_histogram(binwidth = 5, fill = "brown", alpha = 0.5, color = "black") + 
  geom_density(color = "red", size = 1) +
  labs(title = "Distribusi Reading Score", x = "Reading Score", y = "Frequency") + 
  theme_minimal()
p3 <- ggplot(data, aes(x = WritingScore)) + 
  geom_histogram(binwidth = 5, fill = "green", alpha = 0.5, color = "black") + 
  geom_density(color = "red", size = 1) +
  labs(title = "Distribusi Writing Score", x = "Writing Score", y = "Frequency") + 
  theme_minimal()
grid.arrange(p1, p2, p3, ncol = 3)

Berdasarkan visualisasi yang diperoleh, distribusi pada variabel “Math Score”, “Reading Score”, dan “Writing Score” menunjukkan pola distribusi yang tidak normal. Hal ini terlihat dari grafik yang condong ke sebelah kanan, sehingga dapat disimpulkan bahwa ketiga variabel tersebut tidak berdistribusi normal.

Cek outlier :
p4 <- ggplot(data, aes(y = MathScore, x = "Math")) + 
  geom_boxplot(fill = "yellow", alpha = 0.5) + 
  labs(title = "Boxplot Math Score", x = "", y = "Score") +
  theme_minimal()

p5 <- ggplot(data, aes(y = ReadingScore, x = "Reading")) + 
  geom_boxplot(fill = "brown", alpha = 0.5) + 
  labs(title = "Boxplot Reading Score", x = "", y = "Score") +
  theme_minimal()

p6 <- ggplot(data, aes(y = WritingScore, x = "Writing")) + 
  geom_boxplot(fill = "green", alpha = 0.5) + 
  labs(title = "Boxplot Writing Score", x = "", y = "Score") +
  theme_minimal()

grid.arrange(p4, p5, p6, ncol = 3)

Berdasarkan gambar yang diperoleh, pada setiap variabel “Math Score”, “Reading Score”, dan “Writing Score” terdapat data yang termasuk outlier. Outlier tersebut terlihat berada di bawah garis whisker pada boxplot.

2. Apa yang dimaksud dengan oulier? jelaskan cara memeriksa dan menanggulanginya?

Outlier adalah data yang memiliki nilai yang sangat berbeda atau jauh dari sebagian besar data lainnya dalam suatu dataset. Outlier bisa terjadi karena kesalahan pengukuran, kesalahan input data, atau memang merupakan bagian dari variasi alami dalam data.

Cara Memeriksa Outlier:

  • Pendekatan Statistik
  • Visualisasi Data

Cara Menanggulangi Outlier:

  • Memeriksa Kembali Data
    • Cek apakah outlier terjadi karena kesalahan input data atau kesalahan pengukuran.
    • Jika ditemukan kesalahan, lakukan koreksi atau hapus data yang bermasalah.
  • Menghapus Outlier
    • Jika outlier disebabkan oleh kesalahan yang jelas, bisa dihapus.
    • Namun, penghapusan harus hati-hati, terutama jika outlier merupakan bagian dari variasi alami data.
  • Menggunakan Transformasi Data
    • Jika outlier disebabkan oleh distribusi yang tidak normal, gunakan transformasi logaritmik, akar kuadrat, atau Box-Cox untuk mengurangi dampaknya.
  • Menggunakan Metode Robust terhadap Outlier
    • Gunakan median atau IQR daripada mean dan standar deviasi.
    • Gunakan algoritma yang lebih tahan terhadap outlier, seperti Regresi Robust dalam pemodelan statistik.
  • Winsorizing
    • Mengganti nilai outlier dengan nilai tertentu, misalnya menggantinya dengan nilai kuartil tertentu untuk mengurangi dampaknya.

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

Dalam menentukan jam belajar mana yang paling banyak dilakukan oleh student, kita dapat menghitung frekuensi kategori pada data tersebut dengan memilih variabel “WklyStudyHours”, dapat lihat pada kodingan berikut:

study_hours <- names(which.max(table(data$WklyStudyHours)))
study_hours
## [1] "5 - 10"

Jadi, Kategori jam Belajar student yang paling banyak dilakukan adalah “5-10” jam.

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

Untuk mengetahui perbedaan nilai siswa (“Math”, “Reading”, dan “Writing”) berdasarkan per ethnic, dilakukan perhitungan rata-rata dari masing-masing variabel tersebut untuk setiap kategori pada variabel ethnic group. Perhitungan ini dilakukan menggunakan R, sebagai berikut:

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

Dari hasil yang diperoleh di atas, sehingga dapat dilihat pada nilai para student terdapat beberapa student yang tidak memiliki group ethnisnya. Untuk mempermudah dalam melihat perbedaan nilai “Math”, “Reading”, dan “Writing” , dibuat visualisasi dalam bentuk column chart.

library(ggplot2)
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.3
ethnic_scores_long <- pivot_longer(ethnic_scores, cols = -EthnicGroup, names_to = "Subject", values_to = "AverageScore")

ggplot(ethnic_scores_long, aes(x = EthnicGroup, y = AverageScore, fill = Subject)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Perbandingan Nilai Math, Reading, dan Writing per Ethnic Group",
       x = "Ethnic Group", y = "Rata-rata Nilai") +
  theme_minimal() +
  scale_fill_manual(values = c("red", "green", "blue"))

dan pada visualisasi yang diperoleh dapat dilihat bahwa group E memiliki nilai rata-rata yang keseluruhannya menduduki nilai paling tinggi mulai dari nilai “Math”, “Reading”, dan “Writing” score dari pada group lainnya, dan dilihat group A memiliki nilai yang lebih kecil dari group-group lainnya.

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

dalam membuat corelation heatmap digunakan R dalam membuatnya dengan bantuan library ggplot2 .Berikut kodingan yang dilakukan:

library(ggplot2)
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.4.3
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
library(tidyr)
score_data <- data[, c("MathScore", "ReadingScore", "WritingScore")]
cor_matrix <- cor(score_data, use = "complete.obs")
melted_cor <- melt(cor_matrix)
ggplot(melted_cor, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +  
  geom_text(aes(label = round(value, 2)), color = "black", size = 5) + 
  scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0.5) +
  labs(title = "Correlation Heatmap", x = "", y = "") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Hasil visualisasi heatmap menunjukkan bahwa “Math Score”, “Reading Score”, dan “Writing Score” memiliki korelasi positif yang kuat satu sama lain. Korelasi tertinggi terlihat antara Reading Score dan Writing Score dengan nilai 0,95, yang mengindikasikan hubungan yang sangat erat. Selain itu, Math Score juga memiliki korelasi yang cukup tinggi dengan Reading Score (0,82) dan Writing Score (0,81).

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

langkap pertama dalam menjawab soal yaitu dengan menghitung rata-rata “Math score” pada setiap kategori pada practiceSport yaitu: never, regularly, dan sometimes. Berikut merupakan kodingan yang digunakan:

math_avg <- aggregate(MathScore ~ PracticeSport, data = data, FUN = mean)
math_avg
##   PracticeSport MathScore
## 1                66.63708
## 2         never  64.17108
## 3     regularly  67.83916
## 4     sometimes  66.27483

Diperoleh bahwa pada data tersebut terdapat student yang tidak memiliki data practiceSport dan nilai rata-rata tertinggi yaitu student dengan kategori regularly atau teratur dan terendah adalah student yang pernah atau tidak pernah melakukan olahraga.

berikut visualisasi yang dapat dilakukan untuk membandingkan rata-rata math score berdasarkan PracticeSport, dengan bantuan R :

library(ggplot2)
ggplot(data, aes(x = PracticeSport, y = MathScore, fill = PracticeSport)) +
  geom_boxplot() +
  labs(title = "Perbandingan Math Score Berdasarkan PracticeSport",
       x = "Practice Sport", y = "Math Score") +
  theme_minimal()

Terlihat pula bahwa terdapat beberapa data yang termasuk outlier berdasarkan visualisasi boxplot.