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 ...
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.
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:
Cara Menanggulangi Outlier:
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.