1 Latar Belakang

Data ini tentang prestasi siswa dalam pendidikan menengah atas (SMA) sekolah Gabriel Pereira dan Mousinho da Silveira di Portugis. Atribut data yang digunakan adalah nilai siswa, fitur terkait berupa demografis, sosial dan sekolah. Data ini dikumpulkan dengan menggunakan laporan sekolah dan kuesioner. Data yang disediakan mengenai kinerja dalam mata pelajaran Matematika. Data dimodelkan dengan regresi linear berganda dengan tujuan untuk memprediksi nilai siswa di masa yang akan datang.

2 Persiapan Data

Data diambil dari https://www.kaggle.com/dipam7/student-grade-prediction

2.1 Packages

Berikut ini beberapa packages di r yang digunakan :

library(devtools)
#devtools::install_github('EdwinTh/paletti')
library(paletti)
library(GGally)
library(ggplot2)
library(plotly)
library(gridExtra)
library(grid)
library(knitr)
library(kableExtra)
library(cowplot)
library(formattable)
library(e1071) 
library(tidyverse)
library(ggplot2)
library(gridExtra)
library(RColorBrewer)
library(scales)
options(warn=-1)
library(rpart)
library(rpart.plot)
library(party)
library(dplyr)
library(caret)
library(ggcorrplot)
library(ggplot2)

2.2 Import Data

Data ini terdiri dari 395 data dengan 33 variabel

setwd("~/uas")
student<- read.csv('student-mat.csv')
head(student)
##   school sex age address famsize Pstatus Medu Fedu     Mjob     Fjob     reason
## 1     GP   F  18       U     GT3       A    4    4  at_home  teacher     course
## 2     GP   F  17       U     GT3       T    1    1  at_home    other     course
## 3     GP   F  15       U     LE3       T    1    1  at_home    other      other
## 4     GP   F  15       U     GT3       T    4    2   health services       home
## 5     GP   F  16       U     GT3       T    3    3    other    other       home
## 6     GP   M  16       U     LE3       T    4    3 services    other reputation
##   guardian traveltime studytime failures schoolsup famsup paid activities
## 1   mother          2         2        0       yes     no   no         no
## 2   father          1         2        0        no    yes   no         no
## 3   mother          1         2        3       yes     no  yes         no
## 4   mother          1         3        0        no    yes  yes        yes
## 5   father          1         2        0        no    yes  yes         no
## 6   mother          1         2        0        no    yes  yes        yes
##   nursery higher internet romantic famrel freetime goout Dalc Walc health
## 1     yes    yes       no       no      4        3     4    1    1      3
## 2      no    yes      yes       no      5        3     3    1    1      3
## 3     yes    yes      yes       no      4        3     2    2    3      3
## 4     yes    yes      yes      yes      3        2     2    1    1      5
## 5     yes    yes       no       no      4        3     2    1    2      5
## 6     yes    yes      yes       no      5        4     2    1    2      5
##   absences G1 G2 G3
## 1        6  5  6  6
## 2        4  5  5  6
## 3       10  7  8 10
## 4        2 15 14 15
## 5        4  6 10 10
## 6       10 15 15 15
data.frame("total.data" = dim(student)[1],
           "total.variabel" = dim(student)[2])
##   total.data total.variabel
## 1        395             33

2.3 Deskripsi Variabel

Berikut ini deskripsi masing-masing variabel dari dataset ini:

\(sex\) : Jenis kelamin pelajar (binary: female or male)

\(age\) : Umur pelajar (numeric: from 15 to 22)

\(school\) : Sekolah (binary: Gabriel Pereira or Mousinho da Silveira)

\(address\) : Alamat rumah pelajar (binary: urban or rural)

\(Pstatus\) : Tempat tinggal keluarga (binary: living together or apart)

\(Medu\) : Pendidikan Ibu (numeric: from 0 to 4)

\(Mjob\) : Pekerjaan Ibu

\(Fedu\) : Pendidikan Ayah (numeric: from 0 to 4)

\(Fjob\) : Pekerjaan Ayah

\(guardian\) : Wali murid (nominal: mother, father or other)

\(famsize\) : Banyak anggota keluarga (binary: ≤ 3 or > 3)

