data <- read.csv("C:/Users/FIOLA/OneDrive/Documents/SEMESTER 4/PSD/Expanded_Data.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(head)
## function (x, ...)
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.3
library(ggplot2)
data_long <- data %>%
pivot_longer(cols = c(MathScore, ReadingScore, WritingScore), names_to = "kategori", values_to = "nilai")
ggplot(data_long, aes(x = kategori, y = nilai, fill = kategori)) +
geom_boxplot() +
scale_fill_manual(values = c("MathScore" = "#FFB7CE",
"ReadingScore" = "#AEC6CF",
"WritingScore" = "#B39EB5")) +
labs(title = "Boxplot Deteksi Outlier", x = "Kategori", y = "value") +
theme_minimal()
Berdasarkan boxplot deteksi outlier, dapat disimpulkan bahwa sebaran nilai dari ketiga variabel skor—MathScore, ReadingScore, dan WritingScore—memiliki pola yang cukup mirip, dengan rentang antar kuartil berada di kisaran nilai 60 hingga 80-an. Ketiga kategori skor juga menunjukkan keberadaan outlier, terutama pada sisi nilai rendah, yang berarti ada cukup banyak siswa yang memperoleh nilai jauh di bawah mayoritas siswa lainnya. Outlier paling banyak ditemukan pada MathScore, yang menandakan bahwa lebih banyak siswa mengalami kesulitan pada mata pelajaran matematika dibandingkan dengan membaca dan menulis. Secara keseluruhan, data ini menunjukkan bahwa performa akademik siswa cenderung lebih baik dan lebih stabil dalam keterampilan membaca dan menulis daripada dalam matematika.
Outlier adalah nilai yang jauh berbeda dari nilai lainnya dalam kumpulan data. Nilai yang ada di outlier bisa jauh lebih tinggi maupun lebih rendah dibandingkan dengan nilai-nilai lain dalam dataset. Outlier bisa terjadi karena berbagai alasan, termasuk kesalahan pengukuran, kejadian langka, atau karena faktor lain yang tidak terduga. Mendeteksi outlier merupakan langkah penting dalam analisis data karena outlier memiliki dampak signifikan terhadap hasil analisis dan berpotensi menghasilkan kesimpulan yang tidak akurat.
Berikut beberapa cara untuk mendeteksi outlier:
Metode Inter Quartile Range (IQR) Menggunakan kuartil pertama dan ketiga (Q1 dan Q3) kemudian menghitung nilai IQRnya dengan mengurangi Q3 dan Q1. Kemudian dari nilai IQR dikalikan dengan 1,5 baru ketika menemukan batas bawah dan batas atas. Jadi setiap titik data di luar rentang ini, entah itu di bawah atau di atas akan dianggap sebagai outlier dan harus dihapus untuk analisis lebih lanjut.
Analisis Boxplot Menggunakan nilai batas atas dan bawah berdasarkan nilai Q1 atau Q3 dan IQR lalu nilai yang lebih atau kurang dari batas tersebut dapat dikatakan sebagai outlier. Namun, dalam analisis ini menggunakan hasil perhitungan tersebut untuk divisualisasikan sehingga memudahkan pemangku kepentingan mengetahui data yang mana adalah outlier.
Metode Z-Score Pada metode Z-Score berusaha mengasumsikan data yang berada di ekor distribusi dan relatif jauh dari rata-rata dapat dikatakan sebagai outlier. Kita dapat menghitung nilai Z-Score dari setiap data dengan mengurangi nilai setiap data dengan rata-rata dari kumpulan data lalu dibagi dengan nilai standar deviasi. Kemudian tentukan nilai ambang batas 3 dan tandai titik data yang lebih besar dari ambang batas tersebut sebagai outlier.
Metode DBSCAN Kita dapat menggunakan DBSCAN sebagai cara mendeteksi outlier sebab ketika terdapat data yang tidak tergolong cluster/kelas apapun akan memiliki nilai sendiri alias dapat menghasilkan prediksi biner (outlier atau bukan).
Model Linier Dalam pendekatan ini, data dimodelkan ke dalam subruang berdimensi lebih rendah dengan menggunakan korelasi linier. Kemudian jarak setiap titik data ke bidang yang sesuai dengan sub-ruang dihitung.
Berikut beberapa cara untuk menanggulangi outlier:
Mengidentifikasi Outlier Menggunakan metode visualisasi seperti boxplot atau scatter plot untuk memvisualisasikan data dan melihat apakah ada data yang jauh berbeda dari yang lain.
Transformasi Data Dalam beberapa kasus, transformasi data bisa digunakan untuk mengurangi efek outlier. Misalnya, transformasi logaritmik dapat diterapkan untuk data yang memiliki skewness atau kecondongan tinggi. Transformasi ini bisa mengurangi efek outlier dan membuat data lebih mudah dianalisis.
Menghapus Outlier Dalam beberapa situasi, penghapusan outlier merupakan pilihan paling tepat. Jika outlier merupakan hasil dari kesalahan input atau noise, penghapusan outlier akan meningkatkan akurasi analisis data.
Imputasi Imputasi adalah proses penggantian nilai outlier dengan nilai lain. Nilai pengganti ini bisa berupa mean, median, atau modus dari kumpulan data. Metode imputasi membantu mengurangi pengaruh outlier, namun harus digunakan dengan hati-hati karena bisa mengubah distribusi data.
library(ggplot2)
ggplot(data, aes(x = WklyStudyHours, fill = WklyStudyHours)) +
geom_bar() +
scale_fill_manual(values = c("#FFB7CE", "#B39", "#AEC6CF", "#083"))
labs(title = "Distribusi Jam Belajar per Minggu oleh Student",
x = "Jam Belajar per Minggu",
y = "Jumlah Siswa") +
theme_minimal() +
theme(legend.position = "none")
## NULL
Grafik batang tersebut menggambarkan distribusi jumlah siswa berdasarkan kategori jam belajar per minggu. Dari visualisasi tersebut, terlihat bahwa mayoritas siswa menghabiskan waktu belajar antara 5 sampai 10 jam per minggu, yang ditunjukkan oleh batang berwarna hijau dengan batang tertinggi. Sementara itu, jumlah siswa yang belajar < 5 jam per minggu berada di posisi tengah, lebih sedikit dibandingkan kelompok 5-10 jam, namun masih lebih banyak dibandingkan kelompok yang belajar > 10 jam per minggu.
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
mean_scores <- data %>%
group_by(EthnicGroup) %>%
summarise(
Mean_Math = mean(MathScore, na.rm = TRUE),
Mean_Reading = mean(ReadingScore, na.rm = TRUE),
Mean_Writing = mean(WritingScore, na.rm = TRUE)
)
print(mean_scores)
## # A tibble: 6 Ă— 4
## EthnicGroup Mean_Math Mean_Reading Mean_Writing
## <chr> <dbl> <dbl> <dbl>
## 1 "" 66.2 68.9 67.9
## 2 "group A" 63.0 66.8 65.3
## 3 "group B" 63.5 67.3 65.9
## 4 "group C" 64.7 68.4 67.0
## 5 "group D" 67.7 70.4 70.9
## 6 "group E" 75.3 74.3 72.7
mean_scores_long <- mean_scores %>%
pivot_longer(cols = starts_with("Mean"), names_to = "Jenis_Skor", values_to = "RataRata")
ggplot(mean_scores_long, aes(x = EthnicGroup, y = RataRata, fill = Jenis_Skor)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Rata-rata Nilai per Kelompok Etnis",
x = "Kelompok Etnis", y = "Rata-rata Skor") +
theme_minimal() +
scale_fill_manual(values = c("Mean_Math" = "#AEC6CF", "Mean_Reading" = "#B39", "Mean_Writing" = "#C6A1CF"),
labels = c("Math", "Reading", "Writing"))
Terlihat pada tabel diatas rata-rata Skor Matematika, rata-rata Skor Membaca, dan rata-rata Skor Menulis group A memiliki nilai terkecil diantara group lainnya, dan group E memiliki nilai terbesar diantara group lainnya.
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
score_data <- data[, c("MathScore", "ReadingScore", "WritingScore")]
cor_matrix <- cor(score_data, use = "complete.obs")
cor_melt <- melt(cor_matrix)
ggplot(cor_melt, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
scale_fill_gradient2(low = "#deebf7", high = "#08306b", mid = "white",
midpoint = 0.5, limit = c(0,1), space = "Lab",
name = "Korelasi") +
geom_text(aes(label = round(value, 2)), size = 5) +
labs(title = "Heatmap Korelasi Antara Variabel Skor Math, Reading, dan Writing",
x = "", y = "") +
theme_minimal() +
theme(axis.text = element_text(size = 13))
Dari visualisasi diatas, korelasi antara Writing Score dengan Math Score adalah sebesar 0.81,yang juga menunjukkan hubungan yang cukup erat antara keterampilan matematika dan menulis. Dan hubungan antara Writing Score dengan Reading Score adalah sebesar 0.95, menunjukkan bahwa siswa yang memiliki kemampuan membaca yang baik cenderung juga memiliki kemampuan menulis yang tinggi. Dan yang terakhir hubungan antara Reading Score dengan Math Score adalah sebesar 0.82, yang menunjukkan hubungan positif yang cukup kuat—artinya, siswa dengan keterampilan membaca yang baik cenderung memiliki performa yang lebih baik dalam matematika.