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\).
\[ B = \begin{bmatrix} 6 & 2 & 8 \\ 4 & 7 & 3 \\ 9 & 5 & 1 \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 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
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
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 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 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 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 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
Di R, matriks bisa dibentuk langsung dari urutan bilangan menggunakan
fungsi matrix().
Fungsi ini membutuhkan data yang akan dimasukkan, jumlah baris
(nrow), serta jumlah kolom (ncol).
Jika data yang digunakan berupa deret angka, maka elemen-elemen matriks
akan diisi sesuai urutan tersebut.
Secara default, pengisian dilakukan per kolom dari atas ke bawah, lalu
berpindah ke kolom berikutnya.
A <- matrix(51:70, nrow=5, ncol=4) ; A
## [,1] [,2] [,3] [,4]
## [1,] 51 56 61 66
## [2,] 52 57 62 67
## [3,] 53 58 63 68
## [4,] 54 59 64 69
## [5,] 55 60 65 70
Pada contoh ini, kita membuat matriks \(A\) dengan ukuran \(5 \times 4\), menggunakan angka dari 51 sampai 70. Jumlah angkanya ada 20, tepat sama dengan kapasitas matriks (5 \(\times\) 4). Angka 51 masuk ke baris 1 kolom 1, angka 52 ke baris 2 kolom 1, dan seterusnya hingga angka 70 berada di baris ke-5 kolom ke-4.
Matriks juga bisa dibentuk dari sebuah vektor, yaitu kumpulan data satu dimensi. Dengan cara ini, kita bisa memilih sendiri angka-angka yang akan disusun, lalu mengatur apakah pengisiannya per baris atau per 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
Contoh di atas menunjukkan vektor b yang berisi 12 angka acak: 4, 7, 2, 8, 5, 9, 6, 3, 1, 10, 12, dan 11. Vektor ini kemudian disusun menjadi matriks \(B\) berukuran \(3 \times 4\). Karena dipakai argumen byrow=TRUE, maka pengisian dilakukan per baris: angka pertama (4) masuk ke baris 1 kolom 1, angka kedua (7) ke kolom di sebelahnya, dan seterusnya sampai seluruh elemen tersusun menjadi sebuah matriks.
Matriks di R juga dapat diberi nama pada baris maupun kolom 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 adanya label, matriks tidak hanya menampilkan angka,
tetapi juga keterangan tambahan yang membuat interpretasi lebih
jelas.
isi <- c(32,45,28,39)
kol <- c("K1","K2")
bar <- c("B1","B2")
C <- matrix(isi, nrow=2, ncol=2,
byrow=TRUE, dimnames=list(bar,kol)) ; C
## K1 K2
## B1 32 45
## B2 28 39
Pada contoh ini, vektor sel berisi angka 15, 9, 27, dan 18. Vektor
tersebut kemudian disusun ke dalam matriks \(C\) dengan ukuran \(2 \times 2\). Karena digunakan argumen
byrow=TRUE, maka angka 15 akan ditempatkan pada baris
pertama kolom pertama, angka 9 di sebelahnya, lalu berlanjut ke baris
kedua dengan angka 27 dan 18. Selanjutnya, kita mendefinisikan nama
kolom melalui nama_kolom <- c("C1", "C2") dan nama baris
melalui nama_baris <- c("R1", "R2"). Nama-nama ini
kemudian digabungkan dalam argumen
dimnames=list(nama_baris, nama_kolom) sehingga hasil
matriks \(C\) menampilkan label \(R1\) dan \(R2\) di sisi kiri sebagai penanda baris,
serta label \(C1\) dan \(C2\) di bagian atas sebagai penanda
kolom.
Setelah matriks dibuat, kita bisa mengambil bagian tertentu saja
sesuai kebutuhan, misalnya baris, kolom, atau satu elemen spesifik.
Pemanggilan elemen matriks dilakukan dengan tanda kurung siku
[ ]. Posisi baris ditulis sebelum koma, sedangkan posisi
kolom ditulis setelah koma. Jika salah satu dibiarkan kosong, maka semua
baris atau semua kolom akan dipanggil.
A
## [,1] [,2] [,3] [,4]
## [1,] 51 56 61 66
## [2,] 52 57 62 67
## [3,] 53 58 63 68
## [4,] 54 59 64 69
## [5,] 55 60 65 70
A[,3] # Kolom ke-3
## [1] 61 62 63 64 65
A[4,] # Baris ke-4
## [1] 54 59 64 69
A[2,3] # Elemen baris ke-2 kolom ke-3
## [1] 62
A[c(1,5),2] # Elemen baris 1 dan 5 pada kolom ke-2
## [1] 56 60
A[,2:4] # Semua baris dari kolom 2 sampai 4
## [,1] [,2] [,3]
## [1,] 56 61 66
## [2,] 57 62 67
## [3,] 58 63 68
## [4,] 59 64 69
## [5,] 60 65 70
A[3:5,] # Semua kolom dari baris 3 sampai 5
## [,1] [,2] [,3] [,4]
## [1,] 53 58 63 68
## [2,] 54 59 64 69
## [3,] 55 60 65 70
Perintah A[,3] akan menampilkan semua baris yang ada pada kolom ketiga. Perintah A[4,] akan menampilkan seluruh isi baris keempat dari matriks. Perintah A[2,3] akan mengambil satu nilai yang berada di baris kedua dan kolom ketiga. Perintah A[c(1,5),2] akan menampilkan dua elemen, yaitu nilai pada baris pertama kolom kedua dan nilai pada baris kelima kolom kedua. Perintah A[,2:4] akan menghasilkan sebuah submatriks yang berisi semua baris dari kolom kedua hingga kolom keempat. Perintah A[3:5,] akan menampilkan semua kolom tetapi hanya untuk baris ketiga sampai baris kelima.
nilai eigen (eigenvalue) adalah suatu bilangan skalar yang menunjukkan seberapa besar sebuah vektor mengalami perubahan panjang atau arah ketika dikenai transformasi linier oleh sebuah matriks. Sementara itu, vektor eigen (eigenvector) adalah vektor tak nol yang arahnya tidak berubah walaupun dikenakan transformasi tersebut. Dengan kata lain, apabila sebuah matriks \(A\) mengalikan vektor \(v\) dan hasilnya tetap searah dengan \(v\) itu sendiri, maka \(v\) disebut sebagai vektor eigen dari \(A\), sedangkan skalar pengalinya \(\lambda\) merupakan nilai eigen yang terkait. Hubungan umum antara matriks, nilai eigen, dan vektor eigen dituliskan dalam bentuk: \[ 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.
Singular Value Decomposition (SVD) merupakan salah satu teknik fundamental dalam aljabar linear yang memfaktorkan sebuah matriks \(A\) berukuran \(m \times n\) ke dalam tiga matriks: \[A = U \Sigma V^T\] Pada bentuk dekomposisi ini, \(U\) adalah matriks ortogonal berukuran \(m \times m\), \(\Sigma\) merupakan matriks diagonal berukuran \(m \times n\) yang berisi nilai singular (singular values), sedangkan \(V^T\) adalah transpose dari matriks ortogonal \(V\) yang berukuran \(n \times n\). Nilai singular yang terdapat pada \(\Sigma\) dapat dipandang sebagai akar kuadrat dari nilai eigen pada matriks \(A^TA\) maupun \(AA^T\). Dalam penerapannya, SVD memiliki cakupan penggunaan yang sangat luas baik secara teoritis maupun praktis. Pada bidang analisis data, SVD sering dijadikan dasar dalam Principal Component Analysis (PCA) yang bertujuan mereduksi dimensi data tanpa kehilangan informasi utama. Di samping itu, SVD juga berperan penting pada kompresi gambar, pengolahan sinyal, sistem rekomendasi, deteksi pola, hingga penyelesaian sistem persamaan linear yang bersifat tidak stabil. Dengan kemampuannya menguraikan matriks ke bentuk yang lebih sederhana, SVD membantu memahami struktur internal data sekaligus mempercepat berbagai proses analisis multivariat.
library(MASS)
a <- matrix(c(4,7,-2,5,1,9,-3,6,8,2,-4,10), 4, 3, byrow=TRUE)
a
## [,1] [,2] [,3]
## [1,] 4 7 -2
## [2,] 5 1 9
## [3,] -3 6 8
## [4,] 2 -4 10
svd_result <- svd(a)
singular_value <- svd_result$d ; singular_value
## [1] 15.95442 10.13170 6.91413
U <- svd_result$u ; U
## [,1] [,2] [,3]
## [1,] -0.07091129 0.7390175 -0.4938121
## [2,] 0.60917362 0.1127123 -0.4848226
## [3,] 0.47393911 0.5187331 0.7115370
## [4,] 0.63187088 -0.4148072 -0.1217035
V <- svd_result$v ; V
## [,1] [,2] [,3]
## [1,] 0.1632242 0.1119079 -0.9802216
## [2,] 0.0268857 0.9926726 0.1178064
## [3,] 0.9862226 -0.0455828 0.1590195
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 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.
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 merupakan ukuran jarak yang paling sering digunakan dalam analisis data multivariat. Secara intuitif, jarak ini adalah panjang garis lurus yang menghubungkan dua titik dalam ruang berdimensi banyak. Jika terdapat dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\) dengan \(p\) variabel, maka jarak Euclidean antara keduanya dirumuskan sebagai: \[ d(x, y) = \sqrt{ \sum_{i=1}^p (x_i - y_i)^2 } \] Rumus tersebut menghitung perbedaan kuadrat tiap pasangan variabel, menjumlahkannya, lalu diambil akar kuadratnya. Nilai jarak Euclidean tidak pernah negatif, dan bernilai nol hanya jika kedua observasi identik.
library(factoextra)
## Loading required package: ggplot2
## 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")
berfungsi menghitung jarak Euclidean antar semua pasangan baris pada
data df.scaled. Hasil yang diperoleh berupa sebuah matriks jarak. Nilai
kecil menunjukkan dua observasi lebih mirip (berdekatan), sedangkan
nilai besar menandakan perbedaan yang jauh. Selanjutnya,
fviz_dist(dist.eucl) menampilkan visualisasi jarak dalam
bentuk heatmap. Pada grafik ini, warna terang biasanya menggambarkan
jarak kecil (lebih mirip), sementara warna gelap menggambarkan jarak
besar (lebih berbeda).
Interpretasinya: -Jika ada beberapa observasi yang memiliki jarak Euclidean rendah satu sama lain, maka mereka cenderung membentuk suatu kelompok (cluster). -Jika terdapat observasi dengan jarak besar terhadap hampir semua observasi lain, maka kemungkinan besar data tersebut cukup berbeda dan dapat dianggap sebagai outlier.
Jarak Chebyshev adalah ukuran jarak yang menilai selisih terbesar di antara semua dimensi dari dua titik dalam ruang berdimensi banyak.
Jika terdapat dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\), maka rumus jaraknya adalah:
\[ d(x, y) = \max_i |x_i - y_i| \]
Dengan kata lain, jarak Chebyshev hanya melihat dimensi yang perbedaannya paling besar, lalu menjadikannya ukuran jarak. Karena itu, matrik ini juga disebut:Maximum metric (jarak maksimum) atau Chessboard distance (jarak papan catur), karena menyerupai langkah terpanjang yang bisa dilakukan dalam satu arah untuk mencapai posisi 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)
Fungsi
dist.cheb <- dist(df.scaled, method = "maximum")
dipakai untuk menghitung jarak Chebyshev antar observasi pada dataset
df.scaled. Dalam jarak ini, yang diambil hanyalah perbedaan terbesar di
antara seluruh variabel dari dua observasi. Jadi, jika ada satu variabel
yang nilainya jauh berbeda, maka variabel tersebut yang menentukan nilai
jarak.
Output dist.cheb berupa matriks jarak, di mana: nilai
kecil berarti tidak ditemukan perbedaan ekstrem antar variabel
(observasi cukup serupa), nilai besar menunjukkan adanya gap besar di
salah satu variabel.
Perintah fviz_dist(dist.cheb) berfungsi menampilkan
hasil dalam bentuk heatmap. Pada tampilan ini, warna terang biasanya
menunjukkan jarak yang kecil (observasi mirip), sedangkan warna gelap
menandakan adanya jarak yang besar (observasi berbeda jauh pada
setidaknya satu variabel).
Interpretasi: -Dua observasi bisa terlihat serupa di sebagian besar variabel, tetapi jarak Chebyshev tetap tinggi jika ada satu variabel dengan selisih besar. -Metode ini lebih sesuai bila fokus analisis ada pada selisih maksimum antar variabel, bukan pada keseluruhan rata-rata perbedaan.
Jarak Manhattan, sering disebut juga taxicab distance atau L1 norm, adalah ukuran jarak antar dua titik yang dihitung dengan cara menjumlahkan semua selisih absolut dari setiap variabel. Nama “Manhattan” diambil dari gambaran jalan berbentuk kotak-kotak di kota besar, di mana jarak yang ditempuh kendaraan hanya mengikuti jalur horizontal dan vertikal, bukan garis lurus diagonal. Secara matematis, untuk dua observasi \(x = (x_1, x_2, \dots, x_p)\) dan \(y = (y_1, y_2, \dots, y_p)\), jaraknya didefinisikan sebagai: \[ d(x, y) = \sum_{i=1}^p |x_i - y_i| \] Dengan kata lain, perbedaan pada setiap variabel dihitung, lalu seluruhnya dijumlahkan untuk menghasilkan nilai jarak total.
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")
menghitung jarak Manhattan antar observasi dalam data
df.scaled. Hasil dist.man berupa matriks
jarak, yang berisi nilai total selisih absolut untuk tiap pasangan
observasi. Perintah fviz_dist(dist.man) menampilkan
heatmap dari matriks jarak tersebut, dengan warna terang
menandakan jarak yang kecil (mirip) dan warna gelap menandakan jarak
yang lebih besar (berbeda).
Interpretasi: -Jika ada banyak perbedaan kecil pada berbagai variabel, jarak Manhattan bisa tetap besar karena semua selisih dijumlahkan. -Sebaliknya, beberapa perbedaan besar pada sedikit variabel juga akan membuat jarak ini tinggi. -Jarak Manhattan sesuai dipakai bila analisis ingin melihat total akumulasi perbedaan antar observasi, bukan hanya perbedaan terbesar (Chebyshev) atau garis lurus terpendek (Euclidean).
Jarak Mahalanobis adalah ukuran jarak antar observasi yang memperhitungkan hubungan antar variabel. Berbeda dengan Euclidean atau Manhattan yang menganggap semua variabel independen dan memiliki skala yang sama, Mahalanobis menggunakan informasi kovarian sehingga hasil perhitungan lebih akurat ketika variabel saling berkorelasi.Karena sifatnya ini, jarak Mahalanobis banyak digunakan untuk:mendeteksi outlier multivariat, mengukur kedekatan antar observasi pada data dengan variabel yang saling berhubungan, serta analisis diskriminan dan klasifikasi. Secara matematis, untuk sebuah observasi \(x\) dengan vektor rata-rata \(\mu\), jarak Mahalanobis terhadap pusat data dirumuskan 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)
## Loading required package: proxy
##
## 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
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
##
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
##
## dotchart
## Loading required package: lpSolve
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following 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)
Fungsi mahalanobis.dist() dari package
StatMatch menghitung jarak Mahalanobis antar semua pasangan
observasi dalam data df.scaled.Perintah
dist.mah <- mahalanobis.dist(df.scaled) menyimpan hasil
dalam format objek
jarak.dist.mah_matrix <- as.matrix(dist.mah) mengubah
hasil menjadi matriks sehingga mudah ditampilkan dan dianalisis. Setiap
elemen \(d_{ij}\) pada matriks mewakili
jarak Mahalanobis antara observasi ke-\(i\) dan ke-\(j\).
Interpretasi: -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 bernilai nol karena jarak suatu observasi dengan dirinya sendiri = 0.
Jarak Minkowski 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\), jarak Minkowski sama dengan jarak Manhattan. -Jika \(q = 2\), jarak Minkowski sama dengan jarak Euclidean. -Jika \(q \to \infty\), jarak Minkowski mendekati jarak Chebyshev. Dengan demikian, Minkowski bersifat 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: 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.
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 merepresentasikan titik pusat data (center) dari semua observasi pada ruang berdimensi \(p\). -Untuk data dua dimensi, vektor rata-rata adalah koordinat dari rata-rata sumbu-\(x\) dan rata-rata sumbu-\(y\). -Pada dimensi yang lebih tinggi, vektor rata-rata dapat dianggap sebagai pusat massa atau (centroid). dari data.
Kegunaan: -Menjadi acuan dalam perhitungan jarak Mahalanobis, karena sering digunakan sebagai titik pusat pembanding. -Berperan sebagai pusat klaster dalam metode pengelompokan data clustering (misalnya algoritma K-Means). -Digunakan dalam pembentukan matriks kovarian dan juga menjadi dasar dalam analisis komponen utama (PCA).
Sebagai contoh, pada data yang berisi 10 ekor kadal dengan tiga variabel pengukuran berikut: BB: Berat badan (gram) PM: Panjang moncong (mm) RTB: Rata-rata panjang tubuh (mm)
Data dapat dituliskan dalam bentuk matriks pada R sebagai berikut:
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
Dalam analisis multivariat, matriks rata-rata adalah bentuk representasi vektor yang berisi nilai tengah dari setiap variabel pada data. Pada contoh data kadal dengan tiga variabel, yaitu berat badan (BB), panjang moncong (PM), dan rata-rata panjang tubuh (RTB), kita dapat menghitung rata-rata masing-masing variabel, lalu menyusunnya menjadi sebuah vektor berukuran \(3 \times 1\). Secara matematis 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.
Dalam analisis multivariat, matriks kovarians digunakan untuk menggambarkan hubungan linier antar variabel dalam suatu dataset. Kovarians menunjukkan apakah dua variabel cenderung meningkat bersama (positif), bergerak berlawanan arah (negatif), atau tidak memiliki pola hubungan yang jelas (mendekati nol). Jika terdapat \(p\) variabel, maka matriks kovarians berbentuk persegi berukuran \(p \times p\): \[ 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}\)) → masing-masing adalah varians tiap variabel. -\(s_{11}\) = Var(BB), menggambarkan seberapa besar variasi berat badan kadal. -\(s_{22}\) = Var(PM), menunjukkan variasi panjang moncong. -\(s_{33}\) = Var(RTB), menunjukkan variasi panjang tubuh rata-rata. Elemen luar diagonal (\(s_{12}, s_{13}, s_{23}\) dan simetrisnya) → kovarians antar variabel. -\(s_{12}\) = Cov(BB, PM), mengukur keeratan hubungan linier antara berat badan dan panjang moncong. -\(s_{13}\) = Cov(BB, RTB), menunjukkan hubungan antara berat badan dan panjang tubuh. -\(s_{23}\) = Cov(PM, RTB), menunjukkan hubungan antara panjang moncong dan panjang tubuh. Dengan demikian, matriks kovarians tidak hanya memberikan informasi mengenai penyebaran tiap variabel secara individu, tetapi juga memperlihatkan keterkaitan antar variabel dalam data.
Dalam analisis multivariat, matriks korelasi digunakan untuk melihat hubungan linier relatif antar variabel dalam bentuk koefisien korelasi Pearson. Berbeda dengan kovarians yang masih bergantung pada satuan pengukuran, korelasi sudah dinormalisasi sehingga nilainya selalu berada pada rentang \([-1, 1]\). Secara matematis, korelasi antara dua variabel \(X\) dan \(Y\) dituliskan 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.
Interpretasi pada data kadal: - cor(BB, PM) menunjukkan
keeratan hubungan antara berat badan dan panjang moncong. Korelasi
positif berarti kadal yang lebih berat cenderung memiliki moncong lebih
panjang. - cor(BB, RTB) menggambarkan hubungan antara berat
badan dan panjang tubuh. Jika nilainya tinggi dan positif, kadal yang
lebih berat biasanya memiliki tubuh lebih panjang. -
cor(PM, RTB) menunjukkan hubungan antara panjang moncong
dan panjang tubuh. Nilai positif berarti semakin panjang moncongnya,
semakin panjang pula tubuh kadal.
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:
n = nrow(lizard); n : Menghitung banyaknya observasi
pada data lizard (jumlah baris).
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.
xbar = cbind((1/n)*t(u)%*%lizard); xbar : Menghitung
vektor rata-rata dari data lizard menggunakan pendekatan
matriks.
D = lizard - u %*% xbar; D : Membentuk matriks
deviasi, yaitu selisih setiap observasi terhadap vektor
rata-rata.
S = (1/(n-1))*t(D)%*%D; S : Menghitung matriks
kovarian dari data lizard dengan pendekatan manual melalui
matriks deviasi.
`Ds = diag(sqrt(diag(S))); Ds : Membentuk matriks standardisasi, yaitu matriks diagonal yang berisi akar kuadrat dari variansi masing-masing variabel (standar deviasi).
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).
Ds adalah jembatan antara
kovarian dan korelasi.Hasil akhirnya:
Ds = berisi standar deviasi tiap variabel.
R = matriks korelasi yang menunjukkan kekuatan dan
arah hubungan antar variabel setelah menormalkan efek skala.