Package mvtnorm & ggplot2
Pada Gambar 2.3, terdapat plot titik data yang perlu dibuat dengan menggunakan vektor eigen dari matriks sigma, yaitu standar deviasi untuk distribusi normal bivariat. Vektor eigen ini akan digunakan untuk analisis komponen utama, salah satu metode populer tanpa pengawasan dalam ilmu data. Namun, untuk aplikasi praktis, penjelasan tentang vektor eigen dan nilai eigen akan dibahas di bab selanjutnya. Untuk membuat titik data pada contoh ini, kita menggunakan distribusi normal bivariat dengan menggunakan paket mvtnorm di R. Selain itu, kita juga menggunakan paket matlib untuk operasi matriks.
library(mvtnorm)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.2
library(matlib)
## Warning: package 'matlib' was built under R version 4.2.2
## Standard deviation
sigma <- matrix(c(4,2,2,3), ncol = 2, nrow = 2)
## Mean
mu <- c(1, 2)
Kita memiliki ukuran sampel data n = 700
n <- 700
Fungsi set.seed() menyetel seed, yang merupakan nilai untuk mulai membangun angka acak Fungsi set.seed() mengatur ulang nilai acak Angka acak dan fungsi dari nilai yang diperoleh sebelumnya. Kami mengatur benih untuk mengulangi hasil yang sama. Jika kita memberikan benih yang sama, maka kita dapat mengulangi nomor acak yang sama:
set.seed(123)
Kodingan R dibawah digunakan untuk menghasilkan data frame ‘d’ dengan ‘n’ baris yang masing-masing berisi nilai dari distribusi normal multivariat. Fungsi ‘rmvnorm’ dari paket ‘mvtnorm’ digunakan untuk menghasilkan nilai acak dari distribusi normal multivariat dengan rata-rata ‘mu’ dan matriks kovarians ‘sigma’. Nilai ‘n’ adalah jumlah pengamatan yang diinginkan. Kemudian, nilai-nilai tersebut disimpan dalam data frame ‘d’.
x <- rmvnorm(n = n, mean = mu, sigma = sigma)
d <- data.frame(x)
“p2 <- ggplot(d, aes(x = X1, y = X2))” membuat objek plot baru dengan nama p2 yang menggunakan data frame d sebagai sumber datanya. Atribut aes() digunakan untuk menentukan variabel yang akan diplot di sumbu x dan sumbu y, yaitu variabel X1 dan X2.”geom_point(alpha = .5)” menambahkan layer plot berupa titik-titik data pada plot yang sudah dibuat. Atribut alpha digunakan untuk menentukan transparansi titik-titik data yang diplot. “geom_density_2d()” menambahkan layer plot berupa kernel density estimate 2 dimensi pada plot yang sudah dibuat.
p2 <- ggplot(d, aes(x = X1, y = X2)) +
geom_point(alpha = .5) +
geom_density_2d()
p2
Untuk menciptakan plot yang ditunjukkan pada Gambar 2.2. Pertama kita terjemahkan semua titik data yang disimpan sebagai variabel x dengan -mu = [−1, −2] karena pusat distribusi berada di mu = [1, 2].
y <- x - mu
Kita menyimpan poin data baru ini sebagai variabel y. Kemudian kita menghitung vektor eigen sigma.
“eigen()” adalah fungsi yang digunakan untuk menghitung vektor eigen dan nilai eigen dari sebuah matriks. Pada contoh kode yang Anda berikan, sigma adalah matriks 2x2 yang merepresentasikan matriks kovariansi dari distribusi normal bivariat. Hasil pemanggilan fungsi “eigen(sigma)” akan menghasilkan dua keluaran yaitu E\(values dan E\)vectors. E\(values adalah array numerik yang berisi nilai eigen dari sigma, sedangkan E\)vectors adalah matriks yang berisi vektor eigen dari sigma. Dalam konteks penerapan PCA (Principal Component Analysis), vektor eigen dari matriks kovariansi digunakan sebagai sumbu baru untuk mentransformasi data asli menjadi ruang fitur baru yang disebut komponen utama.
E <- eigen(sigma)
E$vectors
## [,1] [,2]
## [1,] -0.7882054 0.6154122
## [2,] -0.6154122 -0.7882054
Vektor eigen dari matriks sigma disimpan dalam E$vectors dalam bentuk matriks, dimana setiap vektor kolom adalah sebuah vektor eigen. Kemudian kita mengalikan matriks data yang tersimpan sebagai matriks 10.000 × 2 dengan matriks 2 × 2, yaitu transpos invers dari matriks E. Invers dari sebuah matriks akan dibahas pada bagian selanjutnya. Hal ini dilakukan untuk mentransformasikan data ke titik-titik baru yang dapat diplot pada grafik.
y <- y %*% t(inv(E$vectors))
Kita atur “data frame” dengan menggunakan “data.frame”
dd <- data.frame(y)
p3 <- ggplot(dd, aes(x = X1, y = X2)) +
geom_point(alpha = .5) +
geom_density_2d()
p3
Source : file: > Yoshida.Ruriko.2021.Linear Algebra and Its Applications With R.London. CRC Press.