MATRIKS

Matriks adalah susunan angka-angka di dalam kotak yang dibagi ke dalam baris dan kolom. Jika suatu matriks terdiri dari \(m\) baris dan \(n\) kolom, maka matriks tersebut dikatakan berukuran (ordo) \(m \times n\).

\[ A = \begin{bmatrix} 3 & 4 & 5 \\ 1 & 9 & 2 \\ 12 & 0 & 7 \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} = 4\) menunjukkan elemen pada baris ke-1 dan kolom ke-2.

Di dalam R, cara menuliskan matriks adalah dengan menggunakan fungsi matrix(). Fungsi ini membutuhkan data, jumlah baris (nrow), dan jumlah kolom (ncol). Adapun byrow adalah argumen yang menentukan cara pengisian elemen ke dalam matriks:
- 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.

# Input Data

X = matrix(c(1,8,9,
             5,6,6,
             2,9,10), nrow = 3, ncol = 3); X
##      [,1] [,2] [,3]
## [1,]    1    5    2
## [2,]    8    6    9
## [3,]    9    6   10
Y = matrix(c(3,6,5,
             9,7,1,
             4,8,7), nrow = 3, ncol = 3, byrow = TRUE); Y
##      [,1] [,2] [,3]
## [1,]    3    6    5
## [2,]    9    7    1
## [3,]    4    8    7

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 \(X\) dan \(Y\) ditulis dengan perintah:

X + Y   # X ditambah Y
##      [,1] [,2] [,3]
## [1,]    4   11    7
## [2,]   17   13   10
## [3,]   13   14   17

Pengurangan Matriks

Operasi pengurangan matriks dilakukan dengan mengurangkan elemen yang seposisi antara dua matriks yang berordo sama. Secara umum:

\[ (A - B)_{ij} = a_{ij} - b_{ij} \]
Dalam R, pengurangan matriks \(X\) dan \(Y\) ditulis dengan perintah:

X - Y   # X dikurang Y
##      [,1] [,2] [,3]
## [1,]   -2   -1   -3
## [2,]   -1   -1    8
## [3,]    5   -2    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, pengurangan matriks \(X\) dan \(Y\) ditulis dengan perintah:

X %*% Y   # X dikali Y
##      [,1] [,2] [,3]
## [1,]   56   57   24
## [2,]  114  162  109
## [3,]  121  176  121
Y %*% X   # Y dikali X
##      [,1] [,2] [,3]
## [1,]   96   81  110
## [2,]   74   93   91
## [3,]  131  110  150

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 = 2 
c = 5
M = k * X; M  # skalar k dikali matriks X
##      [,1] [,2] [,3]
## [1,]    2   10    4
## [2,]   16   12   18
## [3,]   18   12   20
N = c * Y; N  # skalar c dikali matriks Y
##      [,1] [,2] [,3]
## [1,]   15   30   25
## [2,]   45   35    5
## [3,]   20   40   35

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

di mana \(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,]   -6   38  -33
## [2,]   -1    8   -7
## [3,]    6  -39   34
inv_Y = solve(Y); inv_Y  #Invers Y
##           [,1]        [,2]      [,3]
## [1,] -3.727273  0.18181818  2.636364
## [2,]  5.363636 -0.09090909 -3.818182
## [3,] -4.000000  0.00000000  3.000000

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\) dengan elemen \(a_{ij}\) pada \(A\) berpindah menjadi \(a_{ji}\) pada \(A^T\).

Dalam R, transpose matriks dilakukan dengan fungsi t().

transX = t(X); transX  #Transpose Matriks X
##      [,1] [,2] [,3]
## [1,]    1    8    9
## [2,]    5    6    6
## [3,]    2    9   10
transY = t(Y); transY  #Transpose Matriks Y
##      [,1] [,2] [,3]
## [1,]    3    9    4
## [2,]    6    7    8
## [3,]    5    1    7

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] -1
det(Y)  #Determinan Y
## [1] -11