\(famrel\) : Hubungan siswa dengan keluarga (numeric: from 1 – very bad to 5 – excellent)

\(reason\) : Alasan memilih sekolah (nominal: close to home, school reputation, course preference or other)

\(traveltime\) : Waktu perjalanan ke sekolah (numeric: 1 – < 15 min., 2 – 15 to 30 min., 3 – 30 min. to 1 hour or 4 – > 1 hour)

\(studytime\) : Waktu belajar mingguan (numeric: 1 – < 2 hours, 2 – 2 to 5 hours, 3 – 5 to 10 hours or 4 – > 10 hours)

\(failures\) : Jumlah kegagalan kelas sebelumnya (numeric: n if 1 ≤ n < 3, else 4)

\(schoolsup\) : Dukungan sekolah terhadap extra pendidikan (binary: yes or no)

\(famsup\) : Dukungan keluarga terhadap extra pendidikan (binary: yes or no)

\(activities\) : Aktifitas ekstrakulikuler (binary: yes or no)

\(paidclass\) : Kelas berbayar tambahan (binary: yes or no)

\(internet\) : Akses internet di rumah (binary: yes or no)

\(nursery\) : Bersekolah di sekolah pembibitan (binary: yes or no)

\(higher\) : Ingin mengambil pendidikan tinggi (binary: yes or no)

\(romantic\) : Dengan hubungan yang baik (binary: yes or no)

\(freetime\) : Waktu bebas setelah sekolah (numeric: from 1 – very low to 5 – very high)

\(goout\) : Pergi bermain bersama teman (numeric: from 1 – very low to 5 – very high)

\(Walc\) : Konsumsi alkohol di akhir pekan (numeric: from 1 – very low to 5 – very high)

\(Dalc\) : Konsumsi alkohol di hari kerja (numeric: from 1 – very low to 5 – very high)

\(health\) : Status kesehatan saat ini (numeric: from 1 – very bad to 5 – very good)

\(absences\) : Jumlah absen di sekolah (numeric: from 0 to 93)

\(G1\) : Nilai periode pertama (numeric: from 0 to 20)

\(G2\) : Nilai periode kedua (numeric: from 0 to 20)

\(G3\) : Nilai akhir (numeric: from 0 to 20)

3 Pembersihan Data

3.1 Struktur Data

glimpse(student)
## Rows: 395
## Columns: 33
## $ school     <chr> "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "G...
## $ sex        <chr> "F", "F", "F", "F", "F", "M", "M", "F", "M", "M", "F", "...
## $ age        <int> 18, 17, 15, 15, 16, 16, 16, 17, 15, 15, 15, 15, 15, 15, ...
## $ address    <chr> "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "...
## $ famsize    <chr> "GT3", "GT3", "LE3", "GT3", "GT3", "LE3", "LE3", "GT3", ...
## $ Pstatus    <chr> "A", "T", "T", "T", "T", "T", "T", "A", "A", "T", "T", "...
## $ Medu       <int> 4, 1, 1, 4, 3, 4, 2, 4, 3, 3, 4, 2, 4, 4, 2, 4, 4, 3, 3,...
## $ Fedu       <int> 4, 1, 1, 2, 3, 3, 2, 4, 2, 4, 4, 1, 4, 3, 2, 4, 4, 3, 2,...
## $ Mjob       <chr> "at_home", "at_home", "at_home", "health", "other", "ser...
## $ Fjob       <chr> "teacher", "other", "other", "services", "other", "other...
## $ reason     <chr> "course", "course", "other", "home", "home", "reputation...
## $ guardian   <chr> "mother", "father", "mother", "mother", "father", "mothe...
## $ traveltime <int> 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1,...
## $ studytime  <int> 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 1, 2, 3, 1, 3, 2, 1,...
## $ failures   <int> 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,...
## $ schoolsup  <chr> "yes", "no", "yes", "no", "no", "no", "no", "yes", "no",...
## $ famsup     <chr> "no", "yes", "no", "yes", "yes", "yes", "no", "yes", "ye...
## $ paid       <chr> "no", "no", "yes", "yes", "yes", "yes", "no", "no", "yes...
## $ activities <chr> "no", "no", "no", "yes", "no", "yes", "no", "no", "no", ...
## $ nursery    <chr> "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "...
## $ higher     <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", ...
## $ internet   <chr> "no", "yes", "yes", "yes", "no", "yes", "yes", "no", "ye...
## $ romantic   <chr> "no", "no", "no", "yes", "no", "no", "no", "no", "no", "...
## $ famrel     <int> 4, 5, 4, 3, 4, 5, 4, 4, 4, 5, 3, 5, 4, 5, 4, 4, 3, 5, 5,...
## $ freetime   <int> 3, 3, 3, 2, 3, 4, 4, 1, 2, 5, 3, 2, 3, 4, 5, 4, 2, 3, 5,...
## $ goout      <int> 4, 3, 2, 2, 2, 2, 4, 4, 2, 1, 3, 2, 3, 3, 2, 4, 3, 2, 5,...
## $ Dalc       <int> 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,...
## $ Walc       <int> 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 1, 4,...
## $ health     <int> 3, 3, 3, 5, 5, 5, 3, 1, 1, 5, 2, 4, 5, 3, 3, 2, 2, 4, 5,...
## $ absences   <int> 6, 4, 10, 2, 4, 10, 0, 6, 0, 0, 0, 4, 2, 2, 0, 4, 6, 4, ...
## $ G1         <int> 5, 5, 7, 15, 6, 15, 12, 6, 16, 14, 10, 10, 14, 10, 14, 1...
## $ G2         <int> 6, 5, 8, 14, 10, 15, 12, 5, 18, 15, 8, 12, 14, 10, 16, 1...
## $ G3         <int> 6, 6, 10, 15, 10, 15, 11, 6, 19, 15, 9, 12, 14, 11, 16, ...

