Eigenvalues & Eigenvectors
Arah-arah Khusus dalam Ruang Transformasi
Eigenvalues muncul di mana-mana dalam data science dan econometrics:
- PCA: eigendecomposition dari sample covariance matrix menentukan principal components dan variance explained
- Stability AR process: akar dari characteristic equation (eigenvalues companion matrix) harus di dalam unit circle untuk stationarity
- MLE second-order conditions: Hessian dari log-likelihood harus negative definite (semua eigenvalues negatif) di titik MLE untuk memastikan itu maximum bukan saddle point
- Google PageRank: dominant eigenvector dari transition matrix adalah ranking pages
- Spectral clustering: eigenvalues dari graph Laplacian menentukan cluster structure
- Ridge regression: eigenvalues dari \(X^TX\) menjelaskan kenapa ridge bekerja — regularization “menstabilkan” eigenvalues kecil
1 1. Intuisi Dulu: Apa Itu Eigenvector?
Bayangkan transformasi linear \(T(\mathbf{x}) = A\mathbf{x}\). Untuk sebagian besar vektor \(\mathbf{x}\), transformasi ini mengubah arah sekaligus panjang \(\mathbf{x}\).
Tapi ada vektor-vektor istimewa yang hanya berubah panjangnya, tidak arahnya. Vektor-vektor inilah yang disebut eigenvectors, dan faktor skalanya disebut eigenvalues.
Analogi yang bagus: bayangkan kamu menarik-tarik lembaran karet elastis. Sebagian besar titik akan bergerak ke berbagai arah. Tapi ada sumbu-sumbu khusus — kalau kamu tarik sepanjang sumbu itu, titik-titik hanya bergerak sepanjang sumbu yang sama (hanya stretch atau compress). Sumbu-sumbu itu adalah eigenvectors, faktor stretchnya adalah eigenvalues.
Konsekuensi penting: eigenvectors mengungkapkan “struktur alami” dari suatu transformasi — arah-arah fundamental yang paling bermakna. Inilah kenapa PCA, yang mencari arah-arah dengan variansi terbesar, pada dasarnya adalah eigenvalue problem.
2 2. Definisi Formal
Untuk matriks persegi \(A \in \mathbb{R}^{n \times n}\), skalar \(\lambda\) dan vektor nonzero \(\mathbf{v} \neq \mathbf{0}\) disebut eigenvalue-eigenvector pair jika:
\[A\mathbf{v} = \lambda\mathbf{v}\]
Artinya: transformasi \(A\) hanya men-scale \(\mathbf{v}\) dengan faktor \(\lambda\), tidak mengubah arahnya.
- \(\lambda > 0\): \(\mathbf{v}\) stretch searah
- \(0 < \lambda < 1\): \(\mathbf{v}\) shrink searah
- \(\lambda < 0\): \(\mathbf{v}\) flip arah (dan mungkin stretch/shrink)
- \(\lambda = 0\): \(\mathbf{v}\) collapse ke nol → \(A\) singular
- \(\lambda = 1\): \(\mathbf{v}\) tidak berubah sama sekali
Eigenspace: semua eigenvectors dengan eigenvalue yang sama membentuk subspace (eigenspace).
3 3. Menemukan Eigenvalues: Persamaan Karakteristik
\(A\mathbf{v} = \lambda\mathbf{v}\) bisa ditulis ulang sebagai: \[(A - \lambda I)\mathbf{v} = \mathbf{0}\]
Untuk sistem homogeneous ini punya solusi nonzero \(\mathbf{v} \neq \mathbf{0}\), matriks \((A - \lambda I)\) harus singular:
\[\det(A - \lambda I) = 0\]
Ini adalah persamaan karakteristik (characteristic equation). Ekspansi determinantnya menghasilkan polinomial karakteristik berderajat \(n\) dalam \(\lambda\).
3.1 Algoritma Lengkap
Step 1: Bentuk \(A - \lambda I\) (ganti diagonal dengan \(a_{ii} - \lambda\)).
Step 2: Hitung \(\det(A - \lambda I) = 0\) dan selesaikan polinomial → dapatkan eigenvalues \(\lambda_1, \lambda_2, \ldots\)
Step 3: Untuk setiap \(\lambda_i\): selesaikan sistem \((A - \lambda_i I)\mathbf{v} = \mathbf{0}\) → dapatkan eigenvectors.
4 4. Worked Example: Full Computation
Cari eigenvalues dan eigenvectors dari: \[A = \begin{bmatrix}4 & 1 \\ 2 & 3\end{bmatrix}\]
4.1 Step 1: Characteristic Equation
\[A - \lambda I = \begin{bmatrix}4-\lambda & 1 \\ 2 & 3-\lambda\end{bmatrix}\]
\[\det(A - \lambda I) = (4-\lambda)(3-\lambda) - (1)(2)\] \[= 12 - 4\lambda - 3\lambda + \lambda^2 - 2\] \[= \lambda^2 - 7\lambda + 10\] \[= (\lambda - 5)(\lambda - 2) = 0\]
Eigenvalues: \(\lambda_1 = 5\), \(\lambda_2 = 2\).
4.2 Step 2: Eigenvector untuk \(\lambda_1 = 5\)
Selesaikan \((A - 5I)\mathbf{v} = \mathbf{0}\): \[A - 5I = \begin{bmatrix}4-5 & 1 \\ 2 & 3-5\end{bmatrix} = \begin{bmatrix}-1 & 1 \\ 2 & -2\end{bmatrix}\]
Row reduce: \[\begin{bmatrix}-1 & 1 \\ 2 & -2\end{bmatrix} \xrightarrow{R_2 \leftarrow R_2 + 2R_1} \begin{bmatrix}-1 & 1 \\ 0 & 0\end{bmatrix}\]
Dari baris 1: \(-v_1 + v_2 = 0 \Rightarrow v_1 = v_2\).
Eigenvector: \(\mathbf{v}_1 = \begin{bmatrix}1 \\ 1\end{bmatrix}\) (atau kelipatan apapun).
Verifikasi: \(A\mathbf{v}_1 = \begin{bmatrix}4+1 \\ 2+3\end{bmatrix} = \begin{bmatrix}5 \\ 5\end{bmatrix} = 5\begin{bmatrix}1 \\ 1\end{bmatrix} = \lambda_1\mathbf{v}_1\) ✓
4.3 Step 3: Eigenvector untuk \(\lambda_2 = 2\)
Selesaikan \((A - 2I)\mathbf{v} = \mathbf{0}\): \[A - 2I = \begin{bmatrix}2 & 1 \\ 2 & 1\end{bmatrix}\]
Row reduce: \[\begin{bmatrix}2 & 1 \\ 2 & 1\end{bmatrix} \xrightarrow{R_2 \leftarrow R_2 - R_1} \begin{bmatrix}2 & 1 \\ 0 & 0\end{bmatrix}\]
Dari baris 1: \(2v_1 + v_2 = 0 \Rightarrow v_2 = -2v_1\).
Eigenvector: \(\mathbf{v}_2 = \begin{bmatrix}1 \\ -2\end{bmatrix}\) (atau kelipatan apapun).
Verifikasi: \(A\mathbf{v}_2 = \begin{bmatrix}4-2 \\ 2-6\end{bmatrix} = \begin{bmatrix}2 \\ -4\end{bmatrix} = 2\begin{bmatrix}1 \\ -2\end{bmatrix} = \lambda_2\mathbf{v}_2\) ✓
4.4 Verifikasi di R
A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
result <- eigen(A)
cat("Eigenvalues:", result$values, "\n")
# [1] 5 2
cat("Eigenvectors (columns):\n")
print(result$vectors)
# Kolom 1: eigenvector untuk lambda=5
# Kolom 2: eigenvector untuk lambda=2
# (R normalizes to unit vectors, arah sama)
# Verify: A %*% v = lambda * v
lambda1 <- result$values[1]
v1 <- result$vectors[, 1]
cat("Av1:", A %*% v1, "\n")
cat("lambda1 * v1:", lambda1 * v1, "\n")
# Harus sama (sampai scaling)
lambda2 <- result$values[2]
v2 <- result$vectors[, 2]
cat("Av2:", A %*% v2, "\n")
cat("lambda2 * v2:", lambda2 * v2, "\n")5 5. Properties Eigenvalues
Untuk matriks \(A \in \mathbb{R}^{n \times n}\) dengan eigenvalues \(\lambda_1, \lambda_2, \ldots, \lambda_n\):
Trace = sum of eigenvalues: \[\text{tr}(A) = \sum_{i=1}^n a_{ii} = \sum_{i=1}^n \lambda_i\]
Determinant = product of eigenvalues: \[\det(A) = \prod_{i=1}^n \lambda_i\]
Implikasi: \(\det(A) = 0 \iff\) setidaknya satu eigenvalue = 0.
Symmetric matrices: - Semua eigenvalues real (tidak kompleks) - Eigenvectors dari eigenvalues berbeda orthogonal satu sama lain - Selalu ada \(n\) eigenvectors yang orthonormal (spectral theorem)
Positive definite matrices: - Semua eigenvalues positif → covariance matrices punya eigenvalues ≥ 0 (PSD)
Eigenvalues dari \(A^k\): \(\lambda^k\) (eigenvalues dipangkatkan)
Eigenvalues dari \(A^{-1}\): \(1/\lambda\) (reciprocal) — berguna untuk mengerti inverse
6 6. Diagonalization
6.1 Konsep
Jika \(A \in \mathbb{R}^{n \times n}\) punya \(n\) linearly independent eigenvectors \(\mathbf{v}_1, \ldots, \mathbf{v}_n\) dengan eigenvalues \(\lambda_1, \ldots, \lambda_n\), maka:
\[A = PDP^{-1}\]
di mana: - \(P = \begin{bmatrix}\mathbf{v}_1 & \mathbf{v}_2 & \cdots & \mathbf{v}_n\end{bmatrix}\) (kolom-kolomnya adalah eigenvectors) - \(D = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_n)\) (eigenvalues di diagonal)
6.2 Mengapa Diagonalization Berguna?
Powers of matrix — sangat berguna untuk AR processes: \[A^k = PD^kP^{-1}, \quad D^k = \text{diag}(\lambda_1^k, \ldots, \lambda_n^k)\]
Menghitung \(A^{100}\) tanpa diagonalization = sangat mahal. Dengan diagonalization = trivial!
Symmetric case (spectral theorem): kalau \(A\) symmetric, \(P\) orthogonal (\(P^{-1} = P^T\)): \[A = P\Lambda P^T = \sum_{i=1}^n \lambda_i \mathbf{v}_i \mathbf{v}_i^T\]
Ini adalah spectral decomposition — ekspansi \(A\) sebagai weighted sum dari rank-1 matrices.
A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
res <- eigen(A)
P <- res$vectors
D <- diag(res$values)
# Verify diagonalization A = P D P^{-1}
P %*% D %*% solve(P)
# Should equal A
# Power A^10 via diagonalization
D10 <- diag(res$values^10)
A10 <- P %*% D10 %*% solve(P)
print(round(A10))
# Verify directly
Reduce("%*%", replicate(10, A, simplify = FALSE))7 7. Koneksi: PCA
PCA adalah cara menemukan arah-arah dengan variansi terbesar dalam data. Secara matematis:
Setup: Data matrix \(X \in \mathbb{R}^{n \times p}\) (centered, artinya mean kolom = 0).
Sample covariance matrix: \(\hat{\Sigma} = \frac{1}{n-1}X^TX \in \mathbb{R}^{p \times p}\)
\(\hat{\Sigma}\) adalah symmetric dan positive semidefinite → eigenvalues real dan ≥ 0.
Eigendecomposition: \(\hat{\Sigma} = V\Lambda V^T\) - Kolom-kolom \(V = [\mathbf{v}_1, \ldots, \mathbf{v}_p]\): principal components (loadings) - Diagonal \(\Lambda = \text{diag}(\lambda_1, \ldots, \lambda_p)\): variances explained, \(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0\)
Proportion of variance dari PC ke-\(k\): \(\lambda_k / \sum_j \lambda_j\)
Scores (koordinat data dalam basis PC): \(Z = XV\), kolom ke-\(k\) adalah \(X\mathbf{v}_k\)
# PCA via eigen() — manual untuk pemahaman
set.seed(42)
n <- 200; p <- 4
X <- scale(matrix(rnorm(n*p), n, p)) # standardize data
X_c <- scale(X, center=TRUE, scale=FALSE) # center only
# Sample covariance matrix
Sigma_hat <- t(X_c) %*% X_c / (n - 1)
# Eigendecomposition
res <- eigen(Sigma_hat)
loadings <- res$vectors # principal components
variances <- res$values # variance explained
# Proportion of variance explained
prop_var <- variances / sum(variances)
cat("Proportion of variance:", round(prop_var, 3), "\n")
cat("Cumulative:", round(cumsum(prop_var), 3), "\n")
# PC scores
scores <- X_c %*% loadings
# Compare dengan built-in prcomp()
pca_result <- prcomp(X, center=TRUE, scale.=FALSE)
# pca_result$rotation = loadings (same columns, possibly sign-flipped)
# pca_result$sdev^2 = variancesKenapa ini bekerja? Karena variance dari data yang diproyeksikan ke arah \(\mathbf{v}\) adalah \(\mathbf{v}^T\hat{\Sigma}\mathbf{v}\). Memaksimalkan ini subject to \(\|\mathbf{v}\| = 1\) (constrained optimization via Lagrange multipliers) menghasilkan solusi $ = $ eigenvector dari \(\hat{\Sigma}\) dengan eigenvalue terbesar. Ini adalah Rayleigh quotient problem.
8 8. Koneksi: Stability AR Process
Untuk AR(p) process: \(y_t = \phi_1 y_{t-1} + \phi_2 y_{t-2} + \cdots + \phi_p y_{t-p} + \varepsilon_t\)
Kita bisa tulis ini dalam bentuk companion matrix: \[\mathbf{Y}_t = \Phi \mathbf{Y}_{t-1} + \boldsymbol{\varepsilon}_t\]
di mana \(\mathbf{Y}_t = (y_t, y_{t-1}, \ldots, y_{t-p+1})^T\) dan: \[\Phi = \begin{bmatrix}\phi_1 & \phi_2 & \cdots & \phi_{p-1} & \phi_p \\ 1 & 0 & \cdots & 0 & 0 \\ 0 & 1 & \cdots & 0 & 0 \\ \vdots & & \ddots & & \vdots \\ 0 & 0 & \cdots & 1 & 0\end{bmatrix}\]
Syarat stationarity: semua eigenvalues dari \(\Phi\) harus punya modulus < 1 (berada di dalam unit circle di complex plane).
Kalau ada eigenvalue dengan modulus ≥ 1 → process explosive/non-stationary.
# AR(2): y_t = 1.2*y_{t-1} - 0.5*y_{t-2} + eps_t
phi1 <- 1.2; phi2 <- -0.5
companion <- matrix(c(phi1, phi2, 1, 0), nrow=2, byrow=TRUE)
eigenvalues <- eigen(companion)$values
cat("Eigenvalues:", eigenvalues, "\n")
cat("Moduli:", Mod(eigenvalues), "\n")
cat("Stationary:", all(Mod(eigenvalues) < 1), "\n")
# Check: akar characteristic polynomial
# lambda^2 - phi1*lambda - phi2 = 0
roots <- polyroot(c(-phi2, -phi1, 1))
cat("Polynomial roots:", roots, "\n")
cat("Moduli of roots:", Mod(roots), "\n")
# Untuk stationarity: moduli > 1 (reciprocals dari eigenvalues companion matrix)Ini juga relevan untuk VAR models (Vector Autoregression) yang banyak dipakai di macro-econometrics.
9 9. Comprehensive R Code
# === Setup ===
A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
result <- eigen(A)
# === Basic eigen computation ===
result$values # eigenvalues: 5, 2
result$vectors # eigenvectors (columns, normalized to unit length)
# === Verification ===
lambda1 <- result$values[1]
v1 <- result$vectors[, 1]
cat("A %*% v1:", A %*% v1, "\n")
cat("lambda1 * v1:", lambda1 * v1, "\n")
# Should be equal (up to floating point)
# === Trace = sum of eigenvalues ===
cat("trace(A):", sum(diag(A)), "\n")
cat("sum(eigenvalues):", sum(result$values), "\n")
# === Det = product of eigenvalues ===
cat("det(A):", det(A), "\n")
cat("prod(eigenvalues):", prod(result$values), "\n")
# === Diagonalization ===
P <- result$vectors
D <- diag(result$values)
cat("P %*% D %*% P^{-1} (should = A):\n")
print(round(P %*% D %*% solve(P), 10))
# === Eigenvalues of special matrices ===
# Symmetric matrix: real eigenvalues, orthogonal eigenvectors
S <- matrix(c(4, 2, 2, 3), nrow=2)
sym_eigen <- eigen(S)
cat("Eigenvalues of symmetric S:", sym_eigen$values, "\n") # real
cat("V1 . V2:", t(sym_eigen$vectors[,1]) %*% sym_eigen$vectors[,2], "\n") # ≈ 0
# Covariance matrix (symmetric, PSD): eigenvalues >= 0
n <- 100
X <- matrix(rnorm(n*3), n, 3)
Sigma <- t(X) %*% X / (n-1)
cat("Eigenvalues of Sigma (all >= 0):", eigen(Sigma)$values, "\n")
# === For complex eigenvalues ===
# Rotation matrix has complex eigenvalues
theta <- pi/4 # 45 degrees
R <- matrix(c(cos(theta), -sin(theta), sin(theta), cos(theta)), nrow=2)
cat("Eigenvalues of rotation matrix:", eigen(R)$values, "\n")
# Complex: e^{i*theta} and e^{-i*theta}
cat("Moduli:", Mod(eigen(R)$values), "\n") # both = 1 (rotation preserves length)10 10. Practice Problems
Problem 1: Hitung eigenvalues dan eigenvectors
Untuk \(B = \begin{bmatrix}3 & -2 \\ 1 & 0\end{bmatrix}\):
- Temukan characteristic polynomial.
- Temukan eigenvalues.
- Temukan eigenvectors.
- Verifikasi dengan R.
Solusi:
\(\det(B - \lambda I) = (3-\lambda)(-\lambda) - (-2)(1) = -3\lambda + \lambda^2 + 2 = \lambda^2 - 3\lambda + 2\)
\(\lambda^2 - 3\lambda + 2 = (\lambda-1)(\lambda-2) = 0\) → \(\lambda_1 = 2\), \(\lambda_2 = 1\).
Untuk \(\lambda_1 = 2\): \((B - 2I) = \begin{bmatrix}1&-2\\1&-2\end{bmatrix}\) → \(v_1 = v_2 \cdot 2\) → \(\mathbf{v}_1 = \begin{bmatrix}2\\1\end{bmatrix}\)
Untuk \(\lambda_2 = 1\): \((B - I) = \begin{bmatrix}2&-2\\1&-1\end{bmatrix}\) → \(v_1 = v_2\) → \(\mathbf{v}_2 = \begin{bmatrix}1\\1\end{bmatrix}\)
Problem 2: Buktikan trace = sum of eigenvalues untuk matriks 2x2.
Bukti: Characteristic polynomial dari \(A = \begin{bmatrix}a&b\\c&d\end{bmatrix}\): \[p(\lambda) = \lambda^2 - (a+d)\lambda + (ad-bc) = \lambda^2 - \text{tr}(A)\lambda + \det(A)\]
Dari Vieta’s formulas: \(\lambda_1 + \lambda_2 = \text{tr}(A)\) dan \(\lambda_1\lambda_2 = \det(A)\). \(\square\)
Problem 3: Kapan eigenvectors orthogonal?
Jawaban: Untuk symmetric matrices (\(A = A^T\)), eigenvectors yang bersesuaian dengan eigenvalues berbeda selalu orthogonal. Ini adalah Spectral Theorem.
Bukti singkat: Misalkan \(A\mathbf{u} = \lambda\mathbf{u}\) dan \(A\mathbf{v} = \mu\mathbf{v}\) dengan \(\lambda \neq \mu\). \[\lambda(\mathbf{u}^T\mathbf{v}) = (A\mathbf{u})^T\mathbf{v} = \mathbf{u}^TA^T\mathbf{v} = \mathbf{u}^TA\mathbf{v} = \mu(\mathbf{u}^T\mathbf{v})\] \[(\lambda - \mu)(\mathbf{u}^T\mathbf{v}) = 0\]
Karena \(\lambda \neq \mu\): \(\mathbf{u}^T\mathbf{v} = 0\). \(\square\)
Implikasi: Covariance matrices (symmetric PSD) selalu punya orthogonal eigenvectors → principal components selalu orthogonal satu sama lain. Ini adalah properti yang sangat berguna: PCs tidak berkorelasi satu sama lain!
Problem 4 (R): Investigasi eigenvalues \(X^TX\) dan koneksi ke multicollinearity.
set.seed(42)
n <- 100
# Case 1: No multicollinearity
X1 <- cbind(1, rnorm(n), rnorm(n))
ev1 <- eigen(t(X1) %*% X1)$values
cat("Case 1 eigenvalues:", round(ev1, 2), "\n")
cat("Condition number:", max(ev1)/min(ev1), "\n")
# Case 2: Near perfect multicollinearity
x_base <- rnorm(n)
X2 <- cbind(1, x_base, x_base + rnorm(n, sd=0.01))
ev2 <- eigen(t(X2) %*% X2)$values
cat("Case 2 eigenvalues:", round(ev2, 4), "\n")
cat("Condition number:", max(ev2)/min(ev2), "\n")
# Eigenvalue terkecil mendekati 0 → near singularEigenvalue kecil dari \(X^TX\) menandakan arah di feature space yang “hampir” null → multicollinearity. Ridge regression menambahkan \(\lambda I\) sehingga semua eigenvalues menjadi \(\lambda_i + \lambda\) → bounded away from zero.