Contoh Pembuatan Matriks

Membuat Matriks dengan Angka Berurutan

Dalam R, kita dapat membuat matriks dari sebuah deret angka 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

Pada contoh di atas, kita membuat matriks A dengan ukuran 4 baris \(\times\) 5 kolom. Data yang digunakan adalah deret angka dari 21 sampai 40. Karena jumlah datanya ada 20, tepat sesuai dengan kapasitas matriks (4 \(\times\) 5 = 20), maka semua elemen akan terisi penuh. Angka 21 menempati posisi baris pertama kolom pertama, angka 22 pada baris kedua kolom pertama, dan seterusnya hingga angka 40 yang berada pada baris keempat kolom kelima.

Membuat Matriks dari Vektor

Untuk membuat matriks di R, selain menggunakan deret angka secara langsung, kita juga bisa 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(4,7,2,8,5,9,6,3,1,10,12,11) 
B <- matrix(b, nrow=3, ncol=4, byrow=TRUE) ; B
##      [,1] [,2] [,3] [,4]
## [1,]    4    7    2    8
## [2,]    5    9    6    3
## [3,]    1   10   12   11

Pada contoh ini, kita terlebih dahulu membuat sebuah vektor bernama b yang berisi kumpulan angka acak, yaitu 4, 7, 2, 8, 5, 9, 6, 3, 1, 10, 12, dan 11. Selanjutnya, vektor tersebut digunakan sebagai data untuk membentuk matriks \(B\) berukuran \(3 \times 4\). Karena digunakan argumen byrow=TRUE, maka angka pertama yaitu 4 akan ditempatkan pada baris pertama kolom pertama, angka kedua yaitu 7 akan ditempatkan di sebelahnya, dan begitu seterusnya hingga satu baris penuh. Setelah baris pertama penuh, pengisian berlanjut ke baris kedua, kemudian ke baris ketiga, sampai seluruh angka dalam vektor tersusun ke dalam bentuk matriks.

Membuat Matriks dengan Nama Baris dan Kolom

Selain menggunakan deret angka berurutan atau vektor biasa, dalam R kita juga dapat membuat matriks dengan menambahkan nama pada baris dan kolom. Pemberian nama ini bermanfaat 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 berhasil dibuat, sering kali kita tidak membutuhkan keseluruhan isinya, melainkan hanya bagian tertentu saja, misalnya satu baris, satu kolom, atau elemen tertentu. Dalam R, pemanggilan komponen matriks dilakukan dengan tanda kurung siku [ ], di mana posisi baris dituliskan sebelum koma dan posisi kolom dituliskan setelah koma. Jika salah satu bagian dibiarkan kosong, maka artinya kita mengambil semua baris atau semua kolom. Dengan cara ini, kita dapat mengakses 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 contoh, ketika kita menuliskan A, maka seluruh isi matriks \(A\) akan ditampilkan secara lengkap. Jika kita ingin mengambil hanya kolom tertentu, misalnya kolom kedua, maka digunakan perintah A[,2]. Pada perintah ini, bagian baris dibiarkan kosong sehingga semua baris tetap ditampilkan, tetapi hanya untuk kolom ke-2 saja. Sebaliknya, jika ingin menampilkan seluruh isi baris tertentu, misalnya baris ke-3, maka digunakan perintah A[3,].

Selain itu, kita juga dapat mengakses elemen tunggal pada posisi tertentu. Misalnya, A[3,2] akan mengambil nilai dari elemen yang berada pada baris ke-3 dan kolom ke-2. Jika kita ingin memanggil lebih dari satu elemen sekaligus dalam satu kolom, misalnya elemen pada baris ke-1 kolom ke-2 dan baris ke-3 kolom ke-2, maka digunakan perintah A[c(1,3),2]. Bentuk c(1,3) di sini berarti kita mengambil baris ke-1 dan ke-3.

