NIM : 16231014

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

data<- read.csv("C:/Users/ASUS/OneDrive/Hardiven/Semester 4/Sains Data/Tugas Minggu 6/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

Dalam mengetahui distribusi pada sebuah variabel, bisa menggunakan visualisasi histogram untuk mencari apakah data berdistribusi normal atau tidak. berikut merupakan kodingannya:

library(ggplot2)
library(gridExtra)

p1 <- ggplot(data, aes(x = MathScore)) + 
  geom_histogram(binwidth = 5, fill = "blue", 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 = "green", 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 = "purple", 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)

Pada visualisasi yang diperoleh didapatkan bahwa distribusi pada variabel math score,Reading score,dan Writing Score memiliki distribusi yang tidak normal karna grafik lebih condong ke sekalah kanan yang bisa dinyatakan bahwa setiap variabel memiliki distrbusi tidak normal.

cek outliear:

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

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

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

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

Pada gambar yang diperoleh pada setiap variabel Math score, reading score, dan Writing score didapatkan bahwa terdapat data-data yang berasa di outlier dan outlier didapat dilihat terdapat dibawah dari whisker menunjukkan outlier.

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

Dalam mengetahui perbedaan dari nilai student (math, writing, dan reading) per ethnic, dilakukan perhitungan untuk mengetahui nilai rata-rata variabel pada data dengan setiap kategori group pada variabel ethnic group. dilakukan perhitungan dengan R yaitu:

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

dan diperoleh hasil seperti diatas, sehingga dapat dilihat pada nilai para student terdapat beberapa student yang tidak memiliki group ethnisnya

dan berikut visualisasinya dengan menggunakan column chart agar dapat diketahui perbedaan nilai dari math, reading, dan writing scorenya lebih mudah:

library(ggplot2)
library(tidyr)
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("blue", "red", "green"))

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)
## 
## 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))

dan diperoleh Hasil heatmap menunjukkan bahwa MathScore, ReadingScore, dan WritingScore memiliki korelasi positif yang kuat satu sama lain. Korelasi tertinggi terdapat antara ReadingScore dan WritingScore (0,95), menunjukkan hubungan sangat erat. MathScore juga berkorelasi cukup tinggi dengan ReadingScore (0,82) dan WritingScore (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 never 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()

didapatkan bahwa terdapat juga beberapa data yang berada di outliear pada visualisasi boxplotnya.