1. Visualisasi, Interpretasi/Penjelasan

datasiswa = read.csv("C:/Users/mhdha/Downloads/StudentPerformanceFactors.csv")
head(datasiswa)
##   Hours_Studied Attendance Parental_Involvement Access_to_Resources
## 1            23         84                  Low                High
## 2            19         64                  Low              Medium
## 3            24         98               Medium              Medium
## 4            29         89                  Low              Medium
## 5            19         92               Medium              Medium
## 6            19         88               Medium              Medium
##   Extracurricular_Activities Sleep_Hours Previous_Scores Motivation_Level
## 1                         No           7              73              Low
## 2                         No           8              59              Low
## 3                        Yes           7              91           Medium
## 4                        Yes           8              98           Medium
## 5                        Yes           6              65           Medium
## 6                        Yes           8              89           Medium
##   Internet_Access Tutoring_Sessions Family_Income Teacher_Quality School_Type
## 1             Yes                 0           Low          Medium      Public
## 2             Yes                 2        Medium          Medium      Public
## 3             Yes                 2        Medium          Medium      Public
## 4             Yes                 1        Medium          Medium      Public
## 5             Yes                 3        Medium            High      Public
## 6             Yes                 3        Medium          Medium      Public
##   Peer_Influence Physical_Activity Learning_Disabilities
## 1       Positive                 3                    No
## 2       Negative                 4                    No
## 3        Neutral                 4                    No
## 4       Negative                 4                    No
## 5        Neutral                 4                    No
## 6       Positive                 3                    No
##   Parental_Education_Level Distance_from_Home Gender Exam_Score
## 1              High School               Near   Male         67
## 2                  College           Moderate Female         61
## 3             Postgraduate               Near   Male         74
## 4              High School           Moderate   Male         71
## 5                  College               Near Female         70
## 6             Postgraduate               Near   Male         71

Lama Belajar VS Hasil Ujian

library(ggplot2)
ggplot(datasiswa, aes(x = Hours_Studied, y = Exam_Score)) +
geom_point()

Pada visualisasi pertama, dapat kita liat bagaimana sebaran dari nilai ujian yang diperoleh oleh mahasiswa berdasarkan lamanya belajar mahasiswa. Dapat kita lihat, semakin lama mahasiswa belajar, semakin tinggi juga nilai yang diperoleh oleh mahasiswa

Lama Belajar VS Hasil Ujian Berdasarkan Jenis Kelamin

ggplot(datasiswa, aes(x = Hours_Studied, y = Exam_Score, color = factor(Gender))) +
  geom_point()

Pada visualisasi kedua, tidak jauh berbeda dengan yang visualisasi pertama tetapi pada visualisasi kedua kita mengelompokkannya berdasarkan jenis kelamin. Dapat kita lihat jenis kelamin laki-laki lebih banyak yang memiliki scor yang lebih tinggi pada rentang waktu belajar 20-30 jam. Sedangkan perempuan lebih banyak memiliki scor yang lebih tinggi pada rentang waktu belajar 16-20 jam.

Hasil Ujian VS Kehadiran berdasarkan Kualitas Pengajar

ggplot(data = datasiswa, aes(x = Attendance, y = Exam_Score, col = Teacher_Quality)) +
  geom_point()

Pada visualisasi ketiga, kita dapat melihat bagaimana kehadiran dan kualitas pengajar dapat memengaruhi nilai score dari mahasiswa. Semakin sering seorang mahasiswa hadir nilai yang dia peroleh juga semakin bagus. Dan juga semakin bagus pengajar yang dimiliki, kehadiran mahasiswa juga semakin sering yang dapat menyebabkan nilai mahasiswa juga meningkat.

Exam_Score VS Hours_Studied Dikelompokkan berdasarkan Motivasi Siswa

p <- ggplot(data = datasiswa, aes(x = Hours_Studied, y = Exam_Score, shape = factor(Motivation_Level))) + geom_point()

p + facet_grid(. ~ Motivation_Level) +
  labs(title = "Exam_Score VS Hours_Studied",
       x = "Hours_Studied",
       y = "Exam_Score")

Pada Visualisasi Keempat, kita dapat melihat bagaimana sebaran nilai ujian dan berapa lama mereka belajar dan dikelompokkan berdasarkan motivasi. Disini dapat dilihat bahwa, motivasi tidak terlalu berpengaruh terhadap nilai ujian mereka, karena dari ketiga motivasi, sebaran motivasi mereka sama tidak jauh berbeda satu sama lain.