3.2 Periksa Data Hilang

colSums(is.na(student))
##     school        sex        age    address    famsize    Pstatus       Medu 
##          0          0          0          0          0          0          0 
##       Fedu       Mjob       Fjob     reason   guardian traveltime  studytime 
##          0          0          0          0          0          0          0 
##   failures  schoolsup     famsup       paid activities    nursery     higher 
##          0          0          0          0          0          0          0 
##   internet   romantic     famrel   freetime      goout       Dalc       Walc 
##          0          0          0          0          0          0          0 
##     health   absences         G1         G2         G3 
##          0          0          0          0          0

Tidak terdapat missing value pada dataset ini.

3.3 Data Duplikat

data.frame("jumlah.seluruh.data"=nrow(student),
           "jumlah.data.unik" = nrow(distinct(student)))
##   jumlah.seluruh.data jumlah.data.unik
## 1                 395              395

Tidak terdapat data duplikat pada dataset ini sehingga proses pengolahan data dapat dilanjutkan.

4 Analisis Korelasi Data

ggcorr(student,label = T, size=2, label_size = 3, hjust=0.95)+
  labs(
    title="Matriks Korelasi Data set"
  )+
  theme_minimal()+
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.title=element_text(size=8,face="bold"), 
    axis.text.y=element_blank())

Berdasarkan matriks korelasi dari data diatas, setiap variabel mempunyai pengaruh terhadap Nilai akhir(G3), variabel yang memiliki korelasi palinng tinggi yaitu Medu (pendidikan ibu),Dalc (konsumsi alkohol di hari kerja), G1 (nilai periode pertama), dan G2 (nilai periode kedua).

5 Visualisasi

5.1 Histogram Umur, Gender, Kesehatan, dan Tempat tinggal siswa

table(student$age)
## 
##  15  16  17  18  19  20  21  22 
##  82 104  98  82  24   3   1   1
var(student$age)
## [1] 1.628285
table(student$sex)
## 
##   F   M 
## 208 187
table(student$health)
## 
##   1   2   3   4   5 
##  47  45  91  66 146
age= ggplot(aes(x=age), data=student)+
  geom_histogram(binwidth = 0.50, fill='darkred', color='black')+
  ggtitle("Age of students")
age

gender= ggplot(data=student,aes(x=sex,fill=sex))+geom_bar()
gender

health= ggplot(data=student,aes(x=health,fill=sex))+geom_histogram(binwidth=0.5, fill='darkgreen')
health

