Dekomposisi Matriks dan Konsep Jarak
Mengungkap Pola, Hubungan, dan Makna dalam Variabel Kategorikal
Disusun oleh Algafuri Decembra Nawa
Tanggal: 2025-09-10
::: Matriks merupakan objek fundamental dalam aljabar linear yang memiliki peranan luas di berbagai bidang, mulai dari sains, teknik, hingga ilmu sosial. Operasi dasar matriks seperti penjumlahan, pengurangan, perkalian, transpose, invers, dan determinan menjadi fondasi penting dalam menyelesaikan persoalan matematis maupun komputasional. Lebih lanjut, konsep dekomposisi matriks berfungsi untuk memecah matriks berukuran besar atau kompleks ke dalam bentuk yang lebih sederhana. Salah satu metode populer adalah Singular Value Decomposition (SVD), yang merepresentasikan sebuah matriks menjadi tiga komponen utama sehingga mempermudah analisis data maupun penyelesaian sistem persamaan linear. Di sisi lain, dalam analisis data multivariat, konsep jarak juga sangat esensial untuk mengukur kedekatan antar individu atau objek. Beberapa ukuran jarak yang umum digunakan antara lain Euclidean, Manhattan, Minkowski, serta Mahalanobis, yang masing-masing memiliki karakteristik tersendiri sesuai konteks analisis. :::
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 posisi 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{pmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{pmatrix}, \quad X^\top = \begin{pmatrix} x_{11} & x_{21} & x_{31} \\ x_{12} & x_{22} & x_{32} \\ x_{13} & x_{23} & x_{33} \end{pmatrix} \]
Matriks pembalikan 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. $$
\[\begin{aligned} \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) \end{aligned}\]$$
X = matrix(c(7.6,3.2,2.5,
8.5,5.6,4.7,
6.2,4.3,6.5), nrow = 3, ncol = 3)
Y = matrix(c(5.4,7.7,6.7,
7.5,4.3,3.7,
4.5,3.9,8.4), nrow = 3, ncol = 3, byrow = TRUE)
X; Y
## [,1] [,2] [,3]
## [1,] 7.6 8.5 6.2
## [2,] 3.2 5.6 4.3
## [3,] 2.5 4.7 6.5
## [,1] [,2] [,3]
## [1,] 5.4 7.7 6.7
## [2,] 7.5 4.3 3.7
## [3,] 4.5 3.9 8.4
X + Y
## [,1] [,2] [,3]
## [1,] 13.0 16.2 12.9
## [2,] 10.7 9.9 8.0
## [3,] 7.0 8.6 14.9
X-Y
## [,1] [,2] [,3]
## [1,] 2.2 0.8 -0.5
## [2,] -4.3 1.3 0.6
## [3,] -2.0 0.8 -1.9
X %*% Y
## [,1] [,2] [,3]
## [1,] 132.69 119.25 134.45
## [2,] 78.63 65.49 78.28
## [3,] 78.00 64.81 88.74
Y %*% X
## [,1] [,2] [,3]
## [1,] 82.43 120.51 110.14
## [2,] 80.01 105.22 89.04
## [3,] 67.68 99.57 99.27
X * Y
## [,1] [,2] [,3]
## [1,] 41.04 65.45 41.54
## [2,] 24.00 24.08 15.91
## [3,] 11.25 18.33 54.60
2 * X
## [,1] [,2] [,3]
## [1,] 15.2 17.0 12.4
## [2,] 6.4 11.2 8.6
## [3,] 5.0 9.4 13.0
2 * Y
## [,1] [,2] [,3]
## [1,] 10.8 15.4 13.4
## [2,] 15.0 8.6 7.4
## [3,] 9.0 7.8 16.8
t(X)
## [,1] [,2] [,3]
## [1,] 7.6 3.2 2.5
## [2,] 8.5 5.6 4.7
## [3,] 6.2 4.3 6.5
t(Y)
## [,1] [,2] [,3]
## [1,] 5.4 7.5 4.5
## [2,] 7.7 4.3 3.9
## [3,] 6.7 3.7 8.4
solve(X) # inv(X)
## [,1] [,2] [,3]
## [1,] 0.36739510 -0.5925069 0.04152767
## [2,] -0.22806181 0.7692831 -0.29137450
## [3,] 0.02360043 -0.3283636 0.34856015
solve(Y) # inv(Y)
## [,1] [,2] [,3]
## [1,] -0.12505838 0.22226835 0.001845029
## [2,] 0.26724093 -0.08769654 -0.174528220
## [3,] -0.05708059 -0.07835608 0.199090170
det(X)
## [1] 44.067
det(Y)
## [1] -173.439
Eigenvalue adalah sebuah bilangan skalar (λ) yang merepresentasikan seberapa besar suatu vektor mengalami perubahan ketika dikenai transformasi oleh matriks. Dengan kata lain, eigenvalue dapat dipandang sebagai ukuran banyaknya variasi yang mampu dijelaskan oleh suatu komponen dalam analisis multivariat.
\[ [A v = \lambda v] \] untuk mencari eigen value, digunakan rumus : \[ [\det(A - \lambda I) = 0] \]
arah pada vektornya 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 yang berasal dari eigenvalue dan eigen vektor yang sesuai. \[ [(\lambda, v)] \]
Diberikan sebuah matriks berukuran 3 x 3, yaitu
A = matrix(c(6,0,0,
0,5,3,
0,3,7), nrow=3, byrow=TRUE)
eigA <- eigen(A)
eigA$values
## [1] 9.162278 6.000000 2.837722
eigA$vectors
## [,1] [,2] [,3]
## [1,] 0.0000000 1 0.0000000
## [2,] 0.5847103 0 0.8112422
## [3,] 0.8112422 0 -0.5847103
for (i in 1:length(eigA$values)) {
cat("\nPasangan ke-", i, ":\n", sep = "")
cat("Eigenvalue = ", eigA$values[i], "\n", sep = "")
cat("Eigenvector = \n")
print(eigA$vectors[, i])
}
##
## Pasangan ke-1:
## Eigenvalue = 9.162278
## Eigenvector =
## [1] 0.0000000 0.5847103 0.8112422
##
## Pasangan ke-2:
## Eigenvalue = 6
## Eigenvector =
## [1] 1 0 0
##
## Pasangan ke-3:
## Eigenvalue = 2.837722
## Eigenvector =
## [1] 0.0000000 0.8112422 -0.5847103
Value Decomposition adalah dekomposisi atau pemecahan sebuah matriks yang dapat berubah menjadi 3 matriks lain yang memiliki sifat tertentu.Setiap matriks \[ [A \in \mathbb{R}^{m \times n}] \] dapat dituliskan sebagai: \[ [A = UDV^T] \]
dengan:
\[ \begin{aligned} U &\in \mathbb{R}^{m \times m}, \quad U^\top U = I_m \\ V &\in \mathbb{R}^{n \times n}, \quad V^\top V = I_n \\ \Sigma &= \operatorname{diag}(\sigma_1, \sigma_2, \dots, \sigma_r) \in \mathbb{R}^{m \times n} \end{aligned} \]
diberikan matriks sebagai berikut :
# Matriks A
A = matrix(c(7,-3,6,
2,-5,8,
-4,9,-3,
7,4,6), 4, 3, byrow=TRUE)
A
## [,1] [,2] [,3]
## [1,] 7 -3 6
## [2,] 2 -5 8
## [3,] -4 9 -3
## [4,] 7 4 6
singular_value <- svd(A)$d
U <- svd(A)$u
V <- svd(A)$v
U
## [,1] [,2] [,3]
## [1,] -0.5688686 0.1474810 0.3033611
## [2,] -0.5287688 -0.1782589 -0.8292719
## [3,] 0.4977457 0.5831650 -0.4592789
## [4,] -0.3860586 0.7787116 0.0966600
V
## [,1] [,2] [,3]
## [1,] -0.5827144 0.3838133 0.7163318
## [2,] 0.4362077 0.8914290 -0.1227892
## [3,] -0.6856871 0.2409184 -0.6868709
singular_value
## [1] 16.702884 9.885457 4.158295
merupakan jarak lurus antara dua titik dalam ruang \(p\) dimensi.
\[ d_{\text{Euclidean}}(x,y) = \sqrt{(x-y)^\top(x-y)} \]
Merupakan pengukuran jarak berdasarkan jumlah dari perbedaan absolut antara koordinat atau variabel.
\[ d_{\text{Manhattan}}(x,y) = \sum_{j=1}^{p} \big| x_j - y_j \big| \]
Merupakan jarak yang ditentukan berdasarkan selisih terbesar antar dimensi.
\[ d_{\text{Chebyshev}}(x,y) = \max_{i=1,\dots,n} |x_i - y_i| \]
Jarak Mahalanobis memperhitungkan jarak dengan mempertimbangkan varians dan korelasi antar variabel.
\[ d_{\text{Mahalanobis}}(x,y) = \sqrt{(x - y)^\top S^{-1} (x - y)} \]
dengan \(S\) adalah matriks kovarians dari data.
Merupakan bentuk umum yang mencakup beberapa ukuran jarak lain sebagai kasus khusus, seperti jarak Manhattan, jarak Euclidean, dan jarak Chebyshev.
\[ d_{\text{Minkowski}}(x,y;q) = \left( \sum_{j=1}^p |x_j - y_j|^q \right)^{1/q} \]
catatan: - \(q=1\) ⟶ Jarak
Manhattan
- \(q=2\) ⟶ Jarak Euclidean
- \(q \to \infty\) ⟶ Jarak
Chebyshev
matriks adalah sebagai berikut
# Data eksplisit (5 observasi, 3 variabel)
data <- matrix(
c(3,3,4,
5,7,4,
6,8,5,
7,5,2,
3,7,9),
nrow = 5, byrow = TRUE,
dimnames = list(
paste("Obs", 1:5, sep = ""),
c("X1", "X2", "X3")
)
)
data
## X1 X2 X3
## Obs1 3 3 4
## Obs2 5 7 4
## Obs3 6 8 5
## Obs4 7 5 2
## Obs5 3 7 9
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.5.1
## Loading required package: ggplot2
## 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 4.472136
## Obs3 5.916080 1.732051
## Obs4 4.898979 3.464102 4.358899
## Obs5 6.403124 5.385165 5.099020 8.306624
fviz_dist(dist.eucl)
dist.man <- dist(data, p = 1) # sama dengan method = "manhattan"
dist.man
## Obs1 Obs2 Obs3 Obs4
## Obs2 4.472136
## Obs3 5.916080 1.732051
## Obs4 4.898979 3.464102 4.358899
## Obs5 6.403124 5.385165 5.099020 8.306624
fviz_dist(dist.man)
dist.cheb <- dist(data, p = Inf) # sama dengan method = "maximum"
dist.cheb
## Obs1 Obs2 Obs3 Obs4
## Obs2 4.472136
## Obs3 5.916080 1.732051
## Obs4 4.898979 3.464102 4.358899
## Obs5 6.403124 5.385165 5.099020 8.306624
fviz_dist(dist.cheb)
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
##
## 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)
as.matrix(dist.mah)
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 2.319365 2.719600 2.546836 2.577113
## Obs2 2.319365 0.000000 1.503316 2.801617 2.791872
## Obs3 2.719600 1.503316 0.000000 1.992649 2.055825
## Obs4 2.546836 2.801617 1.992649 0.000000 2.827686
## Obs5 2.577113 2.791872 2.055825 2.827686 0.000000
# Fungsi jarak Minkowski untuk matriks data
minkowski_matrix <- function(data, q) {
as.matrix(dist(data, p = q))
}
dist.mink <- minkowski_matrix(data, 3)
dist.mink
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 4.472136 5.916080 4.898979 6.403124
## Obs2 4.472136 0.000000 1.732051 3.464102 5.385165
## Obs3 5.916080 1.732051 0.000000 4.358899 5.099020
## Obs4 4.898979 3.464102 4.358899 0.000000 8.306624
## Obs5 6.403124 5.385165 5.099020 8.306624 0.000000
Matriks rata-rata merupakan sebuah vektor yang memuat nilai rata-rata dari tiap variabel pada suatu himpunan data. Matriks ini menggambarkan titik pusat atau posisi tengah dari keseluruhan data tersebut. Jika \(X\) adalah matriks data berukuran \(m \times n\), maka vektor rata-rata:
\[ \bar{x} = \begin{pmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{pmatrix} ,\quad \bar{x}_j = \frac{1}{n}\sum_{i=1}^n x_{ij}, \; j=1,\dots,p \]
Matriks kovarians digunakan untuk menunjukkan sebaran suatu data. Nilai pada diagonal utamanya berisi varians dari masing-masing variabel, sedangkan elemen di luar diagonal utama menyatakan kovarians antar variabel.
\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^\top \]
atau dalam bentuk matriks:\
\[ S = \begin{pmatrix} 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{pmatrix} \]
Matriks korelasi menunjukkan hubungan linier antar variabel dengan skala baku (antara -1 dan 1). Nilai diagonal utama selalu 1. \[ R = D^{-1} S D^{-1}, \quad D = \operatorname{diag}\!\big(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}\big) \]
Matriks standardisasi merupakan hasil transformasi data ke dalam bentuk z-score, sehingga tiap variabel memiliki rata-rata 0 dan varians 1. Tujuannya adalah agar variabel yang memiliki satuan atau skala berbeda bisa dibandingkan secara adil. Untuk data \(X\), matriks data terstandardisasi \(Z\):
\[ Z = (X - \mathbf{1}\bar{x}^\top) D_s^{-1} \]
dengan \(\mathbf{1}\) adalah vektor satuan, dan
\[ \quad D_s = \operatorname{diag}\!\big(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}\big) \]
Mengenai Jumlah Makanan Sehat (JS), Jam Olahraga (JO), dan Nilai Kebugaran (NK) anak-anak:
HealthyFood <- c(5, 8, 6, 7, 9)
ExerciseHours <- c(3, 4, 2, 5, 4)
FitnessScore <- c(75, 80, 70, 85, 78)
data_b <- as.matrix(cbind(HealthyFood, ExerciseHours, FitnessScore)); data_b
## HealthyFood ExerciseHours FitnessScore
## [1,] 5 3 75
## [2,] 8 4 80
## [3,] 6 2 70
## [4,] 7 5 85
## [5,] 9 4 78
vecRata <- matrix(c(
mean(HealthyFood),
mean(ExerciseHours),
mean(FitnessScore)
), ncol = 1)
vecRata
## [,1]
## [1,] 7.0
## [2,] 3.6
## [3,] 77.6
varkov <- (1/(nrow(data_b)-1)) * t(scale(data_b, scale = FALSE)) %*% scale(data_b, scale = FALSE)
varkov
## HealthyFood ExerciseHours FitnessScore
## HealthyFood 2.5 1.0 4.0
## ExerciseHours 1.0 1.3 6.3
## FitnessScore 4.0 6.3 31.3
Ds <- diag(sqrt(diag(varkov)))
korel <- solve(Ds) %*% varkov %*% solve(Ds)
korel
## [,1] [,2] [,3]
## [1,] 1.0000000 0.5547002 0.4521867
## [2,] 0.5547002 1.0000000 0.9876355
## [3,] 0.4521867 0.9876355 1.0000000
n <- nrow(data_b)
u <- matrix(1, n, 1)
xbar <- colMeans(data_b)
D <- scale(data_b, center = xbar, scale = FALSE) # data terpusat
S <- (1/(n-1)) * t(D) %*% D
Ds <- diag(sqrt(diag(S)))
R <- solve(Ds) %*% S %*% solve(Ds)
S
## HealthyFood ExerciseHours FitnessScore
## HealthyFood 2.5 1.0 4.0
## ExerciseHours 1.0 1.3 6.3
## FitnessScore 4.0 6.3 31.3
Ds
## [,1] [,2] [,3]
## [1,] 1.581139 0.000000 0.00000
## [2,] 0.000000 1.140175 0.00000
## [3,] 0.000000 0.000000 5.59464
R
## [,1] [,2] [,3]
## [1,] 1.0000000 0.5547002 0.4521867
## [2,] 0.5547002 1.0000000 0.9876355
## [3,] 0.4521867 0.9876355 1.0000000