Exam_Score

ggplot(data = datasiswa, aes(x = Exam_Score)) +
  geom_histogram(binwidth = 5) 

Pada visualisasi kelima, kita dapat melihat sebaran nilai ujian siswa. Seberan nilai mahasiswa berada di antara 52,5-102,5. Nilai kebanyakan yang diperoleh siswa berada di rentang 62,5-67,5. tetapi ada juga data pencilan, yaitu nilainya yang sampai 100.

2. Class System S4

a. “Mahasiswa” berisi atribut (Nama, NIM, Domisili)

setClass("Mahasiswa",
        representation(
           Nama = "character",
           NIM = "character",
           Domisili = "character"
         ))

b. Objek dalam class “Mahasiswa” sebanyak 5 Individu

Mahasiswa1 = new("Mahasiswa", Nama="Mhd Haekal Hakim", NIM="G1401231012", Domisili="Pariaman")
Mahasiswa2 = new("Mahasiswa", Nama="Rafi Adabhi Sunarya", NIM="G1401231106", Domisili="Subang")
Mahasiswa3 = new("Mahasiswa", Nama="Muhammad Fauzan Nur Rasendriya", NIM="G1401231108", Domisili="Klaten")
Mahasiswa4 = new("Mahasiswa", Nama="M. Taqy Abiyu Dzakwan", NIM="G1401231043", Domisili="Lampung")
Mahasiswa5 = new("Mahasiswa", Nama="Fahmi Maulana Ardiansyah", NIM="G1401231040", Domisili="Kediri")

Mahasiswa1
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Mhd Haekal Hakim"
## 
## Slot "NIM":
## [1] "G1401231012"
## 
## Slot "Domisili":
## [1] "Pariaman"
Mahasiswa2
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Rafi Adabhi Sunarya"
## 
## Slot "NIM":
## [1] "G1401231106"
## 
## Slot "Domisili":
## [1] "Subang"
Mahasiswa3
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Muhammad Fauzan Nur Rasendriya"
## 
## Slot "NIM":
## [1] "G1401231108"
## 
## Slot "Domisili":
## [1] "Klaten"
Mahasiswa4
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "M. Taqy Abiyu Dzakwan"
## 
## Slot "NIM":
## [1] "G1401231043"
## 
## Slot "Domisili":
## [1] "Lampung"
Mahasiswa5
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Fahmi Maulana Ardiansyah"
## 
## Slot "NIM":
## [1] "G1401231040"
## 
## Slot "Domisili":
## [1] "Kediri"

c. Objek dengan fungsi konstruktor

Mahasiswa <- function(Nama, NIM, Domisili) {
   # Validasi sederhana
  if (NIM < "G1401231001") {
    warning("Bukan Mahasiswa Statistika")
  }
  # Buat objek S4
  new("Mahasiswa",
      Nama = as.character(Nama),
      NIM = as.character(NIM),
      Domisili = as.character(Domisili))
}

# Cara penggunaan
mhs1 <- Mahasiswa("Mhd Haekal Hakim", "G1401231012", "Pariaman")
mhs1
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Mhd Haekal Hakim"
## 
## Slot "NIM":
## [1] "G1401231012"
## 
## Slot "Domisili":
## [1] "Pariaman"
mhs2 <- Mahasiswa("Rafi Adabhi Sunarya", "G1401231106", "Subang")
mhs2
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Rafi Adabhi Sunarya"
## 
## Slot "NIM":
## [1] "G1401231106"
## 
## Slot "Domisili":
## [1] "Subang"
mhs3 <- Mahasiswa("Muhammad Fauzan Nur Rasendriya", "G1401231108", "Klaten")
mhs3
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Muhammad Fauzan Nur Rasendriya"
## 
## Slot "NIM":
## [1] "G1401231108"
## 
## Slot "Domisili":
## [1] "Klaten"
mhs4 <- Mahasiswa("M. Taqy Abiyu Dzakwan", "G1401231043", "Lampung")
mhs4
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "M. Taqy Abiyu Dzakwan"
## 
## Slot "NIM":
## [1] "G1401231043"
## 
## Slot "Domisili":
## [1] "Lampung"
mhs5 <- Mahasiswa("Fahmi Maulana Ardiansyah", "G1401231040", "Kediri")
mhs5
## An object of class "Mahasiswa"
## Slot "Nama":
## [1] "Fahmi Maulana Ardiansyah"
## 
## Slot "NIM":
## [1] "G1401231040"
## 
## Slot "Domisili":
## [1] "Kediri"