Tidak hanya itu, kita juga bisa mengambil beberapa kolom atau beberapa baris sekaligus. Perintah A[,1:3] digunakan untuk menampilkan semua baris dari kolom ke-1 hingga kolom ke-3, sehingga hasilnya adalah submatriks berukuran \(4 \times 3\). Sedangkan perintah A[2:4,] akan menampilkan semua kolom, tetapi hanya untuk baris ke-2 hingga ke-4.

EIGEN VALUE & VECTOR

Secara sederhana, nilai eigen (eigenvalue) adalah bilangan skalar yang menunjukkan seberapa besar suatu vektor berubah arah atau panjangnya ketika dikenakan transformasi linier oleh sebuah matriks, sedangkan vektor eigen (eigenvector) adalah vektor tak nol yang arah perubahannya tetap ketika dikenakan transformasi tersebut.

Dengan kata lain, jika sebuah matriks \(A\) mengalikan vektor \(v\) dan menghasilkan hasil yang searah dengan \(v\) itu sendiri, maka \(v\) disebut vektor eigen dari \(A\), dan skalar pengalinya yaitu \(\lambda\) disebut nilai eigen yang bersesuaian. Secara umum, hubungan antara matriks, nilai eigen, dan vektor eigen dapat dituliskan sebagai:

\[ A v = \lambda v \]

eigX = eigen(X); eigX
## eigen() decomposition
## $values
## [1] 18.90178326 -1.92920648  0.02742322
## 
## $vectors
##            [,1]       [,2]       [,3]
## [1,] -0.2623239 -0.8282409 -0.6871266
## [2,] -0.6562066  0.2945256 -0.1506428
## [3,] -0.7075161  0.4767303  0.7107487
eigY = eigen(Y); eigY
## eigen() decomposition
## $values
## [1] 16.4107337  1.1647491 -0.5754827
## 
## $vectors
##           [,1]       [,2]       [,3]
## [1,] 0.4960227  0.3544900  0.5422048
## [2,] 0.5461083 -0.6602220 -0.7045920
## [3,] 0.6750757  0.6621508  0.4577817
eigvalX = eigX$values; eigvalX
## [1] 18.90178326 -1.92920648  0.02742322
eigvalY = eigY$values; eigvalY
## [1] 16.4107337  1.1647491 -0.5754827
eigvecX = eigX$vectors; eigvecX
##            [,1]       [,2]       [,3]
## [1,] -0.2623239 -0.8282409 -0.6871266
## [2,] -0.6562066  0.2945256 -0.1506428
## [3,] -0.7075161  0.4767303  0.7107487
eigvecY = eigY$vectors; eigvecY
##           [,1]       [,2]       [,3]
## [1,] 0.4960227  0.3544900  0.5422048
## [2,] 0.5461083 -0.6602220 -0.7045920
## [3,] 0.6750757  0.6621508  0.4577817

Dalam R, perhitungan nilai eigen (eigenvalue) dan vektor eigen (eigenvector) dapat dilakukan dengan fungsi eigen(). Misalnya, untuk sebuah matriks \(X\), kita dapat memanggil fungsi eigX = eigen(X); eigX. Perintah ini akan menghasilkan keluaran berupa nilai eigen dan vektor eigen dari matriks \(X\). Hal yang sama berlaku untuk matriks \(Y\) dengan syntax eigY = eigen(Y); eigY.