area= ggplot(student, aes(x=address)) +
    geom_bar(fill='orchid')
area

Dari histogram pertama, tampak bahwa sebagian besar siswa berusia antara 15 dan 18, karena sebagian besar siswa mulai Sekolah Menengah Atas (SMA) pada usia 15 dan lulus usia 18, mengingat fakta bahwa umumnya, Sekolah Menengah Atas (SMA) di seluruh dunia hanya 3 tahun terakhir. Namun ada 29 siswa yang berusia lebih dari 18 tahun.

Terlihat dari histogram kedua bahwa ada lebih banyak siswa perempuan (208) daripada siswa laki-laki (187).

Berdasarkan histogram ketiga terlihat bahwa mayoritas siswa dalam kondisi sehat.

seperti yang terlihat pada histogram keempat sebagian besar siswa tinggal di daerah perkotaan (urban).

Apakah kemampuan siswa perempuan lebih baik dari siswa laki-laki? saya akan mengeksplorasi perbedaan jenis kelamin di kelas sehubungan dengan G1 (peringkat periode pertama).

Langkah-langkah yang akan dilakukan antara lain :

  1. periksa jumlah siswa perempuan dan laki-laki di sekolah.

  2. Periksa kinerja di kelas berdasarkan jenis kelamin dan usia dengan menjawab pertanyaan-pertanyaan berikut:

  1. Siapa yang lebih baik di sekolah? Apakah anak perempuan berkinerja lebih baik atau apakah anak laki-laki mendapatkan hasil yang lebih baik daripada anak perempuan?

  2. Apakah kinerja siswa menjadi lebih baik seiring bertambahnya usia?

5.2 Histogram Gender dan Umur

var(student$G1)
## [1] 11.01705
ages= ggplot(data=student,aes(x=age, fill=sex))+geom_histogram(binwidth=0.50)
ages

Seperti yang ditunjukkan dengan jelas pada grafik di atas, sebagian besar siswa yang berumur lebih dari 18 adalah siswa laki-laki dan tidak ada siswa perempuan yang berumur lebih dari 20 tahun.

5.3 G1 Sehubungan Dengan Gender dan Umur

