💡 Dekomposisi Matriks dan Konsep Jarak
Penjelasan, Rumus, Contoh, Implementasi dari Praktikum 1
Disusun oleh Anggun Vriska Damayanti
Tanggal: 2025-09-09
::: Matriks merupakan salah satu objek penting dalam aljabar linear yang banyak digunakan dalam bidang sains, teknik, hingga ilmu sosial. Berbagai operasi dasar matriks seperti penjumlahan, pengurangan, perkalian, transpose, invers, dan determinan menjadi dasar dalam menyelesaikan permasalahan matematis maupun komputasi. Selain itu, konsep dekomposisi matriks sangat diperlukan untuk memecah matriks kompleks menjadi bentuk yang lebih sederhana, seperrti Singular Value Dekomposition yang memecah suatu matriks menjadi 3 bagian, SVD memudahkan analisis data maupun penyelesaian sistem persamaan linear. Di sisi lain, dalam analisis data dan statistika multivariat, diperlukan pula konsep jarak untuk mengukur kedekatan antar objek, baik dengan jarak Euclidean, Manhattan, Minkowski, maupun Mahalanobis :::
Menggabungkan elemen matriks dengan menjumlahkan setiap elemen yang posisinya sama. \[ (A + B)_{ij} = a_{ij} + b_{ij} \]
Menggabungkan elemen matriks dengan mengurangkan setiap elemen yang posisinya sama. \[ (A - B)_{ij} = a_{ij} - b_{ij} \]
pertama dengan kolom dari matriks kedua. \[ (AB)_{ij} = \sum_{k=1}^n a_{ik} b_{kj} \]
Mengalikan elemen yang posisinya sama pada dua matriks dengan ukuran
yang sama.
\[
C_{ij} = a_{ij} \times b_{ij}\\ perkalian\ dengan\ skalar\ ,\ (kA)_{ij}
= k \cdot a_{ij}
\]
Mengubah baris menjadi kolom atau sebaliknya. \[ X = \begin{bmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{bmatrix} ,\quad X^\top = \begin{bmatrix} x_{11} & x_{21} & x_{31} \\ x_{12} & x_{22} & x_{32} \\ x_{13} & x_{23} & x_{33} \end{bmatrix} \]
Matriks balikan yang bila dikalikan dengan matriks aslinya menghasilkan matriks identitas. \[ A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A) \]
Nilai skalar yang menunjukkan apakah matriks dapat dibalik (invertible) atau tidak. \[ \det(A) = \begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc \\det(A) = \begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg) \]
X = matrix(c(6.5,4.2,7.9,
5.4,7.0,6.5,
7.3,6.7,8.2), nrow = 3, ncol = 3)
Y = matrix(c(7.3,6.7,8.5,
9.9,7.6,5.1,
5.4,8.2,6.2), nrow = 3, ncol = 3, byrow = TRUE)
X; Y
## [,1] [,2] [,3]
## [1,] 6.5 5.4 7.3
## [2,] 4.2 7.0 6.7
## [3,] 7.9 6.5 8.2
## [,1] [,2] [,3]
## [1,] 7.3 6.7 8.5
## [2,] 9.9 7.6 5.1
## [3,] 5.4 8.2 6.2
X + Y
## [,1] [,2] [,3]
## [1,] 13.8 12.1 15.8
## [2,] 14.1 14.6 11.8
## [3,] 13.3 14.7 14.4
X-Y
## [,1] [,2] [,3]
## [1,] -0.8 -1.3 -1.2
## [2,] -5.7 -0.6 1.6
## [3,] 2.5 -1.7 2.0
X %*% Y
## [,1] [,2] [,3]
## [1,] 140.33 144.45 128.05
## [2,] 136.14 136.28 112.94
## [3,] 166.30 169.57 151.14
Y %*% X
## [,1] [,2] [,3]
## [1,] 142.74 141.57 167.88
## [2,] 136.56 139.81 165.01
## [3,] 118.52 126.86 145.20
X * Y
## [,1] [,2] [,3]
## [1,] 47.45 36.18 62.05
## [2,] 41.58 53.20 34.17
## [3,] 42.66 53.30 50.84
2 * X
## [,1] [,2] [,3]
## [1,] 13.0 10.8 14.6
## [2,] 8.4 14.0 13.4
## [3,] 15.8 13.0 16.4
2 * Y
## [,1] [,2] [,3]
## [1,] 14.6 13.4 17.0
## [2,] 19.8 15.2 10.2
## [3,] 10.8 16.4 12.4
t(X)
## [,1] [,2] [,3]
## [1,] 6.5 4.2 7.9
## [2,] 5.4 7.0 6.5
## [3,] 7.3 6.7 8.2
t(Y)
## [,1] [,2] [,3]
## [1,] 7.3 9.9 5.4
## [2,] 6.7 7.6 8.2
## [3,] 8.5 5.1 6.2
solve(X) # inv(X)
## [,1] [,2] [,3]
## [1,] -0.9532659 -0.21818432 1.0269117
## [2,] -1.2726272 0.30077775 0.8871911
## [3,] 1.9271801 -0.02821942 -1.5706518
solve(Y) # inv(Y)
## [,1] [,2] [,3]
## [1,] 0.03460614 0.183869620 -0.19869150
## [2,] -0.22095696 -0.004178855 0.30636231
## [3,] 0.26209256 -0.154617635 -0.07084465
det(X)
## [1] -14.529
det(Y)
## [1] 153.152
eigen value merupakan suatu bilangan skalar (lambda) yang menunjukkan besar dan kecilnya perubahan vektor ketika diberikan sebuah matriks A, atau dapat disebut sebagai jumlah variasi yang dapat dijelaskan oleh suatu komponen.
\[ A v = \lambda v \] untuk mencari eigen value, digunakan rumus : \[ \det(A - \lambda I) = 0 \]
arahnya tidak berubah apabila diberikan transformasi linear oleh matriks A. Eigen vektor menunjukkan arah utama dari transformasi tersebut
\[ A v = \lambda v \]
Pasangan Eigen merupakan kombinasi dari eigenvalue dan eigen vektor yang sesuai. \[ (\lambda, v) \]
Diberikan sebuah matriks berukuran 3 x 3, yaitu
A = matrix(c(2,0,0,
0,3,4,
0,4,9), nrow=3, byrow=TRUE)
eigA <- eigen(A)
eigA$values
## [1] 11 2 1
eigA$vectors
## [,1] [,2] [,3]
## [1,] 0.0000000 1 0.0000000
## [2,] 0.4472136 0 0.8944272
## [3,] 0.8944272 0 -0.4472136
for (i in seq_along(eigA$values)) {
cat("\nPasangan ke-", i, ":\n")
cat("Eigenvalue =", eigA$values[i], "\n")
cat("Eigenvector =\n")
print(eigA$vectors[, i])
}
##
## Pasangan ke- 1 :
## Eigenvalue = 11
## Eigenvector =
## [1] 0.0000000 0.4472136 0.8944272
##
## Pasangan ke- 2 :
## Eigenvalue = 2
## Eigenvector =
## [1] 1 0 0
##
## Pasangan ke- 3 :
## Eigenvalue = 1
## Eigenvector =
## [1] 0.0000000 0.8944272 -0.4472136
Value Decomposition adalah dekomposisi atau pemecahan sebuah matriks menjadi 3 matriks lain yang memiliki sifat tertentu.Setiap matriks \[ A \in \mathbb{R}^{m \times n} \] dapat dituliskan sebagai: \[ A = UDV^T \]
dengan : \[ U \in \mathbb{R}^{m \times m}, U^TU = I_m\ (ortogonal)\\V \in \mathbb{R}^{n \times n}\, \ V^TV = I_n\ (ortogonal) \\D \in \mathbb{R}^{m \times n}\\ diagonal\ dengan\ elemen\ singular\ value: \ D = \begin{bmatrix} \ D_1 & 0 & \cdots & 0 \\ 0 & \ D_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \ D_r \end{bmatrix} \]
diberikan matriks sebagai berikut :
# Matriks A
A = matrix(c(6,-4,5,
3,-6,7,
-3,8,-2,
4,5,4), 4, 3, byrow=TRUE)
A
## [,1] [,2] [,3]
## [1,] 6 -4 5
## [2,] 3 -6 7
## [3,] -3 8 -2
## [4,] 4 5 4
svd_result <- svd(A)
singular_value <- svd_result$d
U <- svd_result$u
V <- svd_result$v
U
## [,1] [,2] [,3]
## [1,] -0.56133006 0.25905858 0.47544292
## [2,] -0.63229950 0.04290512 -0.77353015
## [3,] 0.53108119 0.41558162 -0.40887408
## [4,] -0.05530527 0.87082703 0.09179938
V
## [,1] [,2] [,3]
## [1,] -0.4742099 0.4551042 0.75366120
## [2,] 0.6706030 0.7413700 -0.02573308
## [3,] -0.5704530 0.4932046 -0.65675917
singular_value
## [1] 14.928714 8.612600 2.820746
merupakan jarak lurus atau garis terpendek antara dua titik dalam ruang \(p\) dimensi. \[ d_{\text{Euclidean}}(x,y) = \sqrt{\sum_{i=1}^p (x_i - y_i)^2} \]
Merupakan jumlah dari perbedaan absolut antara koordinat \[ d_{\text{Manhattan}}(x,y) = \sum_{i=1}^p |x_i - y_i| \] ###Jarak Chebyshev Merupakan jarak yang ditentukan berdasarkan selisih terbesar antar dimensi \[ d_{\text{Chebyshev}}(x,y) = \max_{i=1,\dots,p} |x_i - y_i| \]
Jarak Mahalonabis memperhitungkan varians dan korelasi antar
variabel.
\[
d_{\text{Mahalanobis}}(x,y) = \sqrt{(x - y)^T S^{-1} (x - y)}
\]
dengan \(S\) adalah matriks kovarians dari data.
jarak lain sebagai kasus khusus, seperti jarak Manhattan, jarak Euclidean, dan jarak Chebyshev. \[ d_{\text{Minkowski}}(x,y;q) = \left( \sum_{i=1}^p |x_i - y_i|^q \right)^{\frac{1}{q}} \]
catatan: - \(q=1\) ⟶ Jarak
Manhattan
- \(q=2\) ⟶ Jarak Euclidean
- \(q \to \infty\) ⟶ Jarak
Chebyshev
matriks adalah sebagai berikut
#(5 observasi, 3 variabel)
data <- matrix(c(
2,4,5,
3,7,6,
4,5,8,
6,9,7,
5,3,2
), nrow = 5, byrow = TRUE)
colnames(data) <- c("X1", "X2", "X3")
rownames(data) <- paste("Obs", 1:5, sep = "")
data
## X1 X2 X3
## Obs1 2 4 5
## Obs2 3 7 6
## Obs3 4 5 8
## Obs4 6 9 7
## Obs5 5 3 2
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.5.1
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.5.1
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
dist.eucl <- dist(data, method = "euclidean"); dist.eucl
## Obs1 Obs2 Obs3 Obs4
## Obs2 3.316625
## Obs3 3.741657 3.000000
## Obs4 6.708204 3.741657 4.582576
## Obs5 4.358899 6.000000 6.403124 7.874008
fviz_dist(dist.eucl)
Interpretasi : Berdasarkan heatmap jarak euclidean, dapat dilihat bahwa observasi 2 dan observasi 3 memiliki jarak paling dekat, sehingga keduanya merupakan observasi yang paling mirip. Observasi 1 juga memilik jarak yang cukup dekat dengan observasi 2 dan observasi 3, sedangkan observasi 4 memiliki jarak yang masih berhubungan dengan kelompok lain, sedangangkan kelompok 5, memiliki jarak yang paling jauh dengan observasi lainnya, sehingga dapat dianggap sebagai observasi yang paling berbeda.
dist.man <- dist(data, method = "manhattan"); dist.man
## Obs1 Obs2 Obs3 Obs4
## Obs2 5
## Obs3 6 5
## Obs4 11 6 7
## Obs5 7 10 9 12
fviz_dist(dist.man)
Interpretasi : Berdasarkan heatmap dapat dilihat bahwa observasi 4 dan observasi 5 memiliki jarak yang paling jauh atau berbeda, sedangkan obsrvasi 2 memiliki jarak yang paling mirip dengan observasi 2 dan observasi 3. Lalu observasi 1 memiliki jarak yang sedang dengan observasi 3.
dist.cheb <- dist(data, method = "maximum"); dist.cheb
## Obs1 Obs2 Obs3 Obs4
## Obs2 3
## Obs3 3 2
## Obs4 5 3 4
## Obs5 3 4 6 6
fviz_dist(dist.cheb)
Interpretasi : Berdasarkan jarak Chebyshev jarak antara observasi 2 dan observasi 3 memiliki jarak yang paling dekat atau paling mirip. Sedangkan observasi 3 memiliki jarak yang paling jauh dengan observasi 5, dan observasi 4 memiliki jarak yang sangat jauh dengan observasi 5. Sedangkan observasi 5 dengan observasi 1 dan observasi 2 dengan observasi 4 memiliki jarak yang sedang.
library(StatMatch)
## Warning: package 'StatMatch' was built under R version 4.5.1
## Loading required package: proxy
## Warning: package 'proxy' was built under R version 4.5.1
##
## 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.5.1
## 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: dplyr
## Warning: package 'dplyr' was built under R version 4.5.1
##
## 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)
dist.mah_matrix <- as.matrix(dist.mah);dist.mah_matrix
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 1.332507 2.287704 2.790081 2.354976
## Obs2 1.332507 0.000000 2.703405 1.968805 2.671743
## Obs3 2.287704 2.703405 0.000000 2.561676 2.826774
## Obs4 2.790081 1.968805 2.561676 0.000000 2.604753
## Obs5 2.354976 2.671743 2.826774 2.604753 0.000000
# Fungsi jarak Minkowski untuk matriks data
minkowski_matrix <- function(data, q) {
n <- nrow(data)
D <- matrix(0, n, n)
for (i in 1:n) {
for (j in 1:n) {
D[i, j] <- sum(abs(data[i, ] - data[j, ])^q)^(1/q)
}
}
rownames(D) <- rownames(data)
colnames(D) <- rownames(data)
return(D)
}
# Hitung matriks jarak Minkowski untuk q = 3
dist.mink <- minkowski_matrix(data, q = 3)
dist.mink
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 3.072317 3.301927 5.818648 3.802952
## Obs2 3.072317 0.000000 2.571282 3.301927 5.142563
## Obs3 3.301927 2.571282 0.000000 4.179339 6.082202
## Obs4 5.818648 3.301927 4.179339 0.000000 6.993191
## Obs5 3.802952 5.142563 6.082202 6.993191 0.000000
Matriks rata-rata adalah vektor yang berisi nilai rata-rata dari setiap variabel dalam suatu dataset. Matriks ini merepresentasikan pusat (titik tengah) dari data. Jika \(X\) adalah matriks data berukuran \(m \times n\), maka vektor rata-rata:
\[ \bar{x} = \begin{bmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{bmatrix} = \frac{1}{n} \sum_{i=1}^n x_i \]
Matriks kovarians menggambarkan penyebaran dari data. Diagonal utama matriks berisi varians masing-masing variabel, sedangkan selain diagonal utama berisi kovarians antar variabel.
\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]
atau dalam bentuk matriks:\
\[ S = \begin{bmatrix} s_{11} & s_{12} & \cdots & s_{1p} \\ s_{21} & s_{22} & \cdots & s_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ s_{p1} & s_{p2} & \cdots & s_{pp} \end{bmatrix} \]
Matriks korelasi menunjukkan hubungan linier antar variabel dalam skala baku (antara -1 dan 1). Nilai diagonal utama selalu 1. $$ R = D ^{-1} SD ^{-1}\ dengan D = (, , , ).
\atau secara elemen:\
r_{ij} = $$
Matriks standardisasi adalah transformasi data ke dalam skala z-score sehingga setiap variabel memiliki rata-rata 0 dan varians 1. Digunakan agar variabel dengan skala berbeda dapat dibandingkan. Untuk data \(X\), matriks data terstandardisasi \(Z\):
\[ Z = (X - \mathbf{1}\bar{x}^T) D_s^{-1} \]
dengan \(\mathbf{1}\) adalah vektor satuan, dan
\[ D_s = \text{diag}(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}) \]
(BB) dan Tinggi Badan (TB) anak-anak sebagai berikut :
Books <- c(12, 5, 20, 8, 15)
StudyHours <- c(10, 6, 15, 12, 9)
AssignmentScore <- c(80, 70, 90, 85, 75)
data_b <- as.matrix(cbind(Books, StudyHours, AssignmentScore)); data_b
## Books StudyHours AssignmentScore
## [1,] 12 10 80
## [2,] 5 6 70
## [3,] 20 15 90
## [4,] 8 12 85
## [5,] 15 9 75
vecMeans = as.matrix(colMeans(data_b)); vecMeans
## [,1]
## Books 12.0
## StudyHours 10.4
## AssignmentScore 80.0
vecRata = matrix(c(mean(Books), mean(StudyHours), mean(AssignmentScore)), nrow=3, ncol=1); vecRata
## [,1]
## [1,] 12.0
## [2,] 10.4
## [3,] 80.0
varkov = cov(data_b); varkov
## Books StudyHours AssignmentScore
## Books 34.50 14.25 28.75
## StudyHours 14.25 11.30 26.25
## AssignmentScore 28.75 26.25 62.50
korel = cor(data_b); korel
## Books StudyHours AssignmentScore
## Books 1.0000000 0.7217156 0.6191392
## StudyHours 0.7217156 1.0000000 0.9877569
## AssignmentScore 0.6191392 0.9877569 1.0000000
n = nrow(data_b);n
## [1] 5
u = matrix(1,n,1); u
## [,1]
## [1,] 1
## [2,] 1
## [3,] 1
## [4,] 1
## [5,] 1
xbar = cbind((1/n)*t(u)%*%data_b); xbar
## Books StudyHours AssignmentScore
## [1,] 12 10.4 80
D = data_b - u %*% xbar; D
## Books StudyHours AssignmentScore
## [1,] 0 -0.4 0
## [2,] -7 -4.4 -10
## [3,] 8 4.6 10
## [4,] -4 1.6 5
## [5,] 3 -1.4 -5
S = (1/(n-1))*t(D)%*%D; S
## Books StudyHours AssignmentScore
## Books 34.50 14.25 28.75
## StudyHours 14.25 11.30 26.25
## AssignmentScore 28.75 26.25 62.50
Ds = diag(sqrt(diag(S))); Ds
## [,1] [,2] [,3]
## [1,] 5.87367 0.000000 0.000000
## [2,] 0.00000 3.361547 0.000000
## [3,] 0.00000 0.000000 7.905694
R = solve(Ds) %*% S %*% solve(Ds); R
## [,1] [,2] [,3]
## [1,] 1.0000000 0.7217156 0.6191392
## [2,] 0.7217156 1.0000000 0.9877569
## [3,] 0.6191392 0.9877569 1.0000000