Jika ingin memisahkan hasilnya, nilai eigen dapat diakses dengan menambahkan $values, sehingga ditulis eigvalX = eigX$values; eigvalX untuk mendapatkan nilai eigen dari matriks \(X\), dan eigvalY = eigY$values; eigvalY untuk matriks \(Y\). Sedangkan vektor eigen dapat diakses dengan $vectors, yaitu eigvecX = eigX$vectors; eigvecX untuk matriks \(X\), dan eigvecY = eigY$vectors; eigvecY untuk matriks $Y`.

Dengan demikian, fungsi eigen() di R memudahkan kita untuk langsung memperoleh baik nilai eigen maupun vektor eigen, serta memungkinkan kita mengakses keduanya secara terpisah sesuai kebutuhan analisis.

DEKOMPOSISI SINGULAR VALUE (SVD)

Singular Value Decomposition (SVD) adalah salah satu teknik penting dalam aljabar linear yang memfaktorkan sebuah matriks \(A\) berukuran \(m \times n\) menjadi tiga matriks, yaitu:

\[A = U \Sigma V^T\]

di mana \(U\) adalah matriks ortogonal berukuran \(m \times m\), \(\Sigma\) adalah matriks diagonal berukuran \(m \times n\) yang berisi nilai singular (singular values), dan \(V^T\) adalah transpose dari matriks ortogonal \(V\) berukuran \(n \times n\). Nilai singular dalam \(\Sigma\) dapat dianggap sebagai akar kuadrat dari nilai eigen matriks \(A^TA\) atau \(AA^T\).

Kegunaan SVD sangat luas, baik dalam teori maupun aplikasi. Dalam analisis data, SVD digunakan sebagai dasar dari Principal Component Analysis (PCA) untuk mereduksi dimensi data tanpa kehilangan informasi penting. Selain itu, SVD banyak dimanfaatkan dalam kompresi citra, pengolahan sinyal, sistem rekomendasi, deteksi pola, hingga penyelesaian sistem persamaan linear yang tidak stabil. Dengan kemampuan memecah matriks menjadi bentuk yang lebih sederhana, SVD membantu memahami struktur internal data serta mempercepat berbagai metode analisis multivariat.

library(MASS)
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, pertama-tama dipanggil library MASS yang berisi berbagai fungsi untuk analisis statistik dan aljabar linear. Selanjutnya, dibuat sebuah matriks a berukuran \(4 \times 3\) dengan perintah matrix(c(...), 4, 3, byrow=TRUE), di mana elemen-elemen matriks dimasukkan secara baris demi baris karena digunakan argumen byrow=TRUE. Setelah matriks a terbentuk, dilakukan dekomposisi nilai singular dengan fungsi svd(a), dan hasilnya disimpan dalam objek svd_result.

Hasil SVD ini berupa tiga komponen utama: nilai singular, matriks \(U\), dan matriks \(V\). Nilai singular dapat diakses melalui svd_result$d, yang berisi diagonal dari matriks \(\Sigma\). Matriks \(U\) dapat dipanggil dengan svd_result$u, sedangkan matriks \(V\) diperoleh dengan svd_result$v. Dengan demikian, dari syntax ini kita memperoleh secara lengkap hasil faktorisasi SVD, yaitu \(A = U \Sigma V^T\).

KONSEP JARAK

Konsep jarak dalam analisis data multivariat digunakan untuk mengukur tingkat kesamaan atau perbedaan antara dua objek atau unit observasi berdasarkan sekumpulan variabel. Jarak ini tidak hanya terbatas pada perbedaan nilai tunggal, tetapi mencakup perbedaan dari banyak dimensi sekaligus. Beberapa ukuran jarak yang umum digunakan antara lain Euclidean Distance, Manhattan Distanc*, Chebyshev Distance, Minkowski Distance, hingga Mahalanobis Distance.

Untuk memudahkan analisis, hasil perhitungan jarak antar semua pasangan observasi biasanya disajikan dalam bentuk matriks jarak (distance matrix). Matriks jarak adalah matriks simetris berukuran \(n \times n\), di mana \(n\) adalah jumlah observasi, dan setiap elemen \(d_{ij}\) menunjukkan jarak antara observasi ke-\(i\) dan ke-\(j\). Elemen diagonal selalu bernilai nol karena jarak suatu objek terhadap dirinya sendiri adalah nol.

Deskripsi 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, fungsi set.seed(321) digunakan terlebih dahulu untuk menetapkan seed dari generator bilangan acak. Hal ini bertujuan agar hasil pengambilan sampel dapat direproduksi (selalu sama setiap kali kode dijalankan).

Selanjutnya, perintah ss <- sample(1:50, 15) digunakan untuk mengambil 15 sampel acak dari angka 1 sampai 50. Hasilnya berupa sebuah vektor ss yang berisi indeks-indeks terpilih.

Kemudian, df <- USArrests[ss, ] berfungsi untuk memilih 15 baris data dari dataset bawaan R bernama USArrests sesuai dengan indeks yang ada pada ss. Dengan demikian, df merupakan subset dari dataset USArrests yang hanya berisi 15 observasi hasil sampel acak tersebut.

Terakhir, df.scaled <- scale(df); df.scaled digunakan untuk melakukan standardisasi pada setiap variabel dalam data df. Fungsi scale() menstandarkan data dengan cara mengurangi setiap nilai dengan rata-rata variabelnya, lalu membaginya dengan standar deviasi variabel tersebut. Hasilnya, setiap variabel dalam df.scaled akan memiliki rata-rata nol dan standar deviasi satu. Standardisasi ini penting untuk analisis multivariat, karena semua variabel menjadi berada pada skala yang sama sehingga tidak ada variabel yang mendominasi perhitungan jarak akibat 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.3
## 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") digunakan untuk menghitung jarak Euclidean antar setiap pasangan observasi pada data df.scaled. Hasilnya berupa matriks jara berisi nilai jarak antar baris data. Nilai yang lebih kecil menunjukkan bahwa dua observasi relatif lebih mirip (posisinya berdekatan dalam ruang multidimensi), sedangkan nilai yang lebih besar menunjukkan perbedaan yang lebih jauh atau kurang mirip antar observasi tersebut.

Selanjutnya, fviz_dist(dist.eucl) digunakan untuk memvisualisasikan matriks jarak dalam bentuk heatmap. Pada visualisasi ini, warna yang lebih terang biasanya menunjukkan jarak yang lebih kecil (objek lebih mirip), sedangkan warna yang lebih gelap menunjukkan jarak yang lebih besar (objek lebih berbeda). Dengan cara ini, kita dapat dengan cepat mengidentifikasi kelompok observasi yang saling berdekatan (cluster alami) maupun observasi yang sangat berbeda dari yang lain (outlier).

Interpretasinya:

  • Jika terdapat beberapa observasi dengan nilai jarak Euclidean yang rendah terhadap satu sama lain, maka mereka cenderung membentuk satu kelompok (cluster).

  • Sebaliknya, jika ada observasi dengan nilai jarak tinggi terhadap hampir semua lainnya, maka observasi tersebut bisa dianggap berbeda signifikan atau bahkan sebagai outlier.

Jarak Chebyshev

Jarak Chebyshev merupakan ukuran jarak yang mendefinisikan jarak maksimum antar dimensi dari dua titik dalam ruang berdimensi banyak. Dengan kata lain, jarak ini hanya mempertimbangkan selisih terbesar di antara semua variabel. 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 dist.cheb <- dist(df.scaled, method = "maximum") digunakan untuk menghitung jarak Chebyshev antar setiap pasangan observasi pada data df.scaled. Rumus jarak Chebyshev mengambil selisih absolut terbesar dari semua variabel antara dua observasi. Dengan kata lain, jika ada satu dimensi di mana kedua observasi sangat berbeda, maka itulah yang dianggap sebagai jarak utama di antara keduanya.

Hasil dist.cheb berupa matriks jarak yang berisi nilai perbedaan maksimum antar observasi. Nilai kecil berarti tidak ada perbedaan ekstrem pada variabel manapun (observasi relatif mirip), sedangkan nilai besar menunjukkan adanya perbedaan yang sangat signifikan pada salah satu variabel.

Selanjutnya, fviz_dist(dist.cheb) digunakan untuk memvisualisasikan matriks jarak tersebut dalam bentuk heatmap. Pada visualisasi, warna terang biasanya merepresentasikan jarak kecil (observasi mirip), sedangkan warna gelap merepresentasikan jarak besar (observasi berbeda jauh pada satu variabel tertentu).

Interpretasinya:

  • Dua observasi bisa saja tampak mirip pada sebagian besar variabel, tetapi jika terdapat satu variabel dengan selisih besar, jarak Chebyshev akan tinggi.

  • Jarak ini cocok digunakan ketika analisis lebih menekankan pada perbedaan maksimum antar variabel dibanding rata-rata perbedaan.

Jarak Manhattan

Jarak Manhattan, juga dikenal sebagai taxicab distance atau L1 norm, adalah ukuran jarak antar dua titik yang dihitung berdasarkan jumlah selisih absolut dari masing-masing variabel. Ibaratnya, jarak Manhattan menggambarkan jarak yang ditempuh taksi di jalan berbentuk grid (kotak-kotak), sehingga hanya bisa bergerak ke arah horizontal atau 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 dist.man <- dist(df.scaled, method = "manhattan") digunakan untuk menghitung jarak Manhattan antar setiap pasangan observasi pada data df.scaled. Rumus jarak Manhattan menghitung jumlah dari semua selisih absolut antar variabel. Dengan demikian, jarak ini mencerminkan akumulasi perbedaan di seluruh dimensi.

Hasil dist.man berupa matriks jarak yang berisi nilai jarak Manhattan untuk setiap pasangan observasi. Nilai yang lebih kecil menunjukkan bahwa dua observasi sangat mirip secara keseluruhan, sedangkan nilai yang lebih besar menunjukkan banyaknya perbedaan yang terakumulasi di berbagai variabel.

Perintah fviz_dist(dist.man) memvisualisasikan matriks jarak dalam bentuk heatmap. Dalam peta panas tersebut, warna terang biasanya menunjukkan jarak kecil (observasi mirip), sedangkan warna gelap menunjukkan jarak besar (observasi berbeda jauh).

Interpretasinya:

  • Jika dua observasi hanya berbeda sedikit di banyak variabel, jarak Manhattan tetap bisa menjadi besar karena perbedaan kecil itu dijumlahkan.

  • Jika terdapat perbedaan besar di beberapa variabel saja, nilainya juga akan terlihat signifikan.

  • Jarak Manhattan cocok digunakan ketika kita ingin memperhatikan total perbedaan akumulatif antar observasi, bukan hanya perbedaan terbesar (Chebyshev) atau jarak lurus (Euclidean).

Jarak Mahalanobis

Jarak Mahalanobis adalah ukuran jarak antar dua observasi yang memperhitungkan korelasi antar variabel. Tidak seperti Euclidean atau Manhattan yang mengasumsikan semua variabel independen, Mahalanobis menyesuaikan perhitungan dengan mempertimbangkan struktur kovarian data. Oleh karena itu, jarak ini sangat berguna untuk mendeteksi outlier multivariat atau mengukur kemiripan ketika variabel-variabel saling berkorelasi.

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, fungsi mahalanobis.dist() dari package StatMatch digunakan untuk menghitung jarak Mahalanobis antar setiap pasangan observasi pada data df.scaled. Perintah dist.mah <- mahalanobis.dist(df.scaled) menghasilkan sebuah objek matriks jarak khusus, sedangkan dist.mah_matrix <- as.matrix(dist.mah) mengubahnya ke bentuk matriks biasa sehingga dapat dilihat dan dianalisis lebih mudah. 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, di mana nilai parameter \(q\) menentukan karakteristik metriknya.

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 berisi nilai rata-rata dari setiap variabel dalam sebuah dataset. Jika terdapat data dengan \(n\) observasi dan \(p\) variabel, maka vektor rata-rata ditulis sebagai:

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

Makna:

  • Vektor rata-rata mewakili titik pusat (center) dari seluruh observasi dalam ruang berdimensi \(p\)

  • Dalam ruang dua dimensi, vektor rata-rata adalah titik koordinat yang diperoleh dari rata-rata sumbu \(x\) dan rata-rata sumbu \(y\).

  • Dalam ruang berdimensi lebih tinggi, vektor ini berfungsi sebagai pusat data (centroid).

Kegunaan:

  • Vektor rata-rata sangat penting dalam perhitungan jarak Mahalanobis, karena jarak setiap observasi sering dihitung terhadap pusat data ini.

  • Digunakan sebagai pusat klaster dalam algoritma clustering (misalnya K-Means).

  • Menjadi dasar dalam perhitungan kovarian dan analisis Principal Component Analysis (PCA).

Pada perhitungan ini, kita memasukkan data mengenai 10 ekor kadal dengan tiga variabel pengukuran, yaitu:

  • BB: Berat badan (dalam gram)

  • PM: Panjang moncong (dalam milimeter)

  • RTB: Panjang tubuh rata-rata (dalam milimeter)

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 rata-rata dalam analisis multivariat adalah bentuk representasi dari vektor rata-rata setiap variabel pada data yang kita miliki. Dari data kadal yang terdiri atas tiga variabel: berat badan (BB), panjang moncong (PM), dan rata-rata panjang tubuh (RTB); kita dapat menghitung nilai rata-rata masing-masing variabel, kemudian menyusunnya dalam bentuk 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

Perintah vecMeans = as.matrix(colMeans(lizard)) menghitung rata-rata setiap kolom pada matriks lizard, lalu mengubah hasilnya ke dalam bentuk matriks kolom. Dengan demikian, vecMeans adalah vektor rata-rata yang berisi nilai rata-rata dari variabel BB, PM, dan RTB.

Perintah kedua, vecRata = matrix(c(mean(BB), mean(PM), mean(RTB)), nrow=3, ncol=1), menghitung rata-rata dari masing-masing vektor variabel secara terpisah (mean(BB), mean(PM), dan mean(RTB)), lalu menyusunnya kembali menjadi sebuah matriks berukuran \(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} \]

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

Dengan demikian, baik vecMeans maupun vecRata sama-sama menyajikan titik pusat (centroid) dari seluruh data kadal. Perbedaan syntax hanya pada cara penulisan, tetapi hasil akhirnya identik.

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

Jika terdapat data dengan \(p\) variabel, maka 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, kovarians dihitung dengan rumus:

\[ \text{Cov}(X,Y) = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})(Y_i - \bar{Y}) \]

Untuk data kadal (lizard) dengan variabel BB, PM, dan RTB, matriks kovarian dapat dihitung dengan:

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

Hasil perintah ini adalah sebuah matriks berukuran \(3 \times 3\) di mana:

  • Elemen diagonal (\(s_{11}, s_{22}, s_{33}\)) merepresentasikan varians masing-masing variabel, yaitu ukuran penyebaran data di sekitar rata-ratanya.
    • \(s_{11} =\) Var(BB) → seberapa besar penyebaran berat badan kadal.
    • \(s_{22} =\) Var(PM) → seberapa besar penyebaran panjang moncong.
    • \(s_{33} =\) Var(RTB) → seberapa besar penyebaran panjang tubuh rata-rata.
  • Elemen luar diagonal (\(s_{12}, s_{13}, s_{23}\) dan simetrisnya) merepresentasikan kovarians antar variabel, yaitu apakah dua variabel berubah searah atau berlawanan.
    • \(s_{12} =\) Cov(BB, PM) → hubungan linier antara berat badan dan panjang moncong.
    • \(s_{13} =\) Cov(BB, RTB) → hubungan linier antara berat badan dan panjang tubuh.
    • \(s_{23} =\) Cov(PM, RTB) → hubungan linier antara panjang moncong dan panjang tubuh.

Matriks Korelasi

Matriks korelasi adalah matriks yang menunjukkan hubungan linier relatif antar variabel dalam bentuk koefisien korelasi Pearson. Tidak seperti kovarian yang bergantung pada satuan pengukuran, korelasi telah dinormalisasi sehingga nilainya selalu berada pada rentang \([-1, 1]\).

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

Dengan demikian, matriks korelasi untuk \(p\) variabel berbentuk:

\[ 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), kita dapat menghitung matriks korelasi dengan:

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

Hasil korel adalah matriks \(3 \times 3\) dengan nilai korelasi antar pasangan variabel.

  • Diagonal matriks selalu bernilai 1, karena setiap variabel berkorelasi sempurna dengan dirinya sendiri.
  • Nilai di luar diagonal adalah koefisien korelasi antar dua variabel:
    • Jika nilai mendekati +1, hubungan antar variabel sangat kuat dan searah.
    • Jika nilai mendekati -1, hubungan antar variabel sangat kuat tetapi berlawanan arah.
    • Jika nilai mendekati 0, hubungan linier antar variabel lemah atau tidak ada.
  • cor(BB, PM) → menunjukkan seberapa kuat hubungan antara berat badan kadal dengan panjang moncongnya. Korelasi positif berarti kadal dengan berat lebih besar cenderung memiliki moncong lebih panjang.
  • cor(BB, RTB) → mengukur hubungan antara berat badan dan panjang tubuh. Jika nilainya tinggi dan positif, berarti kadal yang lebih berat cenderung memiliki tubuh lebih panjang.
  • cor(PM, RTB) → mengukur hubungan antara panjang moncong dan panjang tubuh. Nilai positif menunjukkan bahwa semakin panjang moncongnya, semakin panjang pula tubuhnya.

Matriks Standardisasi (Akar dari Variansi Masing-Masing Variabel)

Matriks standardisasi merupakan matriks diagonal yang berisi akar kuadrat dari variansi masing-masing variabel. Matriks ini digunakan untuk menormalisasi data sehingga setiap variabel memiliki skala yang sebanding.

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

Matriks korelasi (\(R\)) dapat diturunkan dari matriks kovarian (\(S\)) melalui matriks standardisasi (\(D\)):

\[ R = D^{-1} S D^{-1} \]

dengan \(D\) adalah matriks diagonal dari akar variansi tiap variabel.

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

Interpretasi:

  1. n = nrow(lizard); n : Menghitung banyaknya observasi pada data lizard (jumlah baris).

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

  3. xbar = cbind((1/n)*t(u)%*%lizard); xbar : Menghitung vektor rata-rata dari data lizard menggunakan pendekatan matriks.

  4. D = lizard - u %*% xbar; D : Membentuk matriks deviasi, yaitu selisih setiap observasi terhadap vektor rata-rata.

  5. S = (1/(n-1))*t(D)%*%D; S : Menghitung matriks kovarian dari data lizard dengan pendekatan manual melalui matriks deviasi.

  6. `Ds = diag(sqrt(diag(S))); Ds : Membentuk matriks standardisasi, yaitu matriks diagonal yang berisi akar kuadrat dari variansi masing-masing variabel (standar deviasi).

    • \(Ds_{11}\) = standar deviasi berat badan (BB).
    • \(Ds_{22}\) = standar deviasi panjang moncong (PM).
    • \(Ds_{33}\) = standar deviasi panjang tubuh rata-rata (RTB).
  7. R = solve(Ds) %*% S %*% solve(Ds); 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).

  • Matriks standardisasi Ds adalah jembatan antara kovarian dan korelasi.
  • Kovarian (\(S\)) masih bergantung pada satuan pengukuran (gram, milimeter), sedangkan korelasi (\(R\)) sudah bebas dari satuan berkat pembagian dengan standar deviasi (\(Ds\)).
  • Dengan standardisasi, kita dapat membandingkan kekuatan hubungan antar variabel secara adil meskipun variabel memiliki skala yang berbeda.

Hasil akhirnya:

  • Ds = berisi standar deviasi tiap variabel.

  • R = matriks korelasi yang menunjukkan kekuatan dan arah hubungan antar variabel setelah menormalkan efek skala.