G1=ggplot(data=student,aes(x=age, y=G1, col=sex, shape=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex)
G1
## `geom_smooth()` using formula 'y ~ x'

kinerja anak perempuan menjadi lebih baik seiring bertambahnya usia, namun, penurunan kinerja anak laki-laki dapat dideteksi dalam grafik di atas. Meta-analisis yang diterbitkan oleh American Psychological Association memeriksa perbedaan jenis sekolah di 300 negara dan selama hampir seratus tahun. Dan ternyata anak perempuan telah mendapatkan nilai yang lebih baik daripada anak laki-laki selama beberapa dekade.

Mengapa kinerja siswa laki-laki menurun seiring bertambahnya usia?

Dalam bagian ini, saya akan menentukan berbagai faktor yang mempengaruhi kinerja siswa dengan menjawab pertanyaan-pertanyaan berikut:

  1. Apakah kehadiran penting? Apakah kelas yang kosong berdampak negatif pada kinerja akademik siswa?

  2. Apakah waktu perjalanan berdampak pada kinerja siswa? Apakah siswa yang tinggal di dekat sekolah memiliki hasil yang lebih baik daripada mereka yang tinggal jauh dari sekolah?

5.4 Histogram Kehadiran, Waktu perjalanan

absences= ggplot(data=student,aes(x=absences, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex)
absences
## `geom_smooth()` using formula 'y ~ x'

table(student$traveltime)
## 
##   1   2   3   4 
## 257 107  23   8
travel=ggplot(data=student,aes(x=traveltime, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex)
travel
## `geom_smooth()` using formula 'y ~ x'

Dari grafik di atas, dapat terlihat bagaimana ketidakhadiran mempengaruhi kinerja anak laki-laki secara negatif, namun kelas yang hilang tidak memiliki dampak negatif pada prestasi anak perempuan di kelas.

Seperti yang ditunjukkan di atas, dampak negatif dari waktu perjalanan dapat mempengaruhi kinerja siswa laki-laki, semakin jauh jarak rumah siswa laki-laki dengan sekolah, semakin sedikit hasil yang dia dapatkan.

Dari hasil yang di dapat disimpulkan bahwa waktu perjalanan dan kehadiran merupakan faktor utama yang mempengaruhi nilai siswa laki-laki. Namun, selain waktu perjalanan apa saja faktor lain yang be mempengaruhi kinerja siswa?

fakta yang diketahui bahwa perilaku pengasuhan dan dukungan pendidikan dari orang tua untuk anak-anak dapat menumbuhkan kebiasaan belajar anak-anak dan mempengaruhi kinerja akademik. Maka:

  1. Apakah tingkat pendidikan orang tua dan pekerjaan mempengaruhi prestasi anak di sekolah?

  2. Bagaimana ukuran keluarga berkontribusi pada kinerja akademik siswa?

  3. Apakah ada pengaruh antara keberadaan keluarga dengan kinerja siswa?

  4. Bagaimana hubungan keluarga mempengaruhi kinerja akademik mahasiswa?

  5. Bagaimana konsumsi alkohol di hari kerja mempengaruhi prestasi siswa?

  6. Apakah tingkat pendidikan orang tua dan pekerjaan mempengaruhi prestasi anak di sekolah?

5.5 Histogram Pekerjaan dan Pendidikan Orang tua

Motherjob= ggplot(student, aes(x=Mjob)) +
    geom_bar(fill='brown')
Motherjob

Medu= ggplot(student, aes(x=Medu)) +
    geom_bar(fill='black', color='black')
Medu

Fotherjob= ggplot(student, aes(x=Fjob)) +
    geom_bar(fill='blue')
Fotherjob

Fedu= ggplot(student, aes(x=Fedu)) +
    geom_bar(fill='grey', color="purple")
Fedu

5.6 G1 dan G3 Sehubungan Dengan Pekerjaan Orang Tua

ggplot(data=student,aes(x=Fjob, y=G3))+geom_point()+geom_smooth(method="lm",se=F)
## `geom_smooth()` using formula 'y ~ x'

ggplot(data=student,aes(x=Mjob, y=G3))+geom_point()+geom_smooth(method="lm",se=F)
## `geom_smooth()` using formula 'y ~ x'

my_graph <- ggplot(student, aes(x = Fedu, y = Medu)) +
    geom_point(aes(color = G1)) +
    stat_smooth(method = "lm",
        col = "#C42126",
        se = FALSE,
        size = 1)
my_graph
## `geom_smooth()` using formula 'y ~ x'

Dari grafik di atas, kita tidak dapat melihat perbedaan yang jelas dalam kinerja siswa sesuai dengan pekerjaan orang tua.

Seperti yang diharapkan, semakin tingkat pendidikan orang tua mempengaruhi skor anak di sekolah. siswa yang orang tuanya memiliki tingkat pendidikan yang lebih tinggi menerapkan disiplin dalam belajar, keyakinan kemampuan yang lebih positif, orientasi kerja yang lebih kuat, dan mereka dapat menggunakan strategi pembelajaran yang lebih efektif daripada anak-anak dari orang tua dengan tingkat pendidikan yang lebih rendah.

Selanjutnya bagaimana ukuran keluarga berkontribusi pada kinerja akademik siswa?

table(student$famsize)
## 
## GT3 LE3 
## 281 114
ggplot(student, aes(x=famsize))+
    geom_bar(fill='salmon',color='black')

Seperti yang ditunjukkan di atas, ada lebih banyak siswa dengan jumlah keluarga lebih besar dari 3 dibandingkan dengan siswa dengan jumlah keluarga kurang dari 3.

5.7 GI sehubungan dengan Jumlah Anggota Keluarga

ggplot(data=student,aes(x=famsize, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex)
## `geom_smooth()` using formula 'y ~ x'

ggplot(data=student,aes(x=famsize, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex) -> g1

Menurut banyak artikel, jumlah anggota keluarga berkontribusi pada kegagalan atau keberhasilan seorang siswa di sekolah, dalam arti bahwa ketika keluarga besar, tidak akan ada konsentrasi yang memadai pada anak oleh orang tua mereka berdasarkan kinerja akademik anak. Namun, menurut grafik di atas, ada sedikit peningkatan dalam kinerja anak perempuan.

5.8 Histogram G1 dan Keberadaan keluarga

Apakah ada pengaruh antara keberadaan keluarga dengan kinerja siswa?

table(student$Pstatus)
## 
##   A   T 
##  41 354
ggplot(data=student,aes(x=Pstatus, y=G1, fill=sex))+geom_boxplot()

ggplot(data=student,aes(x=Pstatus, y=G1, fill=sex))+geom_boxplot()-> obj1
obj1+labs(title="G1 with respect to Pstatus", x="G1", fill="sex")

obj1+labs(title="G1 with respect to Pstatus", x="G1", fill="sex")->obj2
obj2+theme(panel.background = element_rect(fill="grey"))-> obj3
obj3+theme(plot.title= element_text(hjust=0.5,face="bold", colour="cadetblue"))

Melihat boxplot di atas, kita dapat menyimpulkan bahwa median Siswa perempuan G1 berada di sekitar 10 dan untuk anak laki-laki sekitar 12-13 dan jelas bagaimana anak laki-laki dan perempuan yang orang tuanya T ( Bersama) skor lebih tinggi daripada rekan-rekan mereka yang tidak bersama orang tua.

5.9 Histogram G1 dengan Hubungan Keluarga

Bagaimana hubungan keluarga mempengaruhi kinerja akademik siswa?

ggplot(data=student,aes(x=famrel, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex)
## `geom_smooth()` using formula 'y ~ x'

ggplot(data=student,aes(x=famrel, y=G1, col=sex))+geom_point()+geom_smooth(method="lm",se=F)+facet_grid(~sex) -> g1

Tidak ada keraguan bahwa siswa yang memiliki komunikasi yang baik dan hubungan yang baik dengan keluarga memiliki kinerja yang lebih baik di sekolah, dan bahwa apa yang dijelaskan grafik di atas, prestasi siswa meningkat dengan hubungan keluarga yang baik.

5.10 Histogram G1 dengan tingkat Konsumsi alkohol di hari kerja

Bagaimana konsumsi alkohol di hari kerja mempengaruhi prestasi siswa?

my_graph <- ggplot(student, aes(x = Dalc, y = G1)) +
    geom_point(aes(color = sex)) +
    stat_smooth(method = "lm",
        col = "#C42126",
        se = FALSE,
        size = 1)
my_graph
## `geom_smooth()` using formula 'y ~ x'

Dari grafik di atas, kinerja Siswa menurun dengan bertambahnya konsumsi alkohol. Penyalahgunaan alkohol menyebabkan sering kebingungan dan gangguan memori. Konsumsi alkohol yang berlebihan menyebabkan ketidakmampuan untuk mengingat dengan baik. Dan siswa yang menyalahgunakan alkohol juga cenderung kehilangan konsentrasi di kelas.

5.11 Scatterplot Goout, Dalc dan G3

#Scatterplot G1 and G3
my_graph +
    theme_dark() +
    labs(
        x = "Dalc",
        y = "goout",
        color = "G3",
        title = "G3 with respect to goout and Dalc",
        subtitle = " goout and Dalc",
        caption = "Dalc and goout")
## `geom_smooth()` using formula 'y ~ x'

Dari scatterplot di atas, kita dapat melihat G3 (nilai akhir) menurun dengan Goout(Pergi bermain bersama teman) dan (Dalc) Konsumsi alkohol harian.

6 Prediksi Nilai Akhir siswa (G3)

selanjutnya akan memprediksi Nilai akhir (G3) menggunakan regresi. Ini akan melalui 4 langkah:

  1. Partisi Data

  2. Membentuk Model Regresi

  3. Memprediksi data pengujian

  4. Mengevaluasi model

6.1 Pemisahan Data

Kami memulai dengan membagi data kami menjadi data training dan test.

set.seed(1234)
partition = createDataPartition(student[,'G3'], times=1, p=0.70, list=FALSE)
training=student[partition,]
head(training,10)
##    school sex age address famsize Pstatus Medu Fedu     Mjob     Fjob
## 2      GP   F  17       U     GT3       T    1    1  at_home    other
## 5      GP   F  16       U     GT3       T    3    3    other    other
## 6      GP   M  16       U     LE3       T    4    3 services    other
## 7      GP   M  16       U     LE3       T    2    2    other    other
## 8      GP   F  17       U     GT3       A    4    4    other  teacher
## 11     GP   F  15       U     GT3       T    4    4  teacher   health
## 12     GP   F  15       U     GT3       T    2    1 services    other
## 15     GP   M  15       U     GT3       A    2    2    other    other
## 16     GP   F  16       U     GT3       T    4    4   health    other
## 17     GP   F  16       U     GT3       T    4    4 services services
##        reason guardian traveltime studytime failures schoolsup famsup paid
## 2      course   father          1         2        0        no    yes   no
## 5        home   father          1         2        0        no    yes  yes
## 6  reputation   mother          1         2        0        no    yes  yes
## 7        home   mother          1         2        0        no     no   no
## 8        home   mother          2         2        0       yes    yes   no
## 11 reputation   mother          1         2        0        no    yes  yes
## 12 reputation   father          3         3        0        no    yes   no
## 15       home    other          1         3        0        no    yes   no
## 16       home   mother          1         1        0        no    yes   no
## 17 reputation   mother          1         3        0        no    yes  yes
##    activities nursery higher internet romantic famrel freetime goout Dalc Walc
## 2          no      no    yes      yes       no      5        3     3    1    1
## 5          no     yes    yes       no       no      4        3     2    1    2
## 6         yes     yes    yes      yes       no      5        4     2    1    2
## 7          no     yes    yes      yes       no      4        4     4    1    1
## 8          no     yes    yes       no       no      4        1     4    1    1
## 11         no     yes    yes      yes       no      3        3     3    1    2
## 12        yes     yes    yes      yes       no      5        2     2    1    1
## 15         no     yes    yes      yes      yes      4        5     2    1    1
## 16         no     yes    yes      yes       no      4        4     4    1    2
## 17        yes     yes    yes      yes       no      3        2     3    1    2
##    health absences G1 G2 G3
## 2       3        4  5  5  6
## 5       5        4  6 10 10
## 6       5       10 15 15 15
## 7       3        0 12 12 11
## 8       1        6  6  5  6
## 11      2        0 10  8  9
## 12      4        4 10 12 12
## 15      3        0 14 16 16
## 16      2        4 14 14 14
## 17      2        6 13 14 14
dim(training)
## [1] 279  33
test= student[-partition,]
dim(test)
## [1] 116  33

Saya memiliki 279 data training dan 116 untuk data test.

6.2 Membentuk Model Regresi Berganda

Saya membentuk model regresi menggunakan data training dengan target untuk memprediksi variabel G3 (nilai akhir) menggunakan variabel independen yang berkorelasi dengan variabel G3.

lin_mod=lm(G3~G1+G2+age+sex+school+famsize+address+Pstatus+Medu+Fedu+traveltime+studytime+famrel+freetime+goout+Dalc+Walc+health+absences ,data=training)
summary(lin_mod)
## 
## Call:
## lm(formula = G3 ~ G1 + G2 + age + sex + school + famsize + address + 
##     Pstatus + Medu + Fedu + traveltime + studytime + famrel + 
##     freetime + goout + Dalc + Walc + health + absences, data = training)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.8652 -0.4058  0.2475  0.9779  3.0232 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.89160    1.96387   0.454   0.6502    
## G1           0.12223    0.06662   1.835   0.0677 .  
## G2           0.98334    0.06019  16.338   <2e-16 ***
## age         -0.21340    0.10214  -2.089   0.0377 *  
## sexM         0.08149    0.25221   0.323   0.7469    
## schoolMS     0.53430    0.39081   1.367   0.1728    
## famsizeLE3  -0.17682    0.25812  -0.685   0.4939    
## addressU     0.24214    0.29246   0.828   0.4085    
## PstatusT    -0.55765    0.40799  -1.367   0.1729    
## Medu         0.17905    0.13576   1.319   0.1884    
## Fedu        -0.13064    0.13541  -0.965   0.3355    
## traveltime   0.12612    0.17294   0.729   0.4665    
## studytime   -0.10045    0.14555  -0.690   0.4907    
## famrel       0.21991    0.13209   1.665   0.0972 .  
## freetime    -0.03474    0.12376  -0.281   0.7792    
## goout       -0.04547    0.11840  -0.384   0.7013    
## Dalc        -0.16633    0.16621  -1.001   0.3179    
## Walc         0.14975    0.12702   1.179   0.2395    
## health       0.13426    0.08163   1.645   0.1013    
## absences     0.03656    0.01684   2.170   0.0309 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.859 on 259 degrees of freedom
## Multiple R-squared:  0.8338, Adjusted R-squared:  0.8216 
## F-statistic: 68.37 on 19 and 259 DF,  p-value: < 2.2e-16

Model yang dibuat menggunakan multiple predictor sehingga nilai yang baik diinterpretasikan adalah nilai Adjusted R-squared. Dari hasi diatas, model ini memiliki nilai Adjusted R-squared : 0.833 atau 83,3% yang artinya hubungan antara variabel independen dan variabel dependen sangat kuat.

6.3 Evaluasi Model Regresi Berganda

6.3.1 Linearitas

linearity <- data.frame(residual = lin_mod$residuals, fitted = training$G3)
linearity %>% 
  ggplot(aes(fitted, residual)) + 
  geom_point() + 
  geom_smooth(method = lm) + 
  geom_hline(aes(yintercept = 0)) + 
     theme_minimal()+
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.title=element_text(size=9,face="bold"), 
    axis.text.y=element_text(margin = margin(l=5)),
    axis.text.x.bottom = element_text(margin = margin(b=5)))
## `geom_smooth()` using formula 'y ~ x'

Berdasarkan pengujian Linearity terlihat bahwa model yang dibuat berhasil menangkap variansi data dengan baik, terlihat error atau jarak data dari mean tidak terlalu jauh.

6.3.2 Normalitas Residual

hist(lin_mod$residuals)

Hipotesis : H0 = Residual berdistribusi normal H1 = Residual tidak berdistribusi normal Kesimpulan : karena nilai p-value : 0,001308 < 0,05 maka keputusannya adalah terima H1 dengan kesimpulann residual dari model tidak berdistribusi normal.

6.3.3 Heteroskedastisitas

lmtest::bptest(lin_mod)
## 
##  studentized Breusch-Pagan test
## 
## data:  lin_mod
## BP = 42.971, df = 19, p-value = 0.001308
linearity <- data.frame(residual = lin_mod$residuals, fitted = training$G3)
linearity %>% 
  ggplot(aes(fitted, residual)) + 
  geom_point() + 
  geom_smooth(method = "h") + 
  geom_hline(aes(yintercept = 0)) + 
     theme_minimal()+
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.title=element_text(size=9,face="bold"), 
    axis.text.y=element_text(margin = margin(l=5)),
    axis.text.x.bottom = element_text(margin = margin(b=5)))
## `geom_smooth()` using formula 'y ~ x'

Hipotesis : H0 = Data Residual Homogen (tidak membentuk sebuah pola) H1 = Data Residual Heteros (membentuk sebuah pola) Kesimpulan : Karena nilai p-value: 0.001308 < 0.05 maka keputusannya adalah terima H1, dengan kesimpulan residual dari model bersifat heteros, dapat dilihat membentuk sebuah pola.

6.4 Memprediksi nilai data test

selanjutnya, saya memprediksi data test dengan model linear dari data training.

pred_test <- predict(lin_mod, test)
dt_prediction = (data.frame((pred_test), (test$G3)))
colnames(dt_prediction) <- c("Predicted G3","Real G3")
head(dt_prediction,10)
##    Predicted G3 Real G3
## 1      5.247709       6
## 3      7.463612      10
## 4     14.482094      15
## 9     18.531185      19
## 10    15.392759      15
## 13    14.643349      14
## 14    10.321083      11
## 23    15.717813      16
## 24    13.303226      12
## 37    16.413416      18

7 Kesimpulan

Analisa ini dapat digunakan untuk Membandingkan nilai G3 yang diprediksi dengan nilai G3 nyata, sehingga dapat dilihat seberapa dekat prediksi dengan persentase kesalahan yang sangat kecil.