Matriks adalah susunan bilangan berbentuk persegi panjang (tabel) yang terdiri atas baris dan kolom. Bilangan-bilangan yang membentuk matriks disebut elemen matriks.
Contoh matriks \(\boldsymbol{A}\) berordo \(2\times3\) (2 baris, 3 kolom): \[ \boldsymbol{A} = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \] Di dalam R, kita dapat menginput data ke dalam matriks sebagai berikut:
# Membuat matriks 3x3
X = matrix(c(1,2,3,
4,5,6,
7,8,9), nrow=3, ncol=3, byrow=TRUE)
X
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
Terdapat beberapa operasi dasar matriks meliputi:
Operasi matriks yang bertujuan untuk menjumlahkan setiap entri dari suatu matriks terhadap matriks lainnya.
\[ (A + B)_{ij} = a_{ij} + b_{ij} \]
Operasi matriks yang bertujuan untuk mengurangisetiap entri dari suatu matriks terhadap matriks lainnya.
\[ (A -B)_{ij} = a_{ij} -b_{ij} \]
Mengalikan setiap elemen matriks dikalikan dengan suatu bilangan skalar k
\[ (kA)_{ij} = k \cdot a_{ij} \]
Mengalikan setiap entri pada tiap baris dari matriks pertama dengan tiap kolom dari matriks kedua. Oleh karena itu, hal yang harus diperhatikan dalam mengalikan martiks adalah jumlah kolom dari matriks pertama harus sama dengan jumlah baris dari matriks kedua.
\[ (A \times B)_{ij} = \sum_{k=1}^{n} a_{ik} \cdot b_{kj} \]
Membalikkan baris menjadi kolom atau sebaliknya.
\[ (A^T)_{ij} = a_{ji} \]
Determinan Matriks merupakan salah satu operasi matriks yang bertujuan untuk menunjukkan apakah suatu matriks “invertible” atau tidak. Hasil yang diberikan dalam determinan suatu matriks adalah suatu skalar. Untuk matriks persegi \(2\times2\):
\[ \det \begin{bmatrix} a & b \\ c & d \end{bmatrix} = ad - bc \]
Invers matriks merupakah salah satu operasi matriks yang bertujuan untuk “membalik” operasi matriks.
\[ A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix} \]
X = matrix(c(6.5,8.2,7.9,
5.4,7.0,6.7,
8.1,6.9,9.2), nrow=3, ncol=3)
Y = matrix(c(7.3,6.8,8.5,
8.9,7.6,6.1,
9.4,8.0,7.2), nrow=3, ncol=3, byrow=TRUE)
#Penjumlahan Matriks
X + Y
## [,1] [,2] [,3]
## [1,] 13.8 12.2 16.6
## [2,] 17.1 14.6 13.0
## [3,] 17.3 14.7 16.4
#Pengurangan Matriks
X - Y
## [,1] [,2] [,3]
## [1,] -0.8 -1.4 -0.4
## [2,] -0.7 -0.6 0.8
## [3,] -1.5 -1.3 2.0
#Perkalian Matriks
X %*% Y
## [,1] [,2] [,3]
## [1,] 171.65 150.04 146.51
## [2,] 187.02 164.16 162.08
## [3,] 203.78 178.24 174.26
# Transpose
t(X)
## [,1] [,2] [,3]
## [1,] 6.5 8.2 7.9
## [2,] 5.4 7.0 6.7
## [3,] 8.1 6.9 9.2
# Determinan
det(X)
## [1] 2.167
# Invers
solve(X)
## [,1] [,2] [,3]
## [1,] 8.3848639 2.118136 -8.9709275
## [2,] -9.6585141 -1.933549 9.9538533
## [3,] -0.1661283 -0.410706 0.5629903
Eigen value (nilai eigen) adalah bilangan skalar \(λ\) yang menunjukkan seberapa besar suatu transformasi linier (matriks) merubah arah vektor.
\[ det(\boldsymbol{A}-\lambda \boldsymbol{I}) = 0 \]
Setelah menyelesaikan persamaan di atas, maka nilai eigen value akan ditemukan dalam bentuk \(λ\).
Eigen vector (vektor eigen) adalah vektor tak nol \(v\) yang arah perubahannya tetap ketika dikenai transformasi matriks. Eigen vector dapat dicari setelah menemukan eigen value \(λ\) sebagai berikut:
\[ \left(\boldsymbol{A}-\lambda \boldsymbol{I} \right)v = 0 \]
# Membuat matriks
A <- matrix(c(2, 1,
1, 2), nrow = 2, byrow = TRUE)
A
## [,1] [,2]
## [1,] 2 1
## [2,] 1 2
# Menghitung eigen value dan eigen vector
eig <- eigen(A)
# Menampilkan eigen value
eig$values
## [1] 3 1
# Menampilkan eigen vector
eig$vectors
## [,1] [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068 0.7071068
Singular Value Decomposition (SVD) adalah salah satu metode dekomposisi matriks yang memecah sebuah matriks \(A\) menjadi tiga matriks lain. SVD sangat penting dalam analisis data, khususnya pada reduksi dimensi (PCA), kompresi data, dan pengolahan sinyal.
Jika \(A\) adalah matriks berukuran \(m \times n\), maka SVD dituliskan sebagai:
\[ A = U \, \Sigma \, V^T \]
dengan:
- \(U\) = matriks ortogonal
berukuran \(m \times m\)
(kolomnyadisebut left singular vectors)
- \(\Sigma\) = matriks diagonal \(m \times n\) yang berisi
singularvalues (akar dari eigen value \(A^TA\))
- \(V\) = matriks ortogonal berukuran
\(n \times n\) (kolomnya
disebutright singular vectors)
# Contoh matriks
A<- matrix(c(5,-3,6,
2,-4,8,
-2,5,-1,
7,3,9), nrow=4, byrow=TRUE)
# Dekomposisi SVD
svd_result <- svd(A)
# Singular values
svd_result$d
## [1] 16.07076 7.41936 3.11187
# Matriks U
svd_result$u
## [,1] [,2] [,3]
## [1,] -0.5046975 0.2278362 -0.3742460
## [2,] -0.5178195 0.4138180 0.7413297
## [3,] 0.1646416 -0.6063789 0.5337354
## [4,] -0.6708477 -0.6396483 -0.1596770
# Matriks V
svd_result$v
## [,1] [,2] [,3]
## [1,] -0.5341591 -0.17494276 -0.8270847
## [2,] 0.1490928 -0.98251336 0.1115295
## [3,] -0.8321330 -0.06373793 0.5509011
Dalam analisis data, jarak (distance) digunakan untuk
mengukur tingkat kemiripan atau perbedaan antar
objek/individu berdasarkan nilai variabel-variabel yang
dimilikinya.
Semakin kecil nilai jarak, semakin mirip dua objek tersebut; sebaliknya,
semakin besar jarak, semakin berbeda kedua objek.
Jarak Euclidean
Jarak garis lurus terpendek antara dua titik \(x\) dan \(y\) di ruang berdimensi \(p\).
\[
d(x,y) = \sqrt{\sum_{i=1}^{p} (x_i - y_i)^2}
\]
Jarak Manhattan (city-block
distance)
Mengukur jarak berdasarkan jumlah perbedaan absolut antar
koordinat.
\[
d(x,y) = \sum_{i=1}^{p} |x_i - y_i|
\]
Jarak Chebyshev
Menggunakan selisih maksimum dari semua dimensi.
\[
d(x,y) = \max_{i} \, |x_i - y_i|
\]
Jarak Mahalanobis
Mempertimbangkan varians dan korelasi antar
variabel.
\[
d(x,y) = \sqrt{(x-y)^T \, S^{-1} \, (x-y)}
\] dengan \(S\) adalah matriks
kovarians.
Misalkan terdapat data sederhana berisi tinggi badan (cm) dan berat badan (kg) dari 5 orang, kita ingin mengukur tingkat kemiripan antar individu berdasarkan tinggi dan berat menggunakan beberapa ukuran jarak. Untuk itu dapat dilakukan menggunakan R Studio seperti berikut:
# Data
data <- data.frame(
Tinggi = c(170, 165, 180, 175, 160),
Berat = c(65, 59, 72, 70, 55)
)
rownames(data) <- c("A","B","C","D","E")
data
## Tinggi Berat
## A 170 65
## B 165 59
## C 180 72
## D 175 70
## E 160 55
# Standarisasi (opsional agar skala sebanding)
data.scaled <- scale(data)
# 1. Jarak Euclidean
dist.eucl <- dist(data.scaled, method = "euclidean")
dist.eucl
## A B C D
## B 1.0470554
## C 1.5961753 2.6208508
## D 0.9399782 1.9850505 0.6909193
## E 1.8799564 0.8423050 3.4626496 2.8199346
# 2. Jarak Manhattan
dist.manh <- dist(data.scaled, method = "manhattan")
dist.manh
## A B C D
## B 1.4669164
## C 2.2384488 3.7053652
## D 1.3278396 2.7947560 0.9106092
## E 2.6556792 1.1887628 4.8941279 3.9835188
# 3. Jarak Chebyshev (maximum)
dist.cheb <- dist(data.scaled, method = "maximum")
dist.cheb
## A B C D
## B 0.8344609
## C 1.2649111 1.8973666
## D 0.6953841 1.5298449 0.6324555
## E 1.3907681 0.6324555 2.5298221 2.0861522
# 4. Jarak Mahalanobis
library(StatMatch)
## Warning: package 'StatMatch' was built under R version 4.4.3
## Loading required package: proxy
## Warning: package 'proxy' was built under R version 4.4.3
##
## Attaching package: 'proxy'
## The following objects are masked from 'package:stats':
##
## as.dist, dist
## The following object is masked from 'package:base':
##
## as.matrix
## Loading required package: survey
## Warning: package 'survey' was built under R version 4.4.3
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
##
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
##
## dotchart
## Loading required package: lpSolve
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
dist.mah <- mahalanobis.dist(data.scaled)
dist.mah
## A B C D E
## A 0.0000000 1.5789310 2.306714 0.7953352 1.5906705
## B 1.5789310 0.0000000 1.957692 2.3067142 0.7953352
## C 2.3067142 1.9576920 0.000000 2.4927803 2.7074402
## D 0.7953352 2.3067142 2.492780 0.0000000 2.3860057
## E 1.5906705 0.7953352 2.707440 2.3860057 0.0000000
Interpretasi
Vektor rata-rata (mean vector) adalah representasi rata-rata dari setiap variabel dalam sebuah data multivariat. Jika kita memiliki data dengan \(n\) pengamatan dan \(p\) variabel, maka vektor rata-rata berisi nilai rata-rata masing-masing variabel. Misalkan data multivariat dinyatakan dengan matriks:
\[ X = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{bmatrix} \]
Maka vektor rata-rata adalah:
\[ \bar{X} = \begin{bmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{bmatrix} = \begin{bmatrix} \frac{1}{n}\sum_{i=1}^{n} x_{i1} \\ \frac{1}{n}\sum_{i=1}^{n} x_{i2} \\ \vdots \\ \frac{1}{n}\sum_{i=1}^{n} x_{ip} \end{bmatrix} \]
# Data sederhana (misal: berat badan, panjang tubuh, rentang tubuh kadal)
BB <- c(6.2, 11.5, 8.7, 10.1, 7.8)
PT <- c(61, 73, 68, 70, 64)
RTB <- c(115, 138, 127, 123, 131)
# Gabungkan ke dalam matriks
lizard <- as.matrix(cbind(BB, PT, RTB))
lizard
## BB PT RTB
## [1,] 6.2 61 115
## [2,] 11.5 73 138
## [3,] 8.7 68 127
## [4,] 10.1 70 123
## [5,] 7.8 64 131
# Hitung vektor rata-rata
vecMeans <- as.matrix(colMeans(lizard))
vecMeans
## [,1]
## BB 8.86
## PT 67.20
## RTB 126.80
Hasilnya adalah vektor rata-rata 3 dimensi yang menunjukkan nilai rata-rata berat badan, panjang tubuh, dan rentang tubuh.