Vectors & Matrices
Objek Fundamental dan Operasinya
Setiap dataset yang pernah kamu analisis adalah sebuah matriks. Setiap observasi adalah vektor baris, setiap variabel adalah vektor kolom. OLS, logistic regression, PCA, neural networks — semua beroperasi dalam bahasa matriks dan vektor.
Lebih konkret: - Data matrix \(X \in \mathbb{R}^{n \times p}\): \(n\) observasi, \(p\) features - Koefisien OLS: \(\hat{\boldsymbol{\beta}} = (X^TX)^{-1}X^T\mathbf{y}\) — sepenuhnya matrix operations - Forward pass di neural network: serangkaian matrix multiplications - Mahalanobis distance di anomaly detection: \(d^2 = (\mathbf{x} - \boldsymbol{\mu})^T\Sigma^{-1}(\mathbf{x} - \boldsymbol{\mu})\)
Pahami ini dengan baik, dan semua hal lainnya akan jauh lebih masuk akal.
1 1. Vectors
1.1 Definisi
Vektor adalah array terurut dari bilangan real. Kita hampir selalu bekerja dengan column vectors:
\[\mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} \in \mathbb{R}^n\]
Row vector adalah transposenya: \(\mathbf{v}^T = \begin{bmatrix} v_1 & v_2 & \cdots & v_n \end{bmatrix}\).
Konvensi penting: dalam notasi statistik dan ML, vektor selalu column vector kecuali dinyatakan lain. Observasi ke-\(i\) dari data matrix \(X\) adalah row vector \(\mathbf{x}_i^T \in \mathbb{R}^p\).
1.2 Interpretasi Geometris
Vektor \(\mathbf{v} \in \mathbb{R}^2\) bisa diinterpretasikan sebagai panah dari titik asal \(\mathbf{0}\) ke titik \((v_1, v_2)\). Dalam \(\mathbb{R}^n\), vektor adalah panah di ruang \(n\)-dimensi.
Ini bukan sekadar visualisasi. Operasi seperti penjumlahan vektor dan proyeksi punya makna geometris yang sangat intuitif.
1.3 Operasi Dasar
Penjumlahan: dua vektor dijumlahkan komponen per komponen: \[\mathbf{u} + \mathbf{v} = \begin{bmatrix} u_1 + v_1 \\ u_2 + v_2 \\ \vdots \\ u_n + v_n \end{bmatrix}\]
Secara geometris: aturan jajaran genjang (parallelogram rule).
Perkalian skalar: kalikan setiap komponen dengan skalar \(c \in \mathbb{R}\): \[c\mathbf{v} = \begin{bmatrix} cv_1 \\ cv_2 \\ \vdots \\ cv_n \end{bmatrix}\]
\(c > 1\): stretch. \(0 < c < 1\): shrink. \(c < 0\): flip direction.
Kombinasi linear: \(c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_k\mathbf{v}_k\) untuk skalar \(c_i\) dan vektor \(\mathbf{v}_i\). Konsep ini fundamental — column space, spanning sets, dan basis semuanya dibangun dari kombinasi linear.
1.4 Dot Product (Inner Product)
Dot product antara dua vektor \(\mathbf{u}, \mathbf{v} \in \mathbb{R}^n\):
\[\mathbf{u} \cdot \mathbf{v} = \mathbf{u}^T\mathbf{v} = \sum_{i=1}^n u_i v_i = u_1v_1 + u_2v_2 + \cdots + u_nv_n\]
Ini adalah skalar. Interpretasi geometris:
\[\mathbf{u}^T\mathbf{v} = \|\mathbf{u}\|\|\mathbf{v}\|\cos\theta\]
di mana \(\theta\) adalah sudut antara kedua vektor. Dot product mengukur seberapa sejajar dua vektor.
Euclidean norm (panjang vektor) \(\mathbf{v} \in \mathbb{R}^n\):
\[\|\mathbf{v}\| = \sqrt{\mathbf{v}^T\mathbf{v}} = \sqrt{\sum_{i=1}^n v_i^2}\]
Properti: - \(\|\mathbf{v}\| \geq 0\), dan \(\|\mathbf{v}\| = 0 \iff \mathbf{v} = \mathbf{0}\) - \(\|c\mathbf{v}\| = |c|\|\mathbf{v}\|\) - Triangle inequality: \(\|\mathbf{u} + \mathbf{v}\| \leq \|\mathbf{u}\| + \|\mathbf{v}\|\)
Unit vector: \(\hat{\mathbf{v}} = \mathbf{v}/\|\mathbf{v}\|\) punya norm 1.
Di statistik, kita sering pakai \(L^2\) norm untuk OLS loss: \(\|\mathbf{y} - X\hat{\boldsymbol{\beta}}\|^2 = \sum_{i=1}^n (y_i - \hat{y}_i)^2\).
1.5 Orthogonality
Dua vektor orthogonal (tegak lurus) jika:
\[\mathbf{u} \perp \mathbf{v} \iff \mathbf{u}^T\mathbf{v} = 0\]
Ini karena \(\cos(90°) = 0\). Orthogonality adalah properti yang sangat berguna — vektor yang orthogonal “tidak mengandung informasi satu sama lain” dalam arti tertentu.
Contoh: dalam OLS, residuals \(\mathbf{e}\) orthogonal terhadap setiap kolom dari \(X\): \[X^T\mathbf{e} = X^T(\mathbf{y} - X\hat{\boldsymbol{\beta}}) = \mathbf{0}\]
1.6 Projection (Proyeksi)
Proyeksi \(\mathbf{u}\) ke arah \(\mathbf{v}\):
\[\text{proj}_{\mathbf{v}}\mathbf{u} = \frac{\mathbf{u}^T\mathbf{v}}{\|\mathbf{v}\|^2}\mathbf{v} = \frac{\mathbf{u}^T\mathbf{v}}{\mathbf{v}^T\mathbf{v}}\mathbf{v}\]
Ini adalah komponen \(\mathbf{u}\) yang “searah” dengan \(\mathbf{v}\). Residual (komponen yang tegak lurus \(\mathbf{v}\)): \(\mathbf{u} - \text{proj}_{\mathbf{v}}\mathbf{u}\).
OLS adalah generalisasi proyeksi ini ke subspace yang lebih tinggi dimensinya.
2 2. Matrices
2.1 Definisi
Matriks \(A \in \mathbb{R}^{m \times n}\) adalah array persegi panjang dari bilangan real dengan \(m\) baris dan \(n\) kolom:
\[A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix}\]
Elemen \((i,j)\): \(a_{ij}\) atau \([A]_{ij}\). Kolom ke-\(j\) dari \(A\): \(\mathbf{a}_j \in \mathbb{R}^m\).
2.2 Matriks-matriks Spesial
Identity matrix \(I_n \in \mathbb{R}^{n \times n}\): diagonal 1, lainnya 0. Sifat: \(AI = IA = A\).
Diagonal matrix: hanya elemen diagonal yang nonzero. \(\text{diag}(d_1, \ldots, d_n)\).
Symmetric matrix: \(A = A^T\), artinya \(a_{ij} = a_{ji}\). Covariance matrices selalu symmetric. Symmetric matrices punya sifat luar biasa: eigenvalues selalu real, eigenvectors selalu orthogonal.
Orthogonal matrix \(Q\): \(Q^TQ = QQ^T = I\), artinya \(Q^{-1} = Q^T\). Kolom-kolomnya adalah orthonormal vectors. Transformasi orthogonal preserve panjang dan sudut — mereka hanya merotasi (dan mungkin merefleksikan), tidak meng-stretch.
Triangular matrix: upper triangular (\(a_{ij} = 0\) untuk \(i > j\)) atau lower triangular (\(a_{ij} = 0\) untuk \(i < j\)). Berguna dalam decompositions.
2.3 Transpose
Transpose \(A^T\): flip matriks di diagonal utama. Elemen \((i,j)\) dari \(A^T\) adalah \(a_{ji}\).
Properti penting: - \((A^T)^T = A\) - \((A + B)^T = A^T + B^T\) - (AB)^T = B^T A^T ← urutan terbalik! Ini sering bikin salah. - \((cA)^T = cA^T\)
2.4 Matrix Multiplication
Hasil kali \(C = AB\) di mana \(A \in \mathbb{R}^{m \times k}\) dan \(B \in \mathbb{R}^{k \times n}\) memberikan \(C \in \mathbb{R}^{m \times n}\).
Ukuran inner dimensions harus match: \((m \times k)(k \times n) = (m \times n)\).
Elemen \((i,j)\) dari \(C\): \[c_{ij} = \sum_{l=1}^k a_{il} b_{lj} = \mathbf{a}_i^T \mathbf{b}_j\]
(dot product dari baris ke-\(i\) dari \(A\) dengan kolom ke-\(j\) dari \(B\)).
Interpretasi geometris: matrix multiplication adalah komposisi linear transformations. \(B\) dulu, lalu \(A\). \(AB\mathbf{x}\) berarti: transformasi \(\mathbf{x}\) dengan \(B\), lalu hasilnya transformasi dengan \(A\).
\[AB \neq BA \text{ secara umum}\]
Bahkan ketika keduanya terdefinisi, \(AB\) dan \(BA\) hampir tidak pernah sama. Contoh penting: \((X^TX)^{-1}X^T \neq X^T(X^TX)^{-1}\) — keduanya berbeda dimensi.
Tapi ada beberapa kasus spesial di mana \(AB = BA\): ketika \(A\) dan \(B\) diagonal, atau ketika satu adalah fungsi dari yang lain (\(A^kA^l = A^{k+l}\)), dll.
3 3. Worked Examples
Hitung \(C = AB\) di mana: \[A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \in \mathbb{R}^{2 \times 3}, \quad B = \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} \in \mathbb{R}^{3 \times 2}\]
Hasil \(C \in \mathbb{R}^{2 \times 2}\).
\(c_{11}\): baris 1 dari \(A\) \(\cdot\) kolom 1 dari \(B\): \[c_{11} = (1)(7) + (2)(9) + (3)(11) = 7 + 18 + 33 = 58\]
\(c_{12}\): baris 1 dari \(A\) \(\cdot\) kolom 2 dari \(B\): \[c_{12} = (1)(8) + (2)(10) + (3)(12) = 8 + 20 + 36 = 64\]
\(c_{21}\): baris 2 dari \(A\) \(\cdot\) kolom 1 dari \(B\): \[c_{21} = (4)(7) + (5)(9) + (6)(11) = 28 + 45 + 66 = 139\]
\(c_{22}\): baris 2 dari \(A\) \(\cdot\) kolom 2 dari \(B\): \[c_{22} = (4)(8) + (5)(10) + (6)(12) = 32 + 50 + 72 = 154\]
Jadi: \[C = AB = \begin{bmatrix} 58 & 64 \\ 139 & 154 \end{bmatrix}\]
Verifikasi di R:
A <- matrix(c(1,2,3,4,5,6), nrow=2, byrow=TRUE)
B <- matrix(c(7,8,9,10,11,12), nrow=3, byrow=TRUE)
C <- A %*% B
print(C)
# Output:
# [,1] [,2]
# [1,] 58 64
# [2,] 139 154Buktikan bahwa \(d^2 = (\mathbf{x} - \boldsymbol{\mu})^T\Sigma^{-1}(\mathbf{x} - \boldsymbol{\mu})\) adalah skalar, dan verifikasi secara numeris.
Bukti dimensi: - \((\mathbf{x} - \boldsymbol{\mu}) \in \mathbb{R}^p\), jadi sebagai column vector: \((p \times 1)\) - \((\mathbf{x} - \boldsymbol{\mu})^T\): \((1 \times p)\) - \(\Sigma^{-1} \in \mathbb{R}^{p \times p}\): \((p \times p)\) - Produk \((\mathbf{x} - \boldsymbol{\mu})^T\Sigma^{-1}\): \((1 \times p)(p \times p) = (1 \times p)\) - Produk akhir \((\mathbf{x} - \boldsymbol{\mu})^T\Sigma^{-1}(\mathbf{x} - \boldsymbol{\mu})\): $(1 p)(p ) = (1 ) = $ skalar ✓
Makna statistik: Mahalanobis distance mengukur jarak titik \(\mathbf{x}\) dari mean \(\boldsymbol{\mu}\) dalam satuan “standar deviasi”, dengan memperhitungkan korelasi antar variabel. Ketika \(\Sigma = I\) (variabel independent, variance 1), ini reduce ke Euclidean distance.
Verifikasi R:
# Setup: 2D data
mu <- c(1, 2)
Sigma <- matrix(c(4, 1, 1, 2), nrow = 2) # covariance matrix
Sigma_inv <- solve(Sigma)
x <- c(3, 4)
# Mahalanobis distance
diff <- x - mu
d_squared <- t(diff) %*% Sigma_inv %*% diff
cat("d^2 =", d_squared, "\n")
cat("Dimensi hasil:", dim(d_squared), "\n") # 1x1 matrix
# Atau pakai fungsi bawaan R
d_builtin <- mahalanobis(x, mu, Sigma)
cat("Built-in Mahalanobis:", d_builtin, "\n")
# Bandingkan: Euclidean distance
d_euclidean <- sqrt(sum((x - mu)^2))
cat("Euclidean distance:", d_euclidean, "\n")
# Mahalanobis berbeda karena Sigma != IOutput yang diharapkan: d^2 adalah nilai tunggal (skalar), bukan matriks.
4 4. Operasi Matriks di R
# === Membuat matriks ===
A <- matrix(c(1,2,3,4,5,6), nrow=2, byrow=TRUE)
# A =
# [1,] 1 2 3
# [2,] 4 5 6
B <- matrix(c(7,8,9,10,11,12), nrow=3, byrow=TRUE)
# === Matrix multiplication ===
A %*% B # matrix product (BUKAN element-wise!)
A * A # element-wise multiplication (jarang dipakai)
# === Transpose ===
t(A) # transpose of A
# === Gram matrix (penting banget di OLS!) ===
crossprod(A) # t(A) %*% A (lebih efficient)
tcrossprod(A) # A %*% t(A)
# === Inverse (akan dibahas di modul 03) ===
M <- matrix(c(2,1,1,3), nrow=2)
solve(M) # inverse dari M
solve(M) %*% M # harus = I
# === Eigendecomposition (modul 04) ===
eigen(M)
# === Dot product dua vektor ===
u <- c(1, 2, 3)
v <- c(4, 5, 6)
sum(u * v) # dot product
t(u) %*% v # sama, tapi returns matrix (1x1)
crossprod(u, v) # juga sama
# === Norm ===
sqrt(sum(u^2)) # Euclidean norm
norm(as.matrix(u), type="F") # atau pakai norm()
# === Projection ===
proj <- function(u, v) {
(sum(u*v) / sum(v*v)) * v
}
proj(c(3,1), c(1,0)) # proyeksi (3,1) ke sumbu x → (3,0)5 5. Koneksi ke Econometrics
Dalam regresi linear dengan \(n\) observasi dan \(p\) predictors (termasuk intercept):
\[X = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1,p-1} \\ 1 & x_{21} & x_{22} & \cdots & x_{2,p-1} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & x_{n2} & \cdots & x_{n,p-1} \end{bmatrix} \in \mathbb{R}^{n \times p}\]
Beberapa matrix products penting:
Gram matrix \(X^TX \in \mathbb{R}^{p \times p}\): mengandung sum of squares dan cross-products dari semua predictors. Elemen \((j,k)\): \(\sum_{i=1}^n x_{ij}x_{ik}\).
Cross-product \(X^T\mathbf{y} \in \mathbb{R}^p\): elemen ke-\(j\) adalah \(\sum_{i=1}^n x_{ij}y_i\) — covariance (tidak ter-normalize) antara predictor ke-\(j\) dan \(y\).
OLS estimator: \(\hat{\boldsymbol{\beta}} = (X^TX)^{-1}X^T\mathbf{y}\) — system of linear equations yang di-solve oleh \((X^TX)\).
Fitted values: \(\hat{\mathbf{y}} = X\hat{\boldsymbol{\beta}} = X(X^TX)^{-1}X^T\mathbf{y} = H\mathbf{y}\)
di mana \(H = X(X^TX)^{-1}X^T\) adalah hat matrix (projection matrix). \(H\) adalah symmetric dan idempotent (\(H^2 = H\)).
# OLS dari scratch menggunakan matrix operations
n <- 100; p <- 3
X <- cbind(1, matrix(rnorm(n*(p-1)), n, p-1))
beta_true <- c(1, 2, -1)
y <- X %*% beta_true + rnorm(n)
# OLS estimator
beta_hat <- solve(t(X) %*% X) %*% t(X) %*% y
cat("beta_hat:", beta_hat, "\n")
# Sama dengan lm()
lm_fit <- lm(y ~ X[,-1])
cat("lm coef:", coef(lm_fit), "\n")6 6. Practice Problems
Problem 1: Hitung dot product dan norm
Given \(\mathbf{u} = \begin{bmatrix}3 \\ 4\end{bmatrix}\) dan \(\mathbf{v} = \begin{bmatrix}1 \\ -2\end{bmatrix}\): - (a) Hitung \(\mathbf{u}^T\mathbf{v}\) - (b) Hitung \(\|\mathbf{u}\|\) dan \(\|\mathbf{v}\|\) - (c) Apakah \(\mathbf{u}\) dan \(\mathbf{v}\) orthogonal? - (d) Hitung \(\text{proj}_{\mathbf{v}}\mathbf{u}\)
Solusi Problem 1: - (a) \(\mathbf{u}^T\mathbf{v} = (3)(1) + (4)(-2) = 3 - 8 = -5\) - (b) \(\|\mathbf{u}\| = \sqrt{9+16} = 5\), \(\|\mathbf{v}\| = \sqrt{1+4} = \sqrt{5}\) - (c) Tidak, karena \(\mathbf{u}^T\mathbf{v} = -5 \neq 0\) - (d) \(\text{proj}_{\mathbf{v}}\mathbf{u} = \frac{-5}{5}\mathbf{v} = -\begin{bmatrix}1 \\ -2\end{bmatrix} = \begin{bmatrix}-1 \\ 2\end{bmatrix}\)
Problem 2: Buktikan \((AB)^T = B^TA^T\)
Untuk matriks \(A \in \mathbb{R}^{m \times k}\) dan \(B \in \mathbb{R}^{k \times n}\):
Bukti: Elemen \((i,j)\) dari \((AB)^T\) adalah elemen \((j,i)\) dari \(AB\): \[[(AB)^T]_{ij} = [AB]_{ji} = \sum_{l=1}^k a_{jl}b_{li}\]
Elemen \((i,j)\) dari \(B^TA^T\): \[[B^TA^T]_{ij} = \sum_{l=1}^k [B^T]_{il}[A^T]_{lj} = \sum_{l=1}^k b_{li}a_{jl}\]
Keduanya sama (jumlah bilangan real komutatif). \(\square\)
Implikasi penting: \((X^TX)^T = X^T(X^T)^T = X^TX\) → Gram matrix selalu symmetric.
Problem 3: Kapan \(AB = BA\)?
\(AB = BA\) ketika: 1. Salah satu adalah identity: \(AI = IA = A\) 2. Salah satu adalah scalar multiple of I: \(A(cI) = cA = (cI)A\) 3. Keduanya diagonal: diagonal matrices commute 4. Salah satu adalah fungsi polinomial dari yang lain: \(A \cdot f(A) = f(A) \cdot A\) 5. Keduanya orthogonal projections ke subspace yang sama
Secara umum, \(AB = BA\) adalah kasus khusus, bukan rule. Selalu hati-hati dengan urutan dalam perkalian matriks!
Problem Bonus (R): Verifikasi bahwa hat matrix \(H = X(X^TX)^{-1}X^T\) adalah: - (a) Symmetric: \(H^T = H\) - (b) Idempotent: \(H^2 = H\) - (c) Rank = \(p\) (jumlah kolom \(X\))
n <- 50; p <- 3
X <- cbind(1, matrix(rnorm(n*(p-1)), n, p-1))
H <- X %*% solve(t(X) %*% X) %*% t(X)
# (a) Symmetric
max(abs(H - t(H))) # harus mendekati 0
# (b) Idempotent
max(abs(H %*% H - H)) # harus mendekati 0
# (c) Rank
qr(H)$rank # harus = p = 3