Matriks adalah tabel angka yang disusun dalam baris dan kolom. Jika sebuah matriks memiliki \(m\) baris dan \(n\) kolom, ukuran (ordo) matriks tersebut ditulis \(m \times n\).
\[ A = \begin{bmatrix} 2 & -1 & 4 \\ 0 & 3 & 5 \\ 7 & 1 & -2 \end{bmatrix} \]
Matriks \(A\) di atas merupakan matriks persegi berordo \(3 \times 3\) yang terdiri dari 9 elemen. Setiap elemen matriks dituliskan sebagai \(a_{ij}\) dengan \(i\) menyatakan baris dan \(j\) menyatakan kolom. Sebagai contoh, \(a_{12} = -1\) menunjukkan elemen pada baris ke-1 dan kolom ke-2.
Dalam R, cara menuliskan matriks adalah dengan menggunakan fungsi
matrix()
. Argumen pentingnya adalah data, jumlah baris
(nrow
), jumlah kolom (ncol
), dan
byrow
untuk pola pengisian:
- Jika byrow = TRUE
, maka elemen akan diisi per baris
(row-wise).
- Jika byrow = FALSE
, maka elemen akan diisi per kolom
(column-wise), yang merupakan nilai default di R.
# Contoh matriks
X <- matrix(c(4,7,5,
1,3,4,
7,0,9), nrow = 3, ncol = 3, byrow = TRUE); X
## [,1] [,2] [,3]
## [1,] 4 7 5
## [2,] 1 3 4
## [3,] 7 0 9
Y <- matrix(c(3,1,6,
2,4,5,
8,3,6), nrow = 3, ncol = 3, byrow = TRUE); Y
## [,1] [,2] [,3]
## [1,] 3 1 6
## [2,] 2 4 5
## [3,] 8 3 6
Operasi penjumlahan matriks dilakukan dengan menjumlahkan elemen yang seposisi (baris dan kolom yang sama) antara dua matriks yang berordo sama. Secara umum:
\[ (A + B)_{ij} = a_{ij} + b_{ij} \]
Dalam R, penjumlahan matriks \(A\) dan \(B\) ditulis dengan perintah:
X + Y # X ditambah Y
## [,1] [,2] [,3]
## [1,] 7 8 11
## [2,] 3 7 9
## [3,] 15 3 15
Operasi pengurangan matriks mirip seperti penjumlahan, tetapi
menggunakan selisih elemen yang seposisi. Secara umum: \[
(A - B)_{ij} = a_{ij} - b_{ij}
\]
Dalam R, pengurangan matriks \(A\) dan
\(B\) ditulis dengan perintah:
X - Y # X dikurang Y
## [,1] [,2] [,3]
## [1,] 1 6 -1
## [2,] -1 -1 -1
## [3,] -1 -3 3
Operasi perkalian matriks hanya dapat dilakukan jika jumlah kolom matriks pertama sama dengan jumlah baris matriks kedua. Hasilnya berupa matriks baru dengan ukuran baris matriks pertama × kolom matriks kedua. Setiap elemen hasil \(c_{ij}\) diperoleh dengan menjumlahkan hasil kali elemen baris ke-\(i\) dari matriks pertama dengan elemen kolom ke-\(j\) dari matriks kedua:
\[ c_{ij} = \sum_{k=1}^n a_{ik} \cdot b_{kj} \]
dengan \(a_{ik}\) elemen matriks pertama dan \(b_{kj}\) elemen matriks kedua. Dalam R, perkalian matriks \(A\) dan \(B\) ditulis dengan perintah:
X %*% Y # X dikali Y
## [,1] [,2] [,3]
## [1,] 66 47 89
## [2,] 41 25 45
## [3,] 93 34 96
Y %*% X # Y dikali X
## [,1] [,2] [,3]
## [1,] 55 24 73
## [2,] 47 26 71
## [3,] 77 65 106
Perkalian skalar–matriks adalah operasi yang mengalikan setiap elemen suatu matriks dengan bilangan real \(k\). Jika matriks \(X = [x_{ij}]\) berukuran \(m \times n\), maka hasil kali skalar adalah
\[ M = kX = [k \cdot x_{ij}], \]
yang juga berukuran \(m \times n\). Demikian pula untuk matriks \(Y\):
\[ N = cY = [c \cdot y_{ij}]. \]
Berikut contoh perkalian matriks dengan skalar dalam R:
k = 3
c = 5
A = k * X; A # skalar k dikali matriks X
## [,1] [,2] [,3]
## [1,] 12 21 15
## [2,] 3 9 12
## [3,] 21 0 27
B = c * Y; B # skalar c dikali matriks Y
## [,1] [,2] [,3]
## [1,] 15 5 30
## [2,] 10 20 25
## [3,] 40 15 30
Invers matriks adalah suatu matriks yang jika dikalikan dengan matriks asalnya akan menghasilkan matriks identitas. Jika sebuah matriks \(A\) berukuran \(n \times n\) dan memiliki invers maka matriks tersebut disebut invertibel dan inversnya ditulis sebagai \(A^{-1}\). Hubungan yang berlaku adalah
\[ A \cdot A^{-1} = A^{-1} \cdot A = I, \]
\(I\) adalah matriks identitas berukuran \(n \times n\). Tidak semua matriks memiliki invers; hanya matriks persegi dengan determinan tidak sama dengan nol yang bisa diinverskan.
Dalam R, perhitungan invers matriks dilakukan dengan fungsi
solve()
.
inv_X = solve(X); inv_X #Invers X
## [,1] [,2] [,3]
## [1,] 0.1985294 -0.463235294 0.09558824
## [2,] 0.1397059 0.007352941 -0.08088235
## [3,] -0.1544118 0.360294118 0.03676471
inv_Y = solve(Y); inv_Y #Invers Y
## [,1] [,2] [,3]
## [1,] -0.08910891 -0.11881188 0.18811881
## [2,] -0.27722772 0.29702970 0.02970297
## [3,] 0.25742574 0.00990099 -0.09900990
Transpose matriks adalah operasi yang menukar baris menjadi kolom dan kolom menjadi baris dari suatu matriks. Jika \(A = [a_{ij}]\) adalah sebuah matriks berukuran \(m \times n\), maka transpose dari \(A\), yang ditulis \(A^T\), berukuran \(n \times m\).
Dalam R, transpose matriks dilakukan dengan fungsi
t()
.
transX = t(X); transX #Transpose Matriks X
## [,1] [,2] [,3]
## [1,] 4 1 7
## [2,] 7 3 0
## [3,] 5 4 9
transY = t(Y); transY #Transpose Matriks Y
## [,1] [,2] [,3]
## [1,] 3 2 8
## [2,] 1 4 3
## [3,] 6 5 6
Determinan adalah nilai skalar dari matriks persegi yang ditulis sebagai \(|A|\) atau \(det(A)\). Determinan dapat menunjukkan apakah suatu matriks invertibel \((det(A) \neq 0)\) dan juga berfungsi sebagai faktor skala pada transformasi linier.
Dalam R, perhitungan determinan matriks dilakukan dengan fungsi
det()
.
det(X) #Determinan X
## [1] 136
det(Y) #Determinan Y
## [1] -101
Dalam R, dapat membuat matriks dengan menggunakan fungsi
matrix()
. Fungsi ini membutuhkan beberapa argumen penting,
yaitu data yang ingin dimasukkan, jumlah baris (nrow
), dan
jumlah kolom (ncol
). Jika data yang diberikan berupa urutan
bilangan, maka elemen matriks akan terisi sesuai urutan tersebut. Secara
default, pengisian dilakukan per kolom terlebih dahulu, dari atas ke
bawah, lalu berlanjut ke kolom berikutnya.
A <- matrix(21:40, nrow=4, ncol=5) ; A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
Untuk membuat matriks di R, kita bisa juga membentuknya dari sebuah vektor. Vektor adalah kumpulan elemen data yang disusun dalam satu dimensi. Dengan memanfaatkan vektor, kita dapat menentukan sendiri angka-angka yang ingin dimasukkan ke dalam matriks, kemudian mengatur bagaimana elemen tersebut akan ditempatkan ke dalam baris dan kolom.
b <- c(3,5,2,1,5,8,4,4,9,2,12,11)
B <- matrix(b, nrow=3, ncol=4, byrow=TRUE) ; B
## [,1] [,2] [,3] [,4]
## [1,] 3 5 2 1
## [2,] 5 8 4 4
## [3,] 9 2 12 11
Pada contoh tersebut, kita terlebih dahulu membuat sebuah vektor bernama b yang berisi kumpulan angka acak. Selanjutnya, vektor tersebut digunakan sebagai data untuk membentuk matriks \(B\) berukuran \(3 \times 4\).
Selain menggunakan deret angka berurutan atau vektor biasa, dalam R
juga dapat membuat matriks dengan menambahkan nama pada baris dan kolom.
Pemberian nama ini agar elemen-elemen matriks lebih mudah dikenali,
terutama ketika matriks tersebut mewakili data dengan kategori tertentu.
Penamaan dilakukan dengan argumen dimnames
di dalam fungsi
matrix()
, yang menerima daftar berisi nama baris dan nama
kolom. Dengan begitu, hasil akhir matriks tidak hanya berupa angka,
tetapi juga memiliki keterangan yang jelas di setiap sisi.
sel <- c(15,9,27,18)
nama_kolom <- c("C1", "C2")
nama_baris <- c("R1", "R2")
C <- matrix(sel, nrow=2, ncol=2,
byrow=TRUE, dimnames=list(nama_baris,
nama_kolom)) ; C
## C1 C2
## R1 15 9
## R2 27 18
Pada contoh ini, kita membuat sebuah vektor sel yang berisi angka 15,
9, 27, dan 18. Vektor tersebut kemudian disusun ke dalam matriks \(C\) dengan ukuran \(2 \times 2\). Karena digunakan argumen
byrow=TRUE
, maka angka 15 akan ditempatkan pada baris
pertama kolom pertama, angka 9 di sebelahnya, lalu berlanjut ke baris
kedua dengan angka 27 dan 18. Selanjutnya, kita mendefinisikan nama
kolom melalui nama_kolom <- c("C1", "C2")
dan nama baris
melalui nama_baris <- c("R1", "R2")
. Nama-nama ini
kemudian digabungkan dalam argumen
dimnames=list(nama_baris, nama_kolom)
sehingga hasil
matriks \(C\) menampilkan label \(R1\) dan \(R2\) di sisi kiri sebagai penanda baris,
serta label \(C1\) dan \(C2\) di bagian atas sebagai penanda
kolom.
Setelah sebuah matriks dibuat, sering kali kita hanya membutuhkan
sebagian isinya—misalnya satu baris, satu kolom, atau elemen tertentu.
Di R, bagian matriks diakses dengan tanda kurung siku [ ]
menggunakan urutan [baris, kolom]. Jika bagian baris atau kolom
dibiarkan kosong, maka R mengambil seluruh baris atau seluruh kolom.
Dengan aturan ini, kita bisa mengekstrak bagian mana pun dari matriks
sesuai kebutuhan.
A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
A[,2] # Kolom 2
## [1] 25 26 27 28
A[3,] # Baris 3
## [1] 23 27 31 35 39
A[3,2] # Sel(3, 2)
## [1] 27
A[c(1,3),2] # Sel(1,2) dan sel(3,2)
## [1] 25 27
A[,1:3] # kolom(1,2,3)
## [,1] [,2] [,3]
## [1,] 21 25 29
## [2,] 22 26 30
## [3,] 23 27 31
## [4,] 24 28 32
A[2:4,] # baris(2,3,4)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 22 26 30 34 38
## [2,] 23 27 31 35 39
## [3,] 24 28 32 36 40
Sebagai ilustrasi, saat kita mengetik A
, R menampilkan
seluruh isi matriks \(A\). Jika hanya
ingin mengambil kolom tertentu—misalnya kolom ke-2 gunakan
A[, 2]
. Pada perintah ini bagian baris dikosongkan,
sehingga semua baris diambil tetapi terbatas pada kolom ke-2.
Sebaliknya, untuk menampilkan seluruh isi baris ke-3 gunakan
A[3, ]
.
Kita juga bisa mengambil satu elemen spesifik. Contohnya,
A[3, 2]
mengakses elemen pada baris ke-3 dan kolom ke-2.
Bila ingin mengambil beberapa elemen dalam satu kolom sekaligus,
misalnya baris ke-1 dan ke-3 pada kolom ke-2, tulis
A[c(1, 3), 2]
. Vektor c(1, 3) menunjukkan indeks baris yang
dipilih.
Selain itu, beberapa kolom atau baris dapat diambil sekaligus.
Perintah A[, 1:3]
mengembalikan semua baris untuk kolom 1
hingga 3 (submatriks). Sementara A[2:4, ]
mengembalikan
semua kolom untuk baris 2 hingga 4.
Nilai eigen (eigenvalue) adalah bilangan skalar yang menyatakan seberapa besar sebuah vektor diregangkan atau diperkecil (serta bisa berubah arah) oleh suatu transformasi linier, sedangkan vektor eigen (eigenvector) adalah vektor tak nol yang arahnya tetap—yang berubah hanya skala panjangnya—ketika dikenai transformasi tersebut.
Dengan begitu, bila matriks \(A\) mengalikan vektor \(v\) dan hasilnya tetap sejajar dengan \(v\), maka \(v\) adalah vektor eigen dari \(A\), dan skalar pengalinya \(\lambda\) disebut nilai eigennya. Secara matematis ditulis:
\[ A v = \lambda v \]
eigX = eigen(X); eigX
## eigen() decomposition
## $values
## [1] 14.3615808+0.000000i 0.8192096+2.966244i 0.8192096-2.966244i
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.5769188+0i 0.70042184+0.0000000i 0.70042184+0.0000000i
## [2,] 0.3159582+0i 0.06007756+0.4339872i 0.06007756-0.4339872i
## [3,] 0.7532165+0i -0.52968760-0.1920576i -0.52968760+0.1920576i
eigY = eigen(Y); eigY
## eigen() decomposition
## $values
## [1] 13.255016 -2.890842 2.635826
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.4741089 -0.6512006 0.2956999
## [2,] -0.4956093 -0.3127301 -0.9450319
## [3,] -0.7277308 0.6914750 0.1395576
eigvalX = eigX$values; eigvalX
## [1] 14.3615808+0.000000i 0.8192096+2.966244i 0.8192096-2.966244i
eigvalY = eigY$values; eigvalY
## [1] 13.255016 -2.890842 2.635826
eigvecX = eigX$vectors; eigvecX
## [,1] [,2] [,3]
## [1,] 0.5769188+0i 0.70042184+0.0000000i 0.70042184+0.0000000i
## [2,] 0.3159582+0i 0.06007756+0.4339872i 0.06007756-0.4339872i
## [3,] 0.7532165+0i -0.52968760-0.1920576i -0.52968760+0.1920576i
eigvecY = eigY$vectors; eigvecY
## [,1] [,2] [,3]
## [1,] -0.4741089 -0.6512006 0.2956999
## [2,] -0.4956093 -0.3127301 -0.9450319
## [3,] -0.7277308 0.6914750 0.1395576
Dalam R, nilai dan vektor eigen bisa dihitung memakai fungsi
eigen()
. Contoh: untuk matriks X, jalankan
eigX <- eigen(X)
. Objek ini sudah berisi dua komponen,
yakni nilai eigen dan vektor eigennya. Cara yang sama berlaku untuk
Y
(eigY <- eigen(Y))
.
Jika ingin mengaksesnya terpisah:
- nilai eigen: eigX$values
(atau
eigvalX <- eigX$values
), eigY$values
-
vektor eigen: eigX$vectors
(atau
eigvecX <- eigX$vectors
), eigY$vectors
.
Singkatnya, eigen()
mempermudah kita memperoleh keduanya
sekaligus, dan memungkinkan pengambilan masing-masing komponen sesuai
kebutuhan analisis.
Singular Value Decomposition (SVD) memecah sebuah matriks \(A\) berukuran \(m\times n\) menjadi tiga bagian, yaitu:
\[A = U \Sigma V^T\]
Dengan \(U\) matriks ortogonal berukuran \(m\times m\), \(\Sigma\) matriks diagonal berukuran \(m\times n\) yang memuat singular values, dan \(V\) matriks ortogonal berukuran \(n\times n\) (sehingga \(V^T\) adalah transposenya). Nilai-nilai singular pada \(\Sigma\) sama dengan akar kuadrat dari nilai eigen \(A^TA\) atau \(AA^T\).
SVD dipakai luas, baik teoritis maupun praktis: menjadi dasar PCA untuk reduksi dimensi tanpa banyak kehilangan informasi, serta berguna pada kompresi citra, pengolahan sinyal, sistem rekomendasi, deteksi pola, hingga menstabilkan penyelesaian sistem persamaan linier yang buruk kondisinya. Dengan memecah \(A\) ke bentuk ini, struktur laten data menjadi lebih mudah dianalisis dan dimanfaatkan.
library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
a <- matrix(c(5,-3,6,2,-4,8,-2,5,-1,7,3,9), 4, 3, byrow=TRUE)
a
## [,1] [,2] [,3]
## [1,] 5 -3 6
## [2,] 2 -4 8
## [3,] -2 5 -1
## [4,] 7 3 9
svd_result <- svd(a)
singular_value <- svd_result$d ; singular_value
## [1] 16.07076 7.41936 3.11187
U <- svd_result$u ; 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
V <- svd_result$v ; 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
Pada syntax di atas, terlebih dulu dipanggil pustaka MASS. Lalu
dibentuk matriks a berukuran \(4\times3\) menggunakan
matrix(c(...), 4, 3, byrow = TRUE)
, sehingga datanya diisi
per baris. Setelah a
siap, dekomposisi nilai singular
dihitung dengan svd(a)
dan hasilnya disimpan ke
svd_result
.
Keluaran SVD terdiri dari tiga bagian utama: singular values pada
svd_result$d
(mengisi diagonal \(\Sigma\)), matriks \(U\) pada svd_result$u
, dan
matriks \(V\) pada
svd_result$v
. Dengan informasi ini, kita mendapatkan
faktorisasi lengkap \(A =
U\,\Sigma\,V^T\).
Dalam analisis multivariat, jarak dipakai untuk menilai seberapa mirip atau berbeda dua objek berdasarkan banyak variabel sekaligus—bukan sekadar satu nilai saja. Ukuran yang sering digunakan meliputi Euclidean, Manhattan, Chebyshev, Minkowski, dan Mahalanobis.
Untuk mempermudah pembacaan, hasil perhitungan jarak antar seluruh pasangan observasi biasanya dirangkum dalam matriks jarak (distance matrix) berukuran \(n\times n\). Matriks ini simetris, dengan elemen \(d_{ij}\) menyatakan jarak antara observasi ke-\(i\) dan ke-\(j\). Elemen diagonal selalu 0 karena jarak suatu objek terhadap dirinya sendiri adalah nol.
set.seed(321)
ss <- sample(1:50, 15)
df <- USArrests[ss, ]
df.scaled <- scale(df); df.scaled
## Murder Assault UrbanPop Rape
## Wyoming -0.3721741 -0.02296746 -0.3418930 -0.62039386
## Illinois 0.4221896 1.02244775 1.2520675 0.62633064
## Mississippi 1.6799322 1.14124493 -1.4507350 -0.39776448
## Kansas -0.5486994 -0.56943449 0.0739228 -0.26418686
## New York 0.5766492 1.08184634 1.4599754 0.93801176
## Kentucky 0.2677300 -0.64071280 -0.8963140 -0.51650015
## Oklahoma -0.4163054 -0.14176464 0.2125281 0.03265231
## Hawaii -0.7031590 -1.38913505 1.2520675 0.06233622
## Missouri 0.1132704 0.17898775 0.3511333 1.24969289
## New Mexico 0.6428462 1.45011760 0.3511333 1.82852926
## Louisiana 1.5254725 1.02244775 0.0739228 0.35917539
## South Dakota -1.0341439 -0.91394632 -1.3814324 -1.03596869
## Iowa -1.3871944 -1.27033787 -0.5498008 -1.25859806
## North Dakota -1.6961136 -1.40101477 -1.4507350 -1.85227639
## Texas 0.9296998 0.45222127 1.0441596 0.84896001
## attr(,"scaled:center")
## Murder Assault UrbanPop Rape
## 8.486667 162.933333 64.933333 19.780000
## attr(,"scaled:scale")
## Murder Assault UrbanPop Rape
## 4.531929 84.177081 14.429467 6.737655
Pada syntax di atas, Pada cuplikan kode tersebut dilakukan beberapa
langkah:
- set.seed(321)
menetapkan seed
generator
bilangan acak agar proses pengacakan bisa diduplikasi—hasilnya akan sama
setiap kali kode dijalankan. - ss <- sample(1:50, 15)
mengambil 15 indeks acak dari 1 sampai 50. -
df <- USArrests[ss, ]
memilih 15 baris dari dataset
bawaan R USArrests sesuai indeks pada ss
, sehingga
terbentuk subset data. - df.scaled <- scale(df)
men-standardisasi setiap variabel: tiap nilai dikurangi dengan
rata-ratanya lalu dibagi simpangan bakunya, sehingga setiap kolom
memiliki rerata 0 dan simpangan baku 1.
Standardisasi ini penting dalam analisis multivariat supaya semua variabel berada pada skala yang sebanding dan tidak ada variabel yang “menguasai” perhitungan jarak hanya karena perbedaan satuan.
Jarak Euclidean merupakan ukuran jarak yang paling umum digunakan dalam analisis multivariat. Secara sederhana, jarak Euclidean adalah panjang garis lurus antara dua titik dalam ruang berdimensi banyak. Jika terdapat dua buah observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\) yang masing-masing memiliki \(p\) variabel, maka jarak Euclidean di antara keduanya dapat dihitung dengan rumus:
\[ d(x, y) = \sqrt{ \sum_{i=1}^p (x_i - y_i)^2 } \]
Dengan kata lain, rumus ini menjumlahkan selisih kuadrat dari setiap pasangan variabel, kemudian diakarkan. Jarak Euclidean akan selalu bernilai non-negatif, dan bernilai nol hanya jika kedua observasi identik.
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
dist.eucl <- dist(df.scaled, method = "euclidean"); dist.eucl
## Wyoming Illinois Mississippi Kansas New York Kentucky
## Illinois 2.4122476
## Mississippi 2.6164146 3.1543527
## Kansas 0.7934567 2.3786048 3.1993198
## New York 2.7921742 0.4095812 3.3878156 2.7128511
## Kentucky 1.0532156 2.9515362 2.3433244 1.2948587 3.2757206
## Oklahoma 0.8659748 1.8685718 2.9986711 0.5547563 2.2043102 1.4993175
## Hawaii 2.2322175 2.7203365 4.4270510 1.4800030 2.9246694 2.5403456
## Missouri 2.0625111 1.4167282 3.0563398 1.8349434 1.5351057 2.3176129
## New Mexico 3.1109091 1.5775154 3.0617092 3.1551035 1.4705638 3.4011133
## Louisiana 2.4137967 1.6360410 1.7133330 2.6879097 1.7776353 2.4609320
## South Dakota 1.5765126 3.9457686 3.4644086 1.7515852 4.3067435 1.5082173
## Iowa 1.7426214 3.9154083 4.0958166 1.6038155 4.2724405 1.9508929
## North Dakota 2.5296038 4.8794481 4.4694938 2.6181473 5.2524274 2.5546862
## Texas 2.4496576 0.8218968 2.9692463 2.3259192 0.8377979 2.6949264
## Oklahoma Hawaii Missouri New Mexico Louisiana South Dakota
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii 1.6491638
## Missouri 1.3724911 2.3123720
## New Mexico 2.6268378 3.7154012 1.4937447
## Louisiana 2.2916633 3.5012381 1.8909275 1.7882330
## South Dakota 2.1588538 2.9115203 3.2767510 4.4281177 3.7902169
## Iowa 2.1130016 2.3395756 3.3845451 4.6758935 4.0922753 0.9964108
## North Dakota 3.0891779 3.4578871 4.3173165 5.5131433 4.8442635 1.1604313
## Texas 1.8768374 2.5920693 1.1756214 1.5867966 1.3643137 3.8935265
## Iowa North Dakota
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii
## Missouri
## New Mexico
## Louisiana
## South Dakota
## Iowa
## North Dakota 1.1298867
## Texas 3.9137858 4.8837032
fviz_dist(dist.eucl)
Perintah
dist.eucl <- dist(df.scaled, method = "euclidean")
menghitung jarak Euclidean untuk setiap pasangan observasi pada
df.scaled
. Output berupa objek jarak (dapat dipandang
sebagai matriks jarak) yang memuat nilai antar-baris. Semakin kecil
nilainya, dua observasi semakin mirip (posisinya berdekatan di ruang
multidimensi); semakin besar, keduanya makin berbeda.
Fungsi fviz_dist(dist.eucl)
lalu memetakan jarak
tersebut ke dalam heatmap. Umumnya, warna terang menandakan
jarak kecil (kemiripan tinggi), sedangkan warna gelap menandakan jarak
besar (kemiripan rendah). Visualisasi ini membantu mengenali kelompok
observasi yang berdekatan (calon klaster) serta titik yang menyimpang
jauh (calon outlier).
Inti interpretasi:
a. Sekumpulan observasi dengan nilai jarak Euclidean rendah satu sama
lain cenderung membentuk klaster.
b. Observasi yang memiliki jarak tinggi terhadap banyak observasi lain
berpotensi menjadi outlier.
Jarak Chebyshev mengukur jarak antara dua titik dengan melihat selisih terbesar di antara seluruh dimensinya. Jika terdapat dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\), maka jarak Chebyshev didefinisikan sebagai:
\[ d(x, y) = \max_i |x_i - y_i| \]
Artinya, jarak Chebyshev melihat dimensi mana yang memiliki perbedaan terbesar, dan itulah yang dijadikan ukuran jarak. Karena itu, metrik ini juga dikenal dengan nama jarak maksimum (maximum metric) atau jarak papan catur (chessboard distance), karena mencerminkan langkah terpanjang yang harus diambil dalam satu arah untuk mencapai titik lain.
dist.cheb <- dist(df.scaled, method = "maximum"); dist.cheb
## Wyoming Illinois Mississippi Kansas New York Kentucky
## Illinois 1.5939604
## Mississippi 2.0521063 2.7028025
## Kansas 0.5464670 1.5918822 2.2286315
## New York 1.8018683 0.3116811 2.9107104 1.6512808
## Kentucky 0.6399041 2.1483815 1.7819577 0.9702368 2.3562894
## Oklahoma 0.6530462 1.1642124 2.0962376 0.4276699 1.2474473 1.1088421
## Hawaii 1.5939604 2.4115828 2.7028025 1.1781447 2.4709814 2.1483815
## Missouri 1.8700867 0.9009342 1.8018683 1.5138797 1.1088421 1.7661930
## New Mexico 2.4489231 1.2021986 2.2262937 2.0927161 1.1088421 2.3450294
## Louisiana 1.8976467 1.1781447 1.5246578 2.0741719 1.3860526 1.6631605
## South Dakota 1.0395394 2.6334999 2.7140760 1.4553552 2.8414078 1.3018739
## Iowa 1.2473704 2.2927856 3.0671266 0.9944112 2.3521842 1.6549244
## North Dakota 1.3780473 2.7028025 3.3760458 1.5880895 2.9107104 1.9638436
## Texas 1.4693539 0.5702265 2.4948946 1.4783991 0.6296251 1.9404736
## Oklahoma Hawaii Missouri New Mexico Louisiana South Dakota
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii 1.2473704
## Missouri 1.2170406 1.5681228
## New Mexico 1.7958770 2.8392526 1.2711298
## Louisiana 1.9417780 2.4115828 1.4122022 1.4693539
## South Dakota 1.5939604 2.6334999 2.2856616 2.8644979 2.5596164
## Iowa 1.2912504 1.8018683 2.5082909 3.0871273 2.9126670 0.8316315
## North Dakota 1.8849287 2.7028025 3.1019693 3.6808057 3.2215862 0.8163077
## Texas 1.3460052 1.8413563 0.8164294 0.9978963 0.9702368 2.4255920
## Iowa North Dakota
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii
## Missouri
## New Mexico
## Louisiana
## South Dakota
## Iowa
## North Dakota 0.9009342
## Texas 2.3168942 2.7012364
fviz_dist(dist.cheb)
Perintah di atas menghitung jarak Chebyshev untuk setiap pasangan
baris pada df.scaled
dan memvisualisasikannya sebagai
heatmap. Nilai kecil berarti tidak ada perbedaan ekstrem di
variabel mana pun (objek mirip), sedangkan nilai besar menunjukkan ada
satu variabel yang sangat membedakan kedua observasi.
Interpretasinya:
Dua observasi bisa serupa pada banyak variabel, tetapi satu perbedaan yang besar saja sudah membuat jarak Chebyshev tinggi.
Cocok saat fokus analisis adalah perbedaan maksimum antar-variabel, bukan rata-rata selisih.
Jarak Manhattan (alias taxicab distance atau norma L1) mengukur jarak dua titik dengan menjumlahkan selisih absolut tiap variabel. Ibarat jalan kota berbentuk grid, perpindahan hanya ke arah horizontal/vertikal, bukan diagonal.
Secara matematis, jika terdapat dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\), maka jarak Manhattan didefinisikan sebagai:
\[ d(x, y) = \sum_{i=1}^p |x_i - y_i| \]
Artinya, jarak Manhattan menjumlahkan seluruh perbedaan absolut pada setiap variabel antar dua observasi.
dist.man <- dist(df.scaled, method = "manhattan"); dist.man
## Wyoming Illinois Mississippi Kansas New York Kentucky
## Illinois 4.6804639
## Mississippi 4.5477901 5.1034373
## Kansas 1.4950151 4.6314334 5.5975464
## New York 5.4139111 0.7334472 5.4091682 5.3648806
## Kentucky 1.9159642 5.1088324 3.8673166 2.1102578 5.8422796
## Oklahoma 1.3703957 3.6359252 5.4729270 0.9955082 4.3693724 2.8409781
## Hawaii 3.9738430 4.1009258 8.0763743 2.4788279 4.8343730 4.4465291
## Missouri 3.2505127 2.6766756 5.9782446 3.2014823 2.7867606 3.9878005
## New Mexico 5.6300548 2.7514592 5.3741207 5.5810243 2.4338278 6.0584233
## Louisiana 4.3384469 2.5485829 2.5548545 4.2894164 2.9731109 4.7668154
## South Dakota 3.0080629 7.6885267 5.4767741 3.0570933 8.4219740 2.5796943
## Iowa 3.1085028 7.7889667 7.2404771 3.1575333 8.5224139 3.3731605
## North Dakota 5.0427114 9.7231753 7.3728174 5.0917419 10.4566225 4.6143429
## Texas 4.6324690 1.5082739 5.1808752 4.5834386 1.4875431 5.0608376
## Oklahoma Hawaii Missouri New Mexico Louisiana
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii 2.6034473
## Missouri 2.2059740 4.4728430
## New Mexico 4.5855161 6.8523850 2.3795420
## Louisiana 3.5711187 6.1151982 3.4233902 3.0568606
## South Dakota 4.0526016 4.5379784 6.2585756 8.6381176 7.3465098
## Iowa 4.1530415 3.9256352 6.3590155 8.7385576 7.4469497
## North Dakota 6.0872501 5.6222495 8.2932241 10.6727662 9.3811583
## Texas 3.5879303 4.4687467 2.1834220 2.9573454 2.6260207
## South Dakota Iowa North Dakota
## Illinois
## Mississippi
## Kansas
## New York
## Kentucky
## Oklahoma
## Hawaii
## Missouri
## New Mexico
## Louisiana
## South Dakota
## Iowa 1.7637030
## North Dakota 2.0346485 1.9342086
## Texas 7.6405319 7.7409718 9.6751804
fviz_dist(dist.man)
Perintah di atas menghitung jarak Manhattan antar setiap pasangan
baris pada df.scaled
. Karena yang dijumlahkan adalah
seluruh selisih absolut, nilainya mencerminkan akumulasi perbedaan di
semua dimensi. Hasilnya dapat dilihat sebagai matriks jarak; angka kecil
menandakan dua observasi mirip, angka besar menandakan perbedaan total
yang besar. fviz_dist()
memvisualisasikannya sebagai
heatmap biasanya lebih terang = jarak kecil, lebih gelap =
jarak besar.
Interpretasinya:
Perbedaan kecil tetapi banyak (di banyak variabel) bisa tetap menghasilkan jarak Manhattan besar karena semuanya dijumlahkan.
Beberapa perbedaan besar pada sedikit variabel juga akan membuat jarak meningkat nyata.
Gunakan metrik ini bila fokus pada total perbedaan kumulatif, bukan sekadar selisih terbesar (Chebyshev) atau jarak garis lurus (Euclidean).
Jarak Mahalanobis mengukur kedekatan dua observasi dengan memperhitungkan korelasi antar variabel. Berbeda dari Euclidean maupun Manhattan yang menganggap variabel saling bebas, metrik ini menyesuaikan jarak menggunakan struktur kovarian data. Karena itu, ia efektif untuk mendeteksi outlier multivariat dan membandingkan kemiripan saat variabel saling berkaitan.
Secara matematis, jika \(x\) adalah vektor observasi dan \(\mu\) adalah vektor rata-rata, maka jarak Mahalanobis didefinisikan sebagai:
\[ D_M(x) = \sqrt{ (x - \mu)^T S^{-1} (x - \mu) } \]
di mana \(S^{-1}\) adalah invers dari matriks kovarian \(S\). Untuk jarak antar dua observasi \(x\) dan \(y\), formulanya ditulis sebagai:
\[ D_M(x, y) = \sqrt{ (x - y)^T S^{-1} (x - y) } \]
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
## Warning: package 'lpSolve' was built under R version 4.4.2
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## 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(df.scaled); dist.mah
## Wyoming Illinois Mississippi Kansas New York Kentucky
## Wyoming 0.000000 1.7186109 2.820779 1.4195095 1.8695558 2.867847
## Illinois 1.718611 0.0000000 3.658323 2.2905255 0.4722069 3.878642
## Mississippi 2.820779 3.6583235 0.000000 3.2139075 3.6566922 2.544477
## Kansas 1.419510 2.2905255 3.213907 0.0000000 2.1522535 2.048031
## New York 1.869556 0.4722069 3.656692 2.1522535 0.0000000 3.698342
## Kentucky 2.867847 3.8786421 2.544477 2.0480310 3.6983422 0.000000
## Oklahoma 1.146496 1.8980286 3.237573 0.6499978 1.7772007 2.505941
## Hawaii 3.466671 3.6449604 4.722203 2.2108491 3.3748818 2.753554
## Missouri 3.198071 3.6796400 3.956918 2.2592572 3.3618939 2.642756
## New Mexico 3.281318 3.5101406 4.057258 3.1016653 3.2869855 3.870023
## Louisiana 2.284940 2.5550539 1.688058 2.2700723 2.4136664 2.119635
## South Dakota 1.826205 3.3564158 3.087365 1.6274307 3.3404110 2.261154
## Iowa 1.327907 2.6329606 3.559587 1.1128197 2.6839965 2.621704
## North Dakota 1.582582 3.1919907 3.553572 1.9466491 3.3317039 3.040465
## Texas 2.540604 2.4769381 3.093919 1.7462066 2.1399545 2.108949
## Oklahoma Hawaii Missouri New Mexico Louisiana South Dakota
## Wyoming 1.1464956 3.466671 3.198071 3.281318 2.284940 1.826205
## Illinois 1.8980286 3.644960 3.679640 3.510141 2.555054 3.356416
## Mississippi 3.2375727 4.722203 3.956918 4.057258 1.688058 3.087365
## Kansas 0.6499978 2.210849 2.259257 3.101665 2.270072 1.627431
## New York 1.7772007 3.374882 3.361894 3.286985 2.413666 3.340411
## Kentucky 2.5059414 2.753554 2.642756 3.870023 2.119635 2.261154
## Oklahoma 0.0000000 2.705865 2.203038 2.660216 2.350208 1.672866
## Hawaii 2.7058650 0.000000 3.193764 4.645567 3.383255 3.551072
## Missouri 2.2030382 3.193764 0.000000 1.836797 3.256319 2.505784
## New Mexico 2.6602159 4.645567 1.836797 0.000000 3.676879 3.026024
## Louisiana 2.3502077 3.383255 3.256319 3.676879 0.000000 3.021642
## South Dakota 1.6728664 3.551072 2.505784 3.026024 3.021642 0.000000
## Iowa 1.3299426 2.790197 3.145245 3.792086 2.954252 1.518854
## North Dakota 1.9813596 3.780966 3.590548 3.950259 3.434074 1.304743
## Texas 1.9635201 2.082005 2.576037 3.501666 1.527269 3.090805
## Iowa North Dakota Texas
## Wyoming 1.327907 1.582582 2.540604
## Illinois 2.632961 3.191991 2.476938
## Mississippi 3.559587 3.553572 3.093919
## Kansas 1.112820 1.946649 1.746207
## New York 2.683996 3.331704 2.139954
## Kentucky 2.621704 3.040465 2.108949
## Oklahoma 1.329943 1.981360 1.963520
## Hawaii 2.790197 3.780966 2.082005
## Missouri 3.145245 3.590548 2.576037
## New Mexico 3.792086 3.950259 3.501666
## Louisiana 2.954252 3.434074 1.527269
## South Dakota 1.518854 1.304743 3.090805
## Iowa 0.000000 1.045923 2.734770
## North Dakota 1.045923 0.000000 3.563193
## Texas 2.734770 3.563193 0.000000
dist.mah_matrix <- as.matrix(dist.mah)
Pada syntax ini,mahalanobis.dist()
(paket StatMatch)
menghitung jarak Mahalanobis berpasangan untuk semua baris pada
df.scaled
. Objek hasilnya kemudian diubah ke matriks biasa
dengan as.matrix()
agar mudah ditinjau. Setiap elemen \(d_{ij}\) dalam matriks tersebut
merepresentasikan jarak Mahalanobis antara observasi ke-\(i\) dan observasi ke-\(j\).
Interpretasinya:
Jika \(d_{ij}\) bernilai kecil, berarti observasi ke-\(i\) dan ke-\(j\) mirip, bahkan setelah menyesuaikan efek korelasi antar variabel.
Jika \(d_{ij}\) bernilai besar, berarti kedua observasi tersebut berbeda signifikan, bisa jadi salah satunya merupakan outlier multivariat.
Elemen diagonal dari matriks selalu bernilai nol, karena jarak setiap observasi dengan dirinya sendiri adalah nol.
Jarak Minkowski adalah ukuran jarak yang merupakan generalisasi dari jarak Euclidean dan Manhattan. Ukuran ini menggunakan parameter \(q\) (atau \(p\)) untuk menyesuaikan bentuk perhitungannya.
Secara matematis, jarak Minkowski antara dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\) didefinisikan sebagai:
\[ d(x,y) = \left( \sum_{i=1}^p |x_i - y_i|^q \right)^{1/q} \]
Dengan demikian, Minkowski dapat dianggap sebagai ukuran jarak yang fleksibel.
set.seed(123)
# Data random (5 observasi dengan 3 variabel)
data <- matrix(runif(15, min = 1, max = 10), nrow = 5, ncol = 3)
colnames(data) <- c("X1", "X2", "X3")
print("Data random:")
## [1] "Data random:"
print(data)
## X1 X2 X3
## [1,] 3.588198 1.410008 9.611500
## [2,] 8.094746 5.752949 5.080007
## [3,] 4.680792 9.031771 7.098136
## [4,] 8.947157 5.962915 6.153701
## [5,] 9.464206 5.109533 1.926322
# Tentukan dua titik yang akan dihitung jaraknya
p1 <- data[1, ];p1
## X1 X2 X3
## 3.588198 1.410008 9.611500
p2 <- data[2, ];p2
## X1 X2 X3
## 8.094746 5.752949 5.080007
# Fungsi jarak Minkowski
minkowski_distance <- function(x, y, p) {
sum(abs(x - y)^p)^(1/p)
}
Interpretasi perhitungan jarak Minkowski di R:
set.seed(123)
digunakan untuk mengatur seed agar
hasil data acak dapat direproduksi.
data <- matrix(runif(15, min = 1, max = 10), nrow = 5, ncol = 3)
menghasilkan sebuah matriks acak berukuran 5 observasi \(\times\) 3 variabel dengan nilai antara 1
hingga 10. Kolom dinamai X1
, X2
, dan
X3
.
p1 <- data[1, ]
dan
p2 <- data[2, ]
memilih observasi pertama dan observasi
kedua dari dataset sebagai dua titik yang akan dihitung
jaraknya.
Dibuat fungsi
minkowski_distance <- function(x, y, p) { sum(abs(x - y)^p)^(1/p) }
.
Fungsi ini menghitung jarak Minkowski antara dua vektor x
dan y
, dengan parameter pangkat p
.
Dalam analisis multivariat, vektor rata-rata adalah vektor yang memuat nilai rata-rata untuk setiap variabel pada sebuah dataset. Untuk data dengan \(n\) observasi dan \(p\) variabel, vektor rata-rata ditulis:
\[ \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} \]
dengan \(\bar{x}_j\) menyatakan rata-rata dari variabel ke-\(j\).
Secara geometris, vektor rata-rata merepresentasikan titik pusat (center) dari seluruh pengamatan pada ruang berdimensi \(p\). Pada 2 dimensi, ia adalah titik dengan koordinat berupa rata-rata sumbu \(x\) dan rata-rata sumbu \(y\); pada dimensi lebih tinggi, ia berperan sebagai centroid.
Perannya penting antara lain untuk:
1. Dasar perhitungan jarak Mahalanobis (jarak sering diukur relatif
terhadap pusat data),
2. Pusat klaster pada algoritma clustering (mis. K-Means),
3. Komponen kunci dalam kovarian serta analisis PCA.
Contoh berikut menggunakan data 10 ekor kadal dengan tiga variabel pengukuran:
BB: Berat badan (gram)
PM: Panjang moncong (mm)
RTB: Rata-rata panjang tubuh (mm)
Data dimasukkan ke dalam bentuk vektor di R dengan perintah:
BB = c(6.2,11.5,8.7,10.1,7.8,6.9,12.0,3.1,14.8,9.4)
PM = c(61,73,68,70,64,60,76,49,84,71)
RTB = c(115,138,127,123,131,120,143,95,160,128)
lizard = as.matrix(cbind(BB,PM,RTB)); lizard
## BB PM 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
## [6,] 6.9 60 120
## [7,] 12.0 76 143
## [8,] 3.1 49 95
## [9,] 14.8 84 160
## [10,] 9.4 71 128
Matriks (vektor) rata-rata merangkum rata-rata tiap variabel pada data kita. Untuk tiga variabel BB, PM, dan RTB, hasilnya adalah vektor berukuran \(3 \times 1\).
Secara matematis, matriks rata-rata dituliskan sebagai:
\[ \bar{x} = \begin{bmatrix} \bar{BB} \\ \bar{PM} \\ \bar{RTB} \end{bmatrix} = \begin{bmatrix} \frac{1}{n}\sum_{i=1}^n BB_i \\ \frac{1}{n}\sum_{i=1}^n PM_i \\ \frac{1}{n}\sum_{i=1}^n RTB_i \end{bmatrix} \]
vecMeans = as.matrix(colMeans(lizard)); vecMeans
## [,1]
## BB 9.05
## PM 67.60
## RTB 128.00
vecRata = matrix(c(mean(BB), mean(PM), mean(RTB)), nrow=3, ncol=1); vecRata
## [,1]
## [1,] 9.05
## [2,] 67.60
## [3,] 128.00
colMeans(lizard)
menghitung rata-rata tiap kolom pada
matriks lizard
, lalu diubah menjadi matriks kolom
(as.matrix)
, menghasilkan vecMeans
.
vecRata
menyusun ulang rata-rata BB
,
PM
, dan RTB
menjadi vektor kolom \(3 \times 1\).
Kedua cara ini menghasilkan output yang sama, yaitu sebuah vektor rata-rata:
\[ \bar{x} = \begin{bmatrix} \bar{BB} \\ \bar{PM} \\ \bar{RTB} \end{bmatrix} \]
Dengan demikian, baik vecMeans
maupun
vecRata
sama-sama merepresentasikan centroid data
kadal; perbedaannya hanya pada cara penulisan kode.
Matriks kovarians adalah matriks yang menunjukkan seberapa besar hubungan linier antar variabel dalam suatu dataset multivariat. Kovarians mengukur apakah dua variabel cenderung berubah bersama-sama (positif), berlawanan arah (negatif), atau tidak memiliki hubungan (mendekati nol).
Untuk \(p\) variabel, matriks kovarian berukuran \(p \times p\), dengan bentuk:
\[ 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} \]
dengan:
- \(s_{jj} = \text{Var}(X_j)\) →
varians dari variabel ke-\(j\)
(diagonal).
- \(s_{jk} = \text{Cov}(X_j, X_k)\) →
kovarian antara variabel \(j\) dan
\(k\) (elemen luar diagonal).
Secara umum,
\[ \text{Cov}(X,Y) = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})(Y_i - \bar{Y}) \]
Untuk data kadal (lizard
):
varkov = cov(lizard); varkov
## BB PM RTB
## BB 10.98056 31.80000 54.96667
## PM 31.80000 94.04444 160.22222
## RTB 54.96667 160.22222 300.66667
Interpretasi:
Elemen diagonal menunjukkan varians masing-masing variabel (seberapa menyebar data di sekitar rata-ratanya),
Elemen luar diagonal menunjukkan kovarians antarpasangan variabel (arah dan kekuatan hubungan linier).
Berbeda dengan kovarian yang bergantung pada skala satuan, korelasi sudah dinormalisasi ke rentang \([-1, 1]\) sehingga dapat dibandingkan lintas variabel.
Secara matematis, korelasi antar dua variabel \(X\) dan \(Y\) didefinisikan sebagai:
\[ r_{XY} = \frac{\text{Cov}(X,Y)}{\sqrt{\text{Var}(X)} \cdot \sqrt{\text{Var}(Y)}} \]
Matriks korelasi untuk \(p\) variabel adalah:
\[ R = \begin{bmatrix} 1 & r_{12} & \cdots & r_{1p} \\ r_{21} & 1 & \cdots & r_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ r_{p1} & r_{p2} & \cdots & 1 \end{bmatrix} \]
Untuk data kadal (lizard
), kode R-nya adalah:
korel = cor(lizard); korel
## BB PM RTB
## BB 1.0000000 0.9895743 0.9566313
## PM 0.9895743 1.0000000 0.9528259
## RTB 0.9566313 0.9528259 1.0000000
Pembacaan:
Diagonal selalu 1,
Nilai di luar diagonal: mendekati +1 → hubungan kuat searah, mendekati -1 → kuat tapi berlawanan arah, mendekati 0 → lemah/tidak linier,
Contoh: cor(BB, PM)
, cor(BB, RTB)
,
cor(PM, RTB)
memberi gambaran keterkaitan fisik antar
ukuran tubuh kadal.
Matriks standardisasi adalah matriks diagonal berisi akar variansi (simpangan baku) tiap variabel
Jika terdapat \(p\) variabel, maka matriks standardisasi \(D\) berbentuk:
\[ D = \begin{bmatrix} \sqrt{\text{Var}(X_1)} & 0 & \cdots & 0 \\ 0 & \sqrt{\text{Var}(X_2)} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \sqrt{\text{Var}(X_p)} \end{bmatrix} \]
Hubungan antara kovarian dan korelasi:
\[ R = D^{-1} S D^{-1} \]
Perhitungan di R untuk data lizard
:
n = nrow(lizard);n
## [1] 10
u = matrix(1,n,1); u
## [,1]
## [1,] 1
## [2,] 1
## [3,] 1
## [4,] 1
## [5,] 1
## [6,] 1
## [7,] 1
## [8,] 1
## [9,] 1
## [10,] 1
xbar = cbind((1/n)*t(u)%*%lizard); xbar
## BB PM RTB
## [1,] 9.05 67.6 128
D = lizard - u %*% xbar; D
## BB PM RTB
## [1,] -2.85 -6.6 -13
## [2,] 2.45 5.4 10
## [3,] -0.35 0.4 -1
## [4,] 1.05 2.4 -5
## [5,] -1.25 -3.6 3
## [6,] -2.15 -7.6 -8
## [7,] 2.95 8.4 15
## [8,] -5.95 -18.6 -33
## [9,] 5.75 16.4 32
## [10,] 0.35 3.4 0
S = (1/(n-1))*t(D)%*%D; S
## BB PM RTB
## BB 10.98056 31.80000 54.96667
## PM 31.80000 94.04444 160.22222
## RTB 54.96667 160.22222 300.66667
Ds = diag(sqrt(diag(S))); Ds
## [,1] [,2] [,3]
## [1,] 3.313692 0.000000 0.00000
## [2,] 0.000000 9.697651 0.00000
## [3,] 0.000000 0.000000 17.33974
R = solve(Ds) %*% S %*% solve(Ds); R
## [,1] [,2] [,3]
## [1,] 1.0000000 0.9895743 0.9566313
## [2,] 0.9895743 1.0000000 0.9528259
## [3,] 0.9566313 0.9528259 1.0000000
Penjelasan Langkah:
n
: Jumlah observasi
u
: Membentuk vektor kolom berisi angka 1 sebanyak
\(n\) baris, digunakan untuk
mempermudah operasi aljabar dalam menghitung rata-rata.
xbar
: Vektor rata-rata yang dihitung secara
matriks.
D
: Membentuk matriks deviasi, yaitu selisih setiap
observasi terhadap vektor rata-rata.
S
: Menghitung matriks kovarian dari data
lizard
dengan pendekatan manual melalui matriks
deviasi.
Ds
: Membentuk matriks standardisasi, yaitu matriks
diagonal yang berisi akar kuadrat dari variansi masing-masing variabel
(standar deviasi).
R
: Menghasilkan matriks korelasi dengan menormalkan
kovarian menggunakan matriks standardisasi. Rumus yang dipakai: \(R = D^{-1} S D^{-1}\). Hasil \(R\) identik dengan matriks korelasi yang
dihitung dengan cor(lizard)
.
Intinya:
Ds
menjembatani kovarian (\(S\), bergantung satuan) dan korelasi (\(R\), bebas satuan),
Standardisasi memungkinkan perbandingan kekuatan hubungan antar variabel secara adil meskipun satuannya berbeda.
Hasil akhirnya:
Ds
= berisi standar deviasi tiap variabel.
R
= matriks korelasi yang menunjukkan kekuatan dan
arah hubungan antar variabel setelah menormalkan efek skala.