💡 Aljabar Matriks, Konsep Jarak, dan Vektor Rata-rata
Aljabar Matriks, Konsep Jarak, dan Vektor Rata-rata
Disusun oleh Griselda Haifa Berwyn Pasya
Tanggal: 2025-09-09
::: Matriks merupakan salah satu elemen penting dalam aljabar linear yang memiliki peran luas dalam sains, teknik, hingga ilmu sosial. Operasi dasar matriks seperti penjumlahan, pengurangan, perkalian, transpose, invers, dan determinan menjadi fondasi utama dalam menyelesaikan berbagai persoalan matematis maupun komputasional. Selain itu, konsep dekomposisi matriks juga berperan penting karena memungkinkan suatu matriks kompleks diuraikan menjadi bentuk yang lebih sederhana, misalnya melalui Singular Value Decomposition (SVD) yang membagi sebuah matriks menjadi tiga komponen. Teknik ini mempermudah analisis data serta penyelesaian sistem persamaan linear. Di sisi lain, dalam analisis data dan statistika multivariat, konsep jarak juga diperlukan untuk menilai kedekatan antar objek, baik menggunakan jarak Euclidean, Manhattan, Minkowski, maupun Mahalanobis. :::
Penjumlahan matriks adalah operasi yang dilakukan dengan menambahkan elemen-elemen matriks yang berada pada posisi yang sama. Operasi ini hanya dapat dilakukan jika kedua matriks memiliki ordo yang sama (jumlah baris dan kolom sama). \[ (A + B)_{ij} = a_{ij} + b_{ij} \] ### Pengurangan
Pengurangan matriks adalah operasi yang dilakukan dengan mengurangkan elemen-elemen matriks pada posisi yang sama. Sama seperti penjumlahan, operasi ini hanya bisa dilakukan jika kedua matriks memiliki ordo yang sama. \[ (A - B)_{ij} = a_{ij} - b_{ij} \] ### Perkalian Matriks (Dot Products)
Perkalian dua matriks dilakukan dengan mengalikan elemen baris dari matriks pertama dengan elemen kolom dari matriks kedua, lalu menjumlahkan hasilnya. Operasi ini hanya dapat dilakukan jika jumlah kolom matriks pertama sama dengan jumlah baris matriks kedua. \[ (AB)_{ij} = \sum_{k=1}^n a_{ik} b_{kj} \] ### Perkalian Antar Elemen
Perkalian antar elemen (disebut juga Hadamard Product) adalah operasi mengalikan elemen-elemen matriks yang berada pada posisi yang sama. Operasi ini hanya dapat dilakukan jika kedua matriks memiliki ordo yang sama. \[ C_{ij} = a_{ij} \times b_{ij}\\ perkalian\ dengan\ skalar\ ,\ (kA)_{ij} = k \cdot a_{ij} \] ### Transpose
Transpose matriks adalah operasi yang dilakukan dengan menukar posisi baris menjadi kolom atau sebaliknya. \[ X = \begin{bmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{bmatrix} ,\quad X^\top = \begin{bmatrix} x_{11} & x_{21} & x_{31} \\ x_{12} & x_{22} & x_{32} \\ x_{13} & x_{23} & x_{33} \end{bmatrix} \] ### Invers
Invers matriks adalah matriks balikan yang, apabila dikalikan dengan matriks asalnya, akan menghasilkan matriks identitas. Tidak semua matriks memiliki invers; syaratnya adalah matriks harus persegi (ordo𝑛×𝑛) dan memiliki determinan ≠ 0. \[ A^{-1} = \frac{1}{\det(A)} \cdot \text{adj}(A) \] ### Determinan
Determinan adalah suatu nilai skalar yang diperoleh dari perhitungan elemen-elemen matriks persegi. Determinan sangat penting karena dapat digunakan untuk mengetahui apakah suatu matriks dapat dibalik (invertible) atau tidak. \[ \det(A) = \begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc \\det(A) = \begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg) \] ## Contoh dan Implementasi
Diberikan matriks X dan Y, yaitu
X = matrix(c(2, 5, 7,
4, 3, 6,
8, 1, 9), nrow = 3, ncol = 3)
Y = matrix(c(6, 4, 2,
7, 5, 3,
9, 8, 1), nrow = 3, ncol = 3, byrow = TRUE)
X; Y
## [,1] [,2] [,3]
## [1,] 2 4 8
## [2,] 5 3 1
## [3,] 7 6 9
## [,1] [,2] [,3]
## [1,] 6 4 2
## [2,] 7 5 3
## [3,] 9 8 1
X + Y
## [,1] [,2] [,3]
## [1,] 8 8 10
## [2,] 12 8 4
## [3,] 16 14 10
X-Y
## [,1] [,2] [,3]
## [1,] -4 0 6
## [2,] -2 -2 -2
## [3,] -2 -2 8
X %*% Y
## [,1] [,2] [,3]
## [1,] 112 92 24
## [2,] 60 43 20
## [3,] 165 130 41
Y %*% X
## [,1] [,2] [,3]
## [1,] 46 48 70
## [2,] 60 61 88
## [3,] 65 66 89
X * Y
## [,1] [,2] [,3]
## [1,] 12 16 16
## [2,] 35 15 3
## [3,] 63 48 9
3 * X
## [,1] [,2] [,3]
## [1,] 6 12 24
## [2,] 15 9 3
## [3,] 21 18 27
3 * Y
## [,1] [,2] [,3]
## [1,] 18 12 6
## [2,] 21 15 9
## [3,] 27 24 3
t(X)
## [,1] [,2] [,3]
## [1,] 2 5 7
## [2,] 4 3 6
## [3,] 8 1 9
t(Y)
## [,1] [,2] [,3]
## [1,] 6 7 9
## [2,] 4 5 8
## [3,] 2 3 1
solve(X) # inv(X)
## [,1] [,2] [,3]
## [1,] -0.5526316 -0.3157895 0.5263158
## [2,] 1.0000000 1.0000000 -1.0000000
## [3,] -0.2368421 -0.4210526 0.3684211
solve(Y) # inv(Y)
## [,1] [,2] [,3]
## [1,] 1.5833333 -1 -0.1666667
## [2,] -1.6666667 1 0.3333333
## [3,] -0.9166667 1 -0.1666667
det(X)
## [1] -38
det(Y)
## [1] -12
Eigen value (nilai eigen) adalah suatu bilangan skalar 𝜆 yang menunjukkan seberapa besar perubahan yang dialami suatu vektor ketika dikenakan transformasi linear oleh sebuah matriks 𝐴. Dalam konteks analisis data, eigen value juga dapat diartikan sebagai jumlah variasi yang mampu dijelaskan oleh suatu komponen utama.
\[ A v = \lambda v \] Secara matematis, eigen value diperoleh dari persamaan: \[ \det(A - \lambda I) = 0 \]
Eigen vector (vektor eigen) adalah vektor tak nol 𝑣 yang arah utamanya tidak berubah ketika dikenakan transformasi linear oleh sebuah matriks 𝐴. Yang berubah hanyalah panjang (magnitudo) vektor, sedangkan arahnya tetap sama. Eigen vector ini menunjukkan arah utama dari transformasi yang dilakukan oleh matriks.
\[ A v = \lambda v \]
Pasangan eigen adalah kombinasi antara eigen value 𝜆 dengan eigen vector 𝑣 yang saling berhubungan dan memenuhi persamaan. \[ (\lambda, v) \]
Diberikan sebuah matriks berukuran 3 x 3, yaitu
B = matrix(c(5, 1, 2,
0, 7, 3,
4, 6, 8), nrow = 3, byrow = TRUE)
eigB <- eigen(B)
eigB$values
## [1] 12.571658 5.191209 2.237133
eigB$vectors
## [,1] [,2] [,3]
## [1,] 0.2831088 0.6778538 -0.3869248
## [2,] 0.4546889 -0.6296106 -0.4914489
## [3,] 0.8444569 0.3796113 0.7802353
for (i in seq_along(eigB$values)) {
cat("\nPasangan ke-", i, ":\n")
cat("Eigenvalue =", eigB$values[i], "\n")
cat("Eigenvector =\n")
print(eigB$vectors[, i])
}
##
## Pasangan ke- 1 :
## Eigenvalue = 12.57166
## Eigenvector =
## [1] 0.2831088 0.4546889 0.8444569
##
## Pasangan ke- 2 :
## Eigenvalue = 5.191209
## Eigenvector =
## [1] 0.6778538 -0.6296106 0.3796113
##
## Pasangan ke- 3 :
## Eigenvalue = 2.237133
## Eigenvector =
## [1] -0.3869248 -0.4914489 0.7802353
Singular Value Decomposition (SVD) adalah dekomposisi atau pemecahan sebuah matriks menjadi tiga matriks lain dengan sifat tertentu. Dengan SVD, sebuah matriks kompleks dapat diuraikan menjadi bentuk yang lebih sederhana sehingga lebih mudah dianalisis, terutama dalam bidang analisis data, kompresi citra, hingga penyelesaian sistem persamaan linear.Secara umum, setiap matriks \[ A \in \mathbb{R}^{m \times n} \] dapat dituliskan sebagai: \[ A = UDV^ \]
dengan : \[ U \in \mathbb{R}^{m \times m}, U^TU = I_m\ (ortogonal)\\V \in \mathbb{R}^{n \times n}\, \ V^TV = I_n\ (ortogonal) \\D \in \mathbb{R}^{m \times n}\\ diagonal\ dengan\ elemen\ singular\ value: \ D = \begin{bmatrix} \ D_1 & 0 & \cdots & 0 \\ 0 & \ D_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \ D_r \end{bmatrix} \]
diberikan matriks sebagai berikut :
# Matriks A
A = matrix(c(2, 5, -3,
4, -2, 6,
-1, 7, 3,
5, 0, -4), 4, 3, byrow=TRUE)
A
## [,1] [,2] [,3]
## [1,] 2 5 -3
## [2,] 4 -2 6
## [3,] -1 7 3
## [4,] 5 0 -4
# Hitung SVD
svd_result <- svd(A)
# SVD
singular_value <- svd_result$d # singular values
U <- svd_result$u # left singular vectors
V <- svd_result$v # right singular vectors
U
## [,1] [,2] [,3]
## [1,] -0.6291453 -0.1332202 -0.3231346
## [2,] 0.5221064 0.3926413 -0.7274486
## [3,] -0.5525686 0.6949344 -0.1472835
## [4,] -0.1620156 -0.5874958 -0.5871202
V
## [,1] [,2] [,3]
## [1,] 0.0634913 -0.2807595 -0.9576758
## [2,] -0.8934428 0.4115797 -0.1798946
## [3,] 0.4446670 0.8670503 -0.2247108
singular_value
## [1] 9.018953 8.292823 6.624769
Jarak Euclidean merupakan jarak lurus atau garis terpendek antara dua titik dalam ruang \(p\)-dimensi. Maka jarak Euclidean antara x dan y didefinisikan sebagai: \[ d_{\text{Euclidean}}(x,y) = \sqrt{\sum_{i=1}^p (x_i - y_i)^2} \]
Jarak Manhattan (sering juga disebut city block distance atau taxicab distance) adalah jumlah dari perbedaan absolut antara koordinat dua titik dalam ruang \(p\)-dimensi. \[ d_{\text{Manhattan}}(x,y) = \sum_{i=1}^p |x_i - y_i| \] ### Jarak Chebyshev
Jarak Chebyshev adalah jarak yang ditentukan berdasarkan selisih terbesar dari semua koordinat antar dua titik dalam ruang p-dimensi. \[ d_{\text{Chebyshev}}(x,y) = \max_{i=1,\dots,p} |x_i - y_i| \]
Jarak Mahalanobis adalah ukuran jarak yang memperhitungkan varians dan korelasi antar variabel dalam data. \[ d_{\text{Mahalanobis}}(x,y) = \sqrt{(x - y)^T S^{-1} (x - y)} \]
dengan \(S\) adalah matriks kovarians dari data.
Jarak Minkowski adalah bentuk umum dari berbagai ukuran jarak, yang mencakup beberapa ukuran jarak lain sebagai kasus khusus, seperti jarak Manhattan, jarak Euclidean, dan jarak Chebyshev. \[ d_{\text{Minkowski}}(x,y;q) = \left( \sum_{i=1}^p |x_i - y_i|^q \right)^{\frac{1}{q}} \]
catatan: - \(q=1\) ⟶ Jarak Manhattan - \(q=2\) ⟶ Jarak Euclidean - \(q \to \infty\) ⟶ Jarak Chebyshev
# Data eksplisit (5 observasi, 3 variabel)
data <- matrix(c(
8,3,6,
4,7,9,
5,2,8,
7,6,4,
3,5,7
), nrow = 5, byrow = TRUE)
colnames(data) <- c("X1", "X2", "X3")
rownames(data) <- paste("Obs", 1:5, sep = "")
data
## X1 X2 X3
## Obs1 8 3 6
## Obs2 4 7 9
## Obs3 5 2 8
## Obs4 7 6 4
## Obs5 3 5 7
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.5.1
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
dist.eucl <- dist(data, method = "euclidean"); dist.eucl
## Obs1 Obs2 Obs3 Obs4
## Obs2 6.403124
## Obs3 3.741657 5.196152
## Obs4 3.741657 5.916080 6.000000
## Obs5 5.477226 3.000000 3.741657 5.099020
fviz_dist(dist.eucl)
Pada jarak Euclidean, terlihat bahwa observasi 2 dan observasi 3
memiliki jarak yang paling dekat. Hal ini ditunjukkan oleh warna yang
lebih terang pada heatmap, sehingga dapat disimpulkan bahwa keduanya
memiliki profil variabel yang paling mirip secara keseluruhan.
Sebaliknya, observasi 1 tampak cukup jauh dari observasi lainnya karena
warna yang muncul lebih gelap, sehingga posisi observasi 1 relatif
menyendiri dibanding kelompok lain. Sementara itu, observasi 4 berada
pada posisi tengah, tidak sedekat pasangan observasi 2 dan 3, tetapi
juga tidak sejauh observasi 1 terhadap yang lain. Dengan demikian,
Euclidean menegaskan pola utama bahwa Obs2–Obs3 membentuk pasangan
paling mirip, sedangkan Obs1 cenderung berbeda sendiri.
dist.man <- dist(data, method = "manhattan"); dist.man
## Obs1 Obs2 Obs3 Obs4
## Obs2 11
## Obs3 6 7
## Obs4 6 9 10
## Obs5 8 5 6 8
fviz_dist(dist.man)
Pada jarak Manhattan, pola yang muncul secara umum masih sama, yakni
observasi 2 dan 3 tetap menjadi pasangan paling mirip, sementara
observasi 1 memiliki jarak yang cukup jauh dibandingkan dengan keduanya.
Namun, pada jarak Manhattan, perbedaan antara observasi 1 dan observasi
lainnya tampak semakin besar. Hal ini terjadi karena Manhattan
menjumlahkan seluruh perbedaan absolut antar variabel, sehingga meskipun
setiap variabel hanya sedikit berbeda, akumulasi perbedaan tersebut
membuat jarak akhir menjadi lebih besar. Observasi 4 kembali terlihat
berada di posisi menengah, tidak menempel dengan pasangan tertentu,
tetapi juga tidak se-ekstrem perbedaan yang ditunjukkan oleh observasi
1.
dist.cheb <- dist(data, method = "maximum"); dist.cheb
## Obs1 Obs2 Obs3 Obs4
## Obs2 4
## Obs3 3 5
## Obs4 3 5 4
## Obs5 5 2 3 4
fviz_dist(dist.cheb)
Pada jarak Chebyshev, pola hubungan antar observasi relatif lebih datar dibandingkan Euclidean maupun Manhattan. Variasi warna pada heatmap tampak tidak terlalu ekstrem, namun tetap terlihat bahwa observasi 2 dan 3 memiliki kedekatan paling tinggi. Observasi 1 kembali muncul sebagai observasi yang paling jauh dari yang lain, meskipun perbedaan warnanya tidak setajam dua ukuran jarak sebelumnya. Observasi 4 sekali lagi menempati posisi tengah. Dengan kata lain, Chebyshev menghasilkan gambaran yang lebih terkompres, tetapi pola utama hubungan antar observasi tetap sama: Obs2 dan Obs3 paling dekat, Obs1 paling jauh, dan Obs4 berada di posisi menengah.
library(StatMatch)
## Warning: package 'StatMatch' was built under R version 4.5.1
## Loading required package: proxy
## Warning: package 'proxy' was built under R version 4.5.1
##
## Attaching package: 'proxy'
## The following objects are masked from 'package:stats':
##
## as.dist, dist
## The following object is masked from 'package:base':
##
## as.matrix
## Loading required package: survey
## Warning: package 'survey' was built under R version 4.5.1
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
##
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
##
## dotchart
## Loading required package: lpSolve
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
dist.mah <- mahalanobis.dist(data); dist.mah
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 2.541944 1.751754 2.057703 2.821343
## Obs2 2.541944 0.000000 2.653116 2.740384 2.630162
## Obs3 1.751754 2.653116 0.000000 2.814525 1.979179
## Obs4 2.057703 2.740384 2.814525 0.000000 2.229480
## Obs5 2.821343 2.630162 1.979179 2.229480 0.000000
dist.mah_matrix <- as.matrix(dist.mah);dist.mah_matrix
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 2.541944 1.751754 2.057703 2.821343
## Obs2 2.541944 0.000000 2.653116 2.740384 2.630162
## Obs3 1.751754 2.653116 0.000000 2.814525 1.979179
## Obs4 2.057703 2.740384 2.814525 0.000000 2.229480
## Obs5 2.821343 2.630162 1.979179 2.229480 0.000000
# Fungsi jarak Minkowski untuk matriks data
minkowski_matrix <- function(data, q) {
n <- nrow(data)
D <- matrix(0, n, n)
for (i in 1:n) {
for (j in 1:n) {
D[i, j] <- sum(abs(data[i, ] - data[j, ])^q)^(1/q)
}
}
rownames(D) <- rownames(data)
colnames(D) <- rownames(data)
return(D)
}
# Hitung matriks jarak Minkowski untuk q = 3
dist.mink <- minkowski_matrix(data, q = 3)
dist.mink
## Obs1 Obs2 Obs3 Obs4 Obs5
## Obs1 0.000000 5.371685 3.301927 3.301927 5.117230
## Obs2 5.371685 0.000000 5.026526 5.348481 2.571282
## Obs3 3.301927 5.026526 0.000000 5.142563 3.301927
## Obs4 3.301927 5.348481 5.142563 0.000000 4.514357
## Obs5 5.117230 2.571282 3.301927 4.514357 0.000000
Vektor rata-rata merupakan vektor yang elemen-elemennya berisi nilai rata-rata dari setiap variabel pada suatu himpunan data. Vektor ini menggambarkan titik pusat atau representasi posisi tengah dari distribusi data. Jika \(X\) adalah matriks data berukuran \(m \times n\), maka vektor rata-rata:
\[ \bar{x} = \begin{bmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{bmatrix} = \frac{1}{n} \sum_{i=1}^n x_i \]
Matriks kovarians adalah matriks yang menunjukkan seberapa besar penyebaran data pada setiap variabel serta hubungan antar variabel. Elemen pada diagonal utama menyatakan varians dari masing-masing variabel, sedangkan elemen-elemen di luar diagonal utama merepresentasikan kovarians antar pasangan variabel.
\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]
atau dalam bentuk matriks:\
\[ 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} \]
Matriks korelasi merepresentasikan kekuatan dan arah hubungan linier antar variabel dengan skala standar, yaitu bernilai antara −1 hingga 1. Pada diagonal utamanya, nilainya selalu 1 karena setiap variabel memiliki korelasi sempurna dengan dirinya sendiri. $$ R = D ^{-1} SD ^{-1}\ dengan D = (, , , ).
\atau secara elemen:\
r_{ij} = $$
Matriks standardisasi merupakan hasil transformasi data ke dalam bentuk z-score, sehingga setiap variabel memiliki nilai rata-rata sama dengan 0 dan varians sama dengan 1. Proses ini dilakukan agar variabel dengan satuan atau skala yang berbeda dapat dibandingkan secara setara. Digunakan agar variabel dengan skala berbeda dapat dibandingkan. Untuk data \(X\), matriks data terstandardisasi \(Z\):
\[ Z = (X - \mathbf{1}\bar{x}^T) D_s^{-1} \]
dengan \(\mathbf{1}\) adalah vektor satuan, dan
\[ D_s = \text{diag}(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}) \]
Diberikan data sebagai berikut: jumlah Kegiatan Ekstrakurikuler (Ekskul), Jam Tidur (SleepHours), dan Nilai Ujian (ExamScore) dari beberapa siswa:
Ekskul <- c(3, 5, 2, 4, 6)
SleepHours <- c(7, 6, 8, 5, 9)
ExamScore <- c(75, 82, 70, 88, 80)
data_b <- as.matrix(cbind(Ekskul, SleepHours, ExamScore)); data_b
## Ekskul SleepHours ExamScore
## [1,] 3 7 75
## [2,] 5 6 82
## [3,] 2 8 70
## [4,] 4 5 88
## [5,] 6 9 80
vecMeans = as.matrix(colMeans(data_b)); vecMeans
## [,1]
## Ekskul 4
## SleepHours 7
## ExamScore 79
vecRata = matrix(c(mean(Ekskul), mean(SleepHours), mean(ExamScore)), nrow=3, ncol=1); vecRata
## [,1]
## [1,] 4
## [2,] 7
## [3,] 79
varkov = cov(data_b); varkov
## Ekskul SleepHours ExamScore
## Ekskul 2.50 0.25 6.75
## SleepHours 0.25 2.50 -7.00
## ExamScore 6.75 -7.00 47.00
korel = cor(data_b); korel
## Ekskul SleepHours ExamScore
## Ekskul 1.0000000 0.1000000 0.6227086
## SleepHours 0.1000000 1.0000000 -0.6457718
## ExamScore 0.6227086 -0.6457718 1.0000000
n = nrow(data_b); n
## [1] 5
u = matrix(1, n, 1); u
## [,1]
## [1,] 1
## [2,] 1
## [3,] 1
## [4,] 1
## [5,] 1
xbar = cbind((1/n) * t(u) %*% data_b); xbar
## Ekskul SleepHours ExamScore
## [1,] 4 7 79
D = data_b - u %*% xbar; D
## Ekskul SleepHours ExamScore
## [1,] -1 0 -4
## [2,] 1 -1 3
## [3,] -2 1 -9
## [4,] 0 -2 9
## [5,] 2 2 1
S = (1/(n-1)) * t(D) %*% D; S
## Ekskul SleepHours ExamScore
## Ekskul 2.50 0.25 6.75
## SleepHours 0.25 2.50 -7.00
## ExamScore 6.75 -7.00 47.00
Ds = diag(sqrt(diag(S))); Ds
## [,1] [,2] [,3]
## [1,] 1.581139 0.000000 0.000000
## [2,] 0.000000 1.581139 0.000000
## [3,] 0.000000 0.000000 6.855655
R = solve(Ds) %*% S %*% solve(Ds); R
## [,1] [,2] [,3]
## [1,] 1.0000000 0.1000000 0.6227086
## [2,] 0.1000000 1.0000000 -0.6457718
## [3,] 0.6227086 -0.6457718 1.0000000