d. Ubahlah method show agar dapat menampilkan objek

setClass("Mahasiswa",
        representation(
           Nama = "character",
           NIM = "character",
           Domisili = "character"
         ))

Mahasiswa <- function(Nama, NIM, Domisili) {
  new("Mahasiswa", Nama = Nama, NIM = NIM, Domisili = Domisili)
}

Nama1 <- function(object) object@Nama
NIM1 <- function(object) object@NIM
Domisili1 <- function(object) object@Domisili

Mahasiswa1 = new("Mahasiswa", Nama="Mhd Haekal Hakim", NIM="G1401231012", Domisili="Pariaman")
Mahasiswa2 = new("Mahasiswa", Nama="Rafi Adabhi Sunarya", NIM="G1401231106", Domisili="Subang")
Mahasiswa3 = new("Mahasiswa", Nama="Muhammad Fauzan Nur Rasendriya", NIM="G1401231108", Domisili="Klaten")
Mahasiswa4 = new("Mahasiswa", Nama="M. Taqy Abiyu Dzakwan", NIM="G1401231043", Domisili="Lampung")
Mahasiswa5 = new("Mahasiswa", Nama="Fahmi Maulana Ardiansyah", NIM="G1401231040", Domisili="Kediri")


## Ubah Ke Method Show
setMethod("show", "Mahasiswa", function(object) {
  cat("Nama     : ", Nama1(object), "\n",
      "NIM      : ", NIM1(object), "\n",
      "Domisili : ", Domisili1(object), "\n", sep = "")
})

Mahasiswa1
## Nama     : Mhd Haekal Hakim
## NIM      : G1401231012
## Domisili : Pariaman

3. Buatlah program R untuk mencari nilai minimum dari suatu fungsi

\(f\)(\(x_1\),\(x_2\),\(x_3\)) = \(10\)(\(x_1\)+\(x_2\))\(^2\) + (\(2x_1\) + \(x_3\)\(^2\)) + (\(1\) + \(x_2\))\(^2\)

f <- function(x) {
  10 * (x[1] + x[2])^2 + (2 * x[1] + x[3])^2 + (1 + x[2])^2
}

hasil <- optim(par = c(0, 0, 0), fn = f)

round(hasil$par)
## [1]  1 -1 -2
round(hasil$value)
## [1] 0

4. Buatlah Class System S3 dengan nama “Optimasi” yang berisi atribut “nama_metode” dan “fungsi”. Kemudian buatlah metod “execute.Optimasi” sebagai method yang digunakan untuk mengeksekusi suatu persamaan ke dalam fungsi optimasi tersebut.

Optimasi <- function(nama_metode, fungsi) {
  obj <- list(
    nama_metode = nama_metode,
    fungsi = fungsi
  )
  class(obj) <- "Optimasi"
  return(obj)
}

execute.Optimasi <- function(object, ...) {
  if (!inherits(object, "Optimasi")) stop("Object bukan bertipe Optimasi")
  
  cat("Metode yang digunakan:", object$nama_metode, "\n")
  
  if (object$nama_metode == "optim") {
    hasil <- optim(par = c(0, 0, 0), fn = object$fungsi)
    return(hasil)
    
  } else if (object$nama_metode == "golden") {
    if (!requireNamespace("pracma", quietly = TRUE)) {
      stop("Package 'pracma' diperlukan untuk metode golden.")
    }
    return(pracma::golden(object$fungsi, a = -10, b = 10))
    
  } else {
    stop("Metode tidak dikenali.")
  }
}
# Contoh Penggunaan
f <- function(x) {
  10 * (x[1] + x[2])^2 + (2 * x[1] + x[3])^2 + (1 + x[2])^2
}

obj1 <- Optimasi("optim", f)
hasil1 <- execute.Optimasi(obj1)
## Metode yang digunakan: optim
round(hasil1$par)
## [1]  1 -1 -2
round(hasil1$value)
## [1] 0