MATRIKS

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 Matriks

Penjumlahan Matriks

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

Pengurangan Matriks

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

Perkalian Matriks

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 Matriks dengan Skalar

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

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

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 Matriks

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

Contoh Pembuatan Matriks

Membuat Matriks dengan Angka Berurutan

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

Membuat Matriks dari Vektor

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\).

Membuat Matriks dengan Nama Baris dan Kolom

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.

Memanggil Komponen Matriks

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.

EIGEN VALUE & VECTOR

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.

DEKOMPOSISI SINGULAR VALUE (SVD)

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\).

KONSEP JARAK

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.

Syntax R untuk Pengambilan Sampel dan Standardisasi Data

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

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

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

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

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

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} \]

  • Jika \(q = 1\), maka jarak Minkowski sama dengan jarak Manhattan.
  • Jika \(q = 2\), maka jarak Minkowski sama dengan jarak Euclidean.
  • Jika \(q \to \infty\), maka jarak Minkowski mendekati jarak Chebyshev.

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:

  1. set.seed(123) digunakan untuk mengatur seed agar hasil data acak dapat direproduksi.

  2. 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.

  3. p1 <- data[1, ] dan p2 <- data[2, ] memilih observasi pertama dan observasi kedua dari dataset sebagai dua titik yang akan dihitung jaraknya.

  4. 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.

VEKTOR RATA-RATA

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 Rata-Rata

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} \]

  • Komponen pertama (\(\bar{BB}\)) mewakili rata-rata berat badan.
  • Komponen kedua (\(\bar{PM}\)) mewakili rata-rata panjang moncong kadal.
  • Komponen ketiga (\(\bar{RTB}\)) mewakili rata-rata panjang tubuh rata-rata.

Dengan demikian, baik vecMeans maupun vecRata sama-sama merepresentasikan centroid data kadal; perbedaannya hanya pada cara penulisan kode.

Matriks Kovarians

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).

Matriks Korelasi

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 (Akar Variansi Tiap Variabel)

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:

  1. n: Jumlah observasi

  2. u: Membentuk vektor kolom berisi angka 1 sebanyak \(n\) baris, digunakan untuk mempermudah operasi aljabar dalam menghitung rata-rata.

  3. xbar: Vektor rata-rata yang dihitung secara matriks.

  4. D : Membentuk matriks deviasi, yaitu selisih setiap observasi terhadap vektor rata-rata.

  5. S : Menghitung matriks kovarian dari data lizard dengan pendekatan manual melalui matriks deviasi.

  6. Ds: Membentuk matriks standardisasi, yaitu matriks diagonal yang berisi akar kuadrat dari variansi masing-masing variabel (standar deviasi).

  7. 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.