Secara formal, matriks didefinisikan sebagai susunan bilangan, simbol, atau ekspresi dalam bentuk persegi panjang yang terdiri dari baris dan kolom (Anton & Rorres, 2014). Setiap item dalam matriks disebut sebagai entri atau elemen. Dimensi atau ukuran sebuah matriks, yang dikenal sebagai ordo, dinyatakan dalam format \(m \times n\), di mana \(m\) adalah jumlah baris dan \(n\) adalah jumlah kolom.
Contoh matriks \(\boldsymbol{A}\) dengan ordo \(2\times3\): \[ \boldsymbol{A} = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{bmatrix} \] Di dunia nyata, matriks merupakan struktur data fundamental dalam berbagai bidang seperti grafika komputer (untuk transformasi objek), ekonomi (dalam model input-output), dan yang paling relevan untuk kita, sebagai representasi data dalam statistika dan machine learning.
Untuk demonstrasi, kita akan membuat dua matriks 3x3 dari dataset
data_akademik yang telah disiapkan.
# Mengambil 9 data pertama dari 3 kolom pertama
X = matrix(as.matrix(data_akademik[1:3, 1:3]), nrow = 3, ncol = 3)
print("Matriks X (disusun per kolom):")
## [1] "Matriks X (disusun per kolom):"
X
## [,1] [,2] [,3]
## [1,] 71.74 66.72 69.65
## [2,] 80.52 81.74 77.53
## [3,] 68.25 77.05 85.20
Secara default, R mengisi matriks berdasarkan kolom
(column-wise). Jika kita ingin mengisinya berdasarkan baris
(row-wise), kita perlu menambahkan argumen
byrow = TRUE.
# Mengambil data baris 4-6 dari 3 kolom pertama
Y = matrix(as.matrix(data_akademik[4:6, 1:3]), nrow = 3, ncol = 3, byrow = TRUE)
print("Matriks Y (disusun per baris):")
## [1] "Matriks Y (disusun per baris):"
Y
## [,1] [,2] [,3]
## [1,] 77.14 78.11 86.74
## [2,] 81.74 81.99 85.16
## [3,] 67.43 86.74 70.54
Operasi aritmetika pada matriks memiliki aturan spesifik yang membedakannya dari aljabar skalar.
Operasi ini dilakukan secara element-wise (antar elemen yang bersesuaian). Syarat utamanya adalah kedua matriks harus memiliki ordo yang identik. \[ (\boldsymbol{A+B})_{ij} = a_{ij} + b_{ij} \]
# Penjumlahan Matriks
X + Y
## [,1] [,2] [,3]
## [1,] 148.88 144.83 156.39
## [2,] 162.26 163.73 162.69
## [3,] 135.68 163.79 155.74
# Pengurangan Matriks
X - Y
## [,1] [,2] [,3]
## [1,] -5.40 -11.39 -17.09
## [2,] -1.22 -0.25 -7.63
## [3,] 0.82 -9.69 14.66
Perkalian matriks bukan operasi element-wise. Aturan perkalian matriks \(\boldsymbol{C} = \boldsymbol{A}\boldsymbol{B}\) adalah elemen \(c_{ij}\) (baris ke-i, kolom ke-j) dari matriks hasil merupakan dot product dari vektor baris ke-i dari \(\boldsymbol{A}\) dan vektor kolom ke-j dari \(\boldsymbol{B}\). \[ c_{ij} = \sum_{k=1}^{p} a_{ik}b_{kj} \] Syaratnya, jumlah kolom matriks pertama (\(\boldsymbol{A}_{m \times p}\)) harus sama dengan jumlah baris matriks kedua (\(\boldsymbol{B}_{p \times n}\)). Matriks hasilnya akan berordo \(m \times n\).
# Perkalian matriks di R menggunakan operator %*%
X %*% Y
## [,1] [,2] [,3]
## [1,] 15684.22 17115.43 16817.71
## [2,] 18120.59 19716.23 19414.25
## [3,] 17307.91 19038.58 18491.59
* standar.# Perkalian dengan skalar 0.5
0.5 * X
## [,1] [,2] [,3]
## [1,] 35.870 33.360 34.825
## [2,] 40.260 40.870 38.765
## [3,] 34.125 38.525 42.600
# Perkalian Hadamard
X * Y
## [,1] [,2] [,3]
## [1,] 5534.024 5211.499 6041.441
## [2,] 6581.705 6701.863 6602.455
## [3,] 4602.098 6683.317 6010.008
Transpos dari matriks \(\boldsymbol{A}\), dinotasikan sebagai \(\boldsymbol{A}^T\) atau \(\boldsymbol{A}'\), adalah operasi “membalik” matriks di sepanjang diagonalnya. Baris menjadi kolom, dan kolom menjadi baris. Jika \(\boldsymbol{A}\) berordo \(m \times n\), maka \(\boldsymbol{A}^T\) berordo \(n \times m\).
t(X)
## [,1] [,2] [,3]
## [1,] 71.74 80.52 68.25
## [2,] 66.72 81.74 77.05
## [3,] 69.65 77.53 85.20
Determinan adalah sebuah nilai skalar khusus yang hanya dapat dihitung dari matriks persegi. Secara geometris, nilai absolut dari determinan merepresentasikan faktor penskalaan volume (atau area untuk matriks 2x2) dari suatu transformasi linear (Strang, 2016). Jika determinan sebuah matriks adalah nol, artinya transformasi tersebut “meratakan” ruang ke dimensi yang lebih rendah, dan matriks tersebut disebut singular. \[\det(\boldsymbol{A}) \text{ atau } |\boldsymbol{A}|\]
det(X)
## [1] 9940.019
det(Y)
## [1] 9933.545
Karena determinan kedua matriks tidak nol, keduanya memiliki invers.
Invers dari matriks persegi \(\boldsymbol{A}\), dinotasikan \(\boldsymbol{A}^{-1}\), adalah matriks yang jika dikalikan dengan \(\boldsymbol{A}\) akan menghasilkan matriks identitas \(\boldsymbol{I}\). \[\boldsymbol{A}\boldsymbol{A}^{-1} = \boldsymbol{A}^{-1}\boldsymbol{A} = \boldsymbol{I}\] Sebuah matriks hanya memiliki invers jika dan hanya jika determinannya tidak nol. Invers matriks sangat penting untuk menyelesaikan sistem persamaan linear.
# Mencari invers matriks di R dengan fungsi solve()
invX = solve(X)
invX
## [,1] [,2] [,3]
## [1,] 0.09965388 -0.03199305 -0.052352956
## [2,] -0.15783485 0.13668338 0.004649468
## [3,] 0.06290843 -0.09798039 0.049470044
# Verifikasi: X %*% invX harus menghasilkan matriks identitas
round(X %*% invX, 10) # Dibulatkan untuk mengatasi eror presisi floating-point
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1
Dekomposisi matriks adalah proses memfaktorkan sebuah matriks menjadi produk dari beberapa matriks. Ini sangat berguna untuk menyederhanakan masalah dan memahami properti intrinsik dari matriks tersebut.
Dalam transformasi linear, eigenvector dari sebuah matriks adalah vektor non-nol yang arahnya tidak berubah setelah transformasi; ia hanya direntangkan atau disusutkan. Faktor penskalaan ini disebut eigenvalue (λ) yang bersesuaian (Lay, 2021). \[ \boldsymbol{A}v = \lambda v \] Di mana \(\boldsymbol{A}\) adalah matriks, \(v\) adalah eigenvector, dan \(\lambda\) adalah eigenvalue. Eigenvalue dan eigenvector merupakan “sidik jari” dari sebuah matriks, mengungkapkan informasi fundamental tentang sistem yang diwakilinya, terutama dalam analisis komponen utama (PCA) di mana mereka menunjukkan arah dan besaran varians data.
# Ekstraksi Eigenvalue
eigen_X_vals <- eigen(X)$values
eigen_X_vals
## [1] 226.321425+0.000000i 6.179287+2.395064i 6.179287-2.395064i
# Ekstraksi Eigenvector
eigen_X_vecs <- eigen(X)$vectors
eigen_X_vecs
## [,1] [,2] [,3]
## [1,] -0.5290614+0i -0.03655836+0.2339942i -0.03655836-0.2339942i
## [2,] -0.6106275+0i 0.69614167+0.0000000i 0.69614167+0.0000000i
## [3,] -0.5892606+0i -0.64049119-0.2215130i -0.64049119+0.2215130i
Fakta menarik: Trace (jumlah diagonal) matriks sama dengan jumlah eigenvalue-nya, dan determinan matriks sama dengan produk eigenvalue-nya.
# Verifikasi Trace
sum(diag(X))
## [1] 238.68
sum(eigen_X_vals)
## [1] 238.68+0i
# Verifikasi Determinan
det(X)
## [1] 9940.019
prod(eigen_X_vals)
## [1] 9940.019+0i
SVD adalah salah satu dekomposisi matriks paling kuat dan umum, yang dapat diterapkan pada matriks dengan ordo apapun (tidak harus persegi). SVD menguraikan matriks \(\boldsymbol{A}\) menjadi tiga matriks: \[ \boldsymbol{A_{m\times n}} = \boldsymbol{U_{m\times m}} \boldsymbol{\Sigma_{m\times n}} \boldsymbol{V_{n\times n}^{T}} \] - \(\boldsymbol{U}\): Matriks ortogonal berisi left singular vectors. - \(\boldsymbol{\Sigma}\) (Sigma): Matriks diagonal berisi singular values, yang merupakan akar kuadrat dari eigenvalue \(\boldsymbol{A}^T\boldsymbol{A}\). - \(\boldsymbol{V}\): Matriks ortogonal berisi right singular vectors.
SVD sangat berguna dalam reduksi dimensi, kompresi data (misalnya gambar), dan sistem rekomendasi.
# SVD pada matriks X
svd_X <- svd(X)
# U
svd_X$u
## [,1] [,2] [,3]
## [1,] -0.5300319 -0.3778163 -0.759158108
## [2,] -0.6106529 -0.4511036 0.650852260
## [3,] -0.5883615 0.8085545 0.008384676
# D (disajikan sebagai vektor singular values, yaitu diagonal dari Sigma)
svd_X$d
## [1] 226.578567 11.214362 3.911955
# V (V, bukan V transpose)
svd_X$v
## [,1] [,2] [,3]
## [1,] -0.5620564 -0.73508908 -0.3791262
## [2,] -0.5764524 0.01944084 0.8168995
## [3,] -0.5931234 0.67769174 -0.4346707
Untuk merekonstruksi matriks asli, kita dapat mengalikan ketiga komponen ini:
# Rekonstruksi Matriks X
U <- svd_X$u
D <- diag(svd_X$d)
V_t <- t(svd_X$v)
reconstructed_X <- U %*% D %*% V_t
round(reconstructed_X, 5) == round(X, 5)
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
Metrik jarak digunakan untuk mengukur “kedekatan” atau “kemiripan” antara dua observasi (vektor) dalam ruang berdimensi-p. Pemilihan metrik jarak yang tepat sangat bergantung pada sifat data dan tujuan analisis. Dalam bagian ini, kita akan membahas lima konsep jarak yang umum digunakan.
Kita akan mengambil sampel 15 mahasiswa dari data akademik dan melakukan standarisasi (mengubah data sehingga memiliki mean=0 dan sd=1). Standarisasi penting agar variabel dengan skala besar tidak mendominasi perhitungan jarak.
library(factoextra)
set.seed(123)
sampel_ss <- sample(1:nrow(data_akademik), 15)
df <- data_akademik[sampel_ss, ]
# Standarisasi data
df.scaled <- scale(df)
Jarak Euclidean adalah jarak “garis lurus” yang paling intuitif antara dua titik. Ini merupakan kasus khusus dari Jarak Minkowski dengan p=2. \[ d(\boldsymbol{x}, \boldsymbol{y}) = \sqrt{\sum_{k=1}^{p} (x_k - y_k)^2} \] Jarak ini umum digunakan dalam algoritma clustering seperti K-Means.
dist.eucl <- dist(df.scaled, method = "euclidean")
fviz_dist(dist.eucl, lab_size = 8)
Heatmap menunjukkan jarak antar mahasiswa. Warna yang lebih gelap (biru)
menandakan jarak yang jauh (profil akademik sangat berbeda), sedangkan
warna terang (merah) menandakan jarak dekat (profil akademik mirip).
Jarak Manhattan mengukur jarak dengan menjumlahkan perbedaan absolut antar koordinat. Ini seperti menavigasi kota dengan blok-blok persegi di mana perjalanan diagonal tidak memungkinkan. Ini adalah kasus khusus Jarak Minkowski dengan p=1. \[ d(\boldsymbol{x}, \boldsymbol{y}) = \sum_{k=1}^{p} |x_k - y_k| \] Jarak ini lebih tahan terhadap outlier dibandingkan Euclidean.
dist.man <- dist(df.scaled, method = "manhattan")
fviz_dist(dist.man, lab_size = 8)
Jarak Chebyshev didefinisikan sebagai perbedaan absolut terbesar di sepanjang dimensi koordinat mana pun. Ini berguna ketika kita hanya peduli pada perbedaan maksimum tunggal. Ini adalah kasus khusus Jarak Minkowski dengan p menuju tak hingga (\(p \rightarrow \infty\)). \[ d(\boldsymbol{x}, \boldsymbol{y}) = \max_{k} (|x_k - y_k|) \]
dist.cheb <- dist(df.scaled, method = "maximum")
fviz_dist(dist.cheb, lab_size = 8)
Jarak Mahalanobis adalah metrik jarak statistik yang memperhitungkan korelasi antar variabel dan bersifat scale-invariant. Ini mengukur jarak dari suatu titik ke pusat distribusi (mean) dalam satuan standar deviasi (Johnson & Wichern, 2007). \[ D_M(\boldsymbol{x}) = \sqrt{(\boldsymbol{x}-\boldsymbol{\mu})^T \boldsymbol{S}^{-1} (\boldsymbol{x}-\boldsymbol{\mu})} \] Di mana \(\boldsymbol{\mu}\) adalah vektor rata-rata dan \(\boldsymbol{S}^{-1}\) adalah invers dari matriks kovarians. Jarak ini sangat efektif untuk deteksi outlier dalam data multivariat.
library(StatMatch)
dist.mah <- mahalanobis.dist(df.scaled)
# Menampilkan sebagian kecil dari matriks jarak
round(as.matrix(dist.mah)[1:6, 1:6], 2)
## 15 19 14 3 10 18
## 15 0.00 1.47 2.30 1.18 2.50 3.30
## 19 1.47 0.00 2.00 2.10 3.48 3.42
## 14 2.30 2.00 0.00 1.70 3.22 2.22
## 3 1.18 2.10 1.70 0.00 2.15 2.71
## 10 2.50 3.48 3.22 2.15 0.00 3.48
## 18 3.30 3.42 2.22 2.71 3.48 0.00
Nilai yang lebih kecil menunjukkan kemiripan profil akademik setelah memperhitungkan struktur korelasi data.
Jarak Minkowski adalah generalisasi dari metrik jarak. Ia menyatukan Jarak Euclidean dan Manhattan dalam satu formula dengan parameter \(p\) (juga disebut sebagai order). \[ d(\boldsymbol{x}, \boldsymbol{y}) = \left (\sum_{k=1}^{p} |x_k - y_k|^p\right)^{\frac{1}{p}} \] Kasus-kasus khususnya adalah: * Jika p = 1, menjadi Jarak Manhattan. * Jika p = 2, menjadi Jarak Euclidean. * Jika p \(\rightarrow \infty\), menjadi Jarak Chebyshev.
Fleksibilitas ini memungkinkan penyesuaian metrik jarak dengan karakteristik spesifik dari sebuah dataset (Tan et al., 2019).
# Menghitung Jarak Minkowski dengan p=3
dist.mink <- dist(df.scaled, method = "minkowski", p = 3)
fviz_dist(dist.mink, lab_size = 8)
Heatmap ini menunjukkan jarak dengan \(p=3\), yang memberikan bobot lebih pada
perbedaan yang besar antar dimensi dibandingkan Jarak Euclidean.
Vektor rata-rata (\(\boldsymbol{\bar{x}}\)) adalah generalisasi dari konsep rata-rata untuk data multivariat. Ini adalah sebuah vektor di mana setiap elemennya adalah rata-rata dari variabel yang bersesuaian di seluruh observasi. \[ \boldsymbol{\bar{x}} = \begin{bmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{bmatrix} \]
# Menggunakan seluruh dataset akademik
data_matrix <- as.matrix(data_akademik)
vektor_rata2 <- colMeans(data_matrix)
vektor_rata2
## Nilai_Kalkulus Nilai_Statistika Nilai_Aljabar Lama_Belajar
## 74.0436 76.7820 79.9352 14.1484
Vektor ini merepresentasikan “pusat” atau “titik tengah” dari sebaran data kita di ruang 4-dimensi.
Matriks Varians-Kovarians (\(\boldsymbol{S}\)) adalah fondasi dari analisis multivariat. - Elemen diagonal (\(s_{ii}\)) berisi varians dari setiap variabel, mengukur seberapa besar sebaran data pada variabel tersebut. - Elemen off-diagonal (\(s_{ij}\)) berisi kovarians antara variabel i dan j, mengukur bagaimana kedua variabel tersebut bergerak bersama. Kovarians positif berarti jika satu variabel naik, yang lain cenderung naik. \[ \boldsymbol{S} = \frac{1}{n-1}\sum_{i=1}^{n} (\boldsymbol{x}_i - \boldsymbol{\bar{x}})(\boldsymbol{x}_i - \boldsymbol{\bar{x}})^T \]
# Matriks Kovarians
matriks_kovarians <- cov(data_matrix)
matriks_kovarians
## Nilai_Kalkulus Nilai_Statistika Nilai_Aljabar Lama_Belajar
## Nilai_Kalkulus 73.059932 14.6466508 -1.731907 5.8932518
## Nilai_Statistika 14.646651 66.6507917 1.947027 0.9595867
## Nilai_Aljabar -1.731907 1.9470267 71.125143 -0.0773830
## Lama_Belajar 5.893252 0.9595867 -0.077383 19.6935057
Misalnya, kovarians positif antara Nilai_Statistika dan
Lama_Belajar (jika ada) menunjukkan bahwa mahasiswa yang
belajar lebih lama cenderung memiliki nilai statistika yang lebih
tinggi.
Matriks Korelasi (\(\boldsymbol{R}\)) adalah versi terstandarisasi dari matriks kovarians. Setiap elemennya adalah koefisien korelasi Pearson, yang nilainya berkisar antara -1 dan 1. Ini membuatnya lebih mudah diinterpretasikan daripada kovarians. \[ r_{ij} = \frac{s_{ij}}{\sqrt{s_{ii}}\sqrt{s_{jj}}} \]
# Matriks Korelasi
matriks_korelasi <- cor(data_matrix)
matriks_korelasi
## Nilai_Kalkulus Nilai_Statistika Nilai_Aljabar Lama_Belajar
## Nilai_Kalkulus 1.00000000 0.20989207 -0.024025551 0.155365237
## Nilai_Statistika 0.20989207 1.00000000 0.028278585 0.026486223
## Nilai_Aljabar -0.02402555 0.02827858 1.000000000 -0.002067628
## Lama_Belajar 0.15536524 0.02648622 -0.002067628 1.000000000
Dari sini kita bisa melihat, misalnya, korelasi kuat dan positif
(mendekati 1) antara Nilai_Aljabar dan
Nilai_Kalkulus, yang sangat masuk akal secara intuitif.