Jawablah pertanyaan-pertanyaan berikut dengan menggunakan bantuan software R.

1. Menampilkan Objek dalam Susunan Class System

a. Buatlah class system S4 dengan nama “Mahasiswa” yang berisi atribut: nama (bertipe karakter), nim (bertipe karakter), dan domisili (bertipe karakter)

Langkah pertama yang dapat dilakukan adalah mengatur class sesuai dengan atribut yang diinginkan. Pengaturan kandungan class “Mahasiswa” dapat dilakukan menggunakan fungsi setClass dengan rangkaian sintaks sebagai berikut,

setClass("Mahasiswa", 
         representation(nama="character", 
                        nim="character", 
                        domisili ="character"))

Pada rangkaian sintaks di atas, argumen “Mahasiswa” ditambahkan untuk memberikan nama class yang disusun. Kemudian, argumen dengan fungsi representation digunakan untuk menambahkan atribut-atribut yang diinginkan beserta dengan tipenya (dalam hal ini, seluruh atribut diharapkan bertipe karakter).

b. Buatlah objek dalam class “Mahasiswa” sebanyak 5 individu

Sebelum menyusun objek-objek yang ingin diinput dalam class “Mahasiswa”, terlebih dahulu perlu dibentuk suatu fungsi yang dapat menampilkan seluruh elemen masukan sesuai dengan atributnya masing-masing. Kali ini, saya akan menamai fungsi yang dimaksud sebagai fungsi mahasiswa dengan rangkaian sintaks sebagai berikut,

mahasiswa <- function(nama, nim, domisili){
  if (length(nama) != length(nim) || length(nama) != length(domisili)
      || length(domisili) != length(nim))
    stop("nama, nim, dan domisili yang diinput harus berjumlah sama")
  new("Mahasiswa", nama = as.vector(nama), nim = as.vector(nim), 
      domisili = as.vector(domisili))
}

Setelah menyusun fungsi untuk mengeluarkan elemen masukan sesuai dengan atribut yang bersesuaian, langkah selanjutnya adalah mnginput objek sebanyak 5 (lima) individu dengan elemen masukan berupa nama, NIM, dan domisili mahasiswa sebagai berikut,

mhs1 <- mahasiswa("A", "U123", "London")
mhs2 <- mahasiswa("B", "U124", "Ipswich")
mhs3 <- mahasiswa("C", "U125", "Liverpool")
mhs4 <- mahasiswa("D", "U126", "Sheffield")
mhs5 <- mahasiswa("E", "U127", "Manchester")

mhs1
## An object of class "Mahasiswa"
## Slot "nama":
## [1] "A"
## 
## Slot "nim":
## [1] "U123"
## 
## Slot "domisili":
## [1] "London"

Objek yang didefinisikan sebagai mhs1 dipanggil sebagai contoh keluaran yang dihasilkan dari fungsi mahasiswa yang sudah dibentuk sebelumnya. Elemen nama, NIM, dan domisili terpanggil dalam tipe vektor sebagaimana yang diatur dalam rangkaian fungsi mahasiswa.

c. Ubahlah method show agar dapat menampilkan objek dengan format

Perubahan tampilan objek pada sebuah class dapat dilakukan dengan memanfaatkan fungsi setMethod. Dalam kasus pengubahan keluaran objek pada class “Mahasiswa”, rangkaian sintaks yang dapat disusun adalah sebagai berikut,

setMethod("show", "Mahasiswa",
          function(object) {
            cat("Nama:",object@nama, "\n")
            cat("NIM:",object@nim, "\n")
            cat("Domisili:", object@domisili, "\n")
          }
)

mhs1
## Nama: A 
## NIM: U123 
## Domisili: London

Pada rangkaian sintaks di atas, argumen function(object) yang dilanjutkan dengan fungsi cat digunakan untuk mengubah tampilan vektor pada keluaran sebelumnya menjadi sesuai dengan yang diinginkan. Argumen object@ digunakan untuk memanggil elemen pada atribut yang bersesuaian, sementara \n digunakan untuk memberi spasi pada baris selanjutnya.

Objek yang didefinisikan sebagai mhs1 dipanggil sebagai contoh keluaran yang dihasilkan dari perubahan method show dalam menampilkan elemen pada class “Mahasiswa” yang sudah disusun sebelumnya. Elemen nama, NIM, dan domisili terpanggil dalam keluaran yang sesuai dengan format yang diinginkan, yaitu format yang sebelumnya telah disusun dalam rangkaian sintaks fungsi setMethod.

2. Visualisasi dan Interpretasi Data dengan ggplot

Dataset yang saya gunakan dalam penugasan kali ini adalah data informasi kelahiran 42 bayi yang dihimpun oleh The University of Sheffield. Pemanggilan data dilakukan dengan fungsi read_excel dan diubah menjadi data frame dengan rangkaian sintaks sebagai berikut,

library(readxl)
data <- read_excel("D:/DATA AKMAL/IPB/Semester 4/Analisis Regresi/Tugas Project Based Learning/birthweight3.xlsx")
data <- as.data.frame(data[,1])
head(data)

Frekuensi dan sebaran berat badan bayi baru lahir dapat diamati dengan membuat visualisasi dalam bentuk histogram. Menggunakan library ggplot2, visualisasi dalam bentuk histogram dapat dihasilkan melalui rangkaian sintaks sebagai berikut,

par(mfrow=c(1,2))

library(ggplot2)
ggplot(data) +
  aes(x = Birthweight) +
  geom_histogram(bins = 11L, fill = "#228B22") +
  labs(
    x = "Birthweight",
    y = "Frequency",
    title = "Histogram of Newborn Birthweight",
    subtitle = "source: The University of Sheffield"
  ) +
  theme_minimal()

ggplot(data) +
  aes(x = "", y = Birthweight) +
  geom_boxplot(fill = "#B22222") +
  labs(
    y = "Birthweight",
    title = "Boxplot of Newborn Birthweight",
    subtitle = "source: The University of Sheffield"
  ) +
  theme_minimal()

Berdasarkan sebaran data pada histogram, dapat diamati bahwa berat badan bayi yang paling banyak tercatat berada dalam kisaran 3-3,5 kg. Sementara itu, berdasarkan tampilan boxplot, dapat diamati bahwa berat badan dalam kisaran 3-3,6 kg mewakili 50% dari seluruh amatan serta tidak ada amatan pencilan. Hal ini mengisyaratkan bahwa sebagian besar bayi baru lahir memiliki berat yang masih optimal sesuai dengan standar WHO, yaitu 2,7-3,8 kg.

ggplot(data) +
  aes(x = Birthweight) +
  geom_density(adjust = 1L, fill = "#4682B4") +
  labs(
    x = "Birthweight",
    y = "Density",
    title = "Density Plot of Newborn Birthweight",
    subtitle = "source: The University of Sheffield"
  ) +
  theme_minimal()

Berdasarkan density plot, dapat diamati bahwa data berat badan bayi baru lahir menyebar menyerupai sebaran Normal sehingga dapat diasumsikan bahwa tidak terdapat kesenjangan yang terlalu tinggi dalam hal berat badan bayi. Asumsi tersebut diambil berdasarkan sifat sebaran Normal, yaitu persentase masing-masing ekor yang sama besar.