0Pricing
R Academy · Lección

Valores propios y vectores propios

Calcule descomposiciones espectrales con eigen() e interprete los resultados.

Valores propios y vectores propios es una lección gratuita de R Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.

¿Qué son los valores propios?

Un vector propio v de la matriz A es un vector no nulo que solo cambia de escala (no gira) al multiplicarlo por A: Av = λv. El escalar λ es el valor propio. Los valores y vectores propios revelan las direcciones intrínsecas de expansión de una matriz.

# Intuition: A simple scaling matrix
A <- matrix(c(3, 0,
              0, 2), nrow = 2, byrow = TRUE)

# The eigenvectors are the standard basis vectors
# A * c(1,0) = 3 * c(1,0)  -> eigenvalue 3
# A * c(0,1) = 2 * c(0,1)  -> eigenvalue 2

v1 <- c(1, 0)
A %*% v1  # c(3, 0) = 3 * v1

v2 <- c(0, 1)
A %*% v2  # c(0, 2) = 2 * v2

cat('Eigenvalues of a diagonal matrix are its diagonal entries')

eigen(): cálculo de valores propios

eigen(A) devuelve una lista con $values (los valores propios ordenados por magnitud decreciente) y $vectors (una matriz cuyas columnas son los vectores propios). Los vectores propios están normalizados para tener longitud unitaria.

A <- matrix(c(4, 1,
              2, 3), nrow = 2, byrow = TRUE)

# Compute eigendecomposition
eig <- eigen(A)

# Eigenvalues
eig$values
# [1] 5 2  (descending order)

# Eigenvectors (columns)
eig$vectors
#           [,1]       [,2]
# [1,] 0.7071068 -0.4472136
# [2,] 0.7071068  0.8944272

cat('Each column is one eigenvector (unit length)')

Verificación de Av = lambda * v

Para verificarlo, compruebe que A %*% v - lambda * v sea esencialmente cero. Debido a la aritmética de coma flotante, use max(abs(...)) y compruebe que el resultado esté cerca del épsilon de máquina, en lugar de comprobar la igualdad exacta.

A <- matrix(c(4, 1,
              2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)

lambda1 <- eig$values[1]   # 5
v1      <- eig$vectors[, 1]

# Verify: Av - lambda*v should be ~0
residual <- A %*% v1 - lambda1 * v1
max(abs(residual))  # ~ 1e-16

# Check all eigenpairs at once
# A V = V diag(lambda) where V = eigenvectors matrix
V <- eig$vectors
Lambda <- diag(eig$values)
err <- A %*% V - V %*% Lambda
max(abs(err))  # near zero

Matrices simétricas: valores propios reales

Las matrices simétricas (A = t(A)) siempre tienen valores propios reales y vectores propios ortogonales. Este es el teorema espectral, fundamental en estadística (las matrices de covarianzas son simétricas semidefinidas positivas).

# Symmetric matrix
S <- matrix(c(4, 2, 2,
              2, 3, 1,
              2, 1, 5), nrow = 3, byrow = TRUE)

# All symmetric: A = t(A)
all.equal(S, t(S))  # TRUE

# Eigenvalues are real
eig <- eigen(S)
eig$values  # All real numbers
Im(eig$values)  # All zero

# Eigenvectors are orthogonal: V'V = I
V <- eig$vectors
round(t(V) %*% V, 10)  # Identity matrix
cat('Symmetric -> real eigenvalues, orthogonal eigenvectors')

Matrices asimétricas: valores propios complejos

Las matrices no simétricas pueden tener valores propios complejos (en pares de conjugados complejos). R los devuelve como números complejos. La parte real determina el crecimiento o decrecimiento; la parte imaginaria determina la rotación u oscilación.

# Rotation-like matrix -> complex eigenvalues
A <- matrix(c(0, -1,
              1,  0), nrow = 2, byrow = TRUE)
# This is a 90-degree rotation matrix
eig <- eigen(A)
eig$values
# [1] 0+1i 0-1i  (pure imaginary!)

# Real part: zero -> neither grows nor decays
Re(eig$values)  # 0 0

# Imaginary part: indicates rotation
Im(eig$values)  # 1 -1

# Another example: stable spiral
B <- matrix(c(-1, -2,
               2, -1), nrow = 2, byrow = TRUE)
eigen(B)$values  # -1 +/- 2i

Descomposición en valores propios A = VLV^-1

Una matriz diagonalizable A puede escribirse como A = V Λ V⁻¹, donde V es la matriz de vectores propios y Λ = diag(eigenvalues). Esta descomposición permite calcular potencias de matrices: A^n = V Λ^n V⁻¹.

A <- matrix(c(4, 1,
              2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)
V      <- eig$vectors
Lambda <- diag(eig$values)

# Reconstruct A = V %*% Lambda %*% solve(V)
A_reconstructed <- V %*% Lambda %*% solve(V)
all.equal(A, A_reconstructed)  # TRUE

# Matrix power A^3 using eigendecomposition
A_cubed_eig <- V %*% diag(eig$values^3) %*% solve(V)
A_cubed_direct <- A %*% A %*% A
all.equal(Re(A_cubed_eig), A_cubed_direct)  # TRUE

Concepto de PCA mediante los valores propios de la covarianza

El Análisis de Componentes Principales (PCA) utiliza la descomposición en valores propios de la matriz de covarianzas. Los vectores propios proporcionan las direcciones de máxima varianza (los componentes principales); los valores propios indican la varianza en cada dirección.

set.seed(42)
# Correlated 2D data
x1 <- rnorm(100)
x2 <- 0.8 * x1 + 0.6 * rnorm(100)
X <- cbind(x1, x2)

# Covariance matrix
C <- cov(X)
print(round(C, 3))

# Eigendecomposition of covariance matrix
eig <- eigen(C)
cat('Eigenvalues (variance explained):\n')
print(eig$values)
cat('PC1 direction:\n')
print(eig$vectors[, 1])

# Variance explained by PC1
prop_var <- eig$values[1] / sum(eig$values)
cat('PC1 explains:', round(100 * prop_var, 1), '%')

Radio espectral

El radio espectral ρ(A) = max|λᵢ| es el mayor valor propio en valor absoluto. Determina la estabilidad de los algoritmos iterativos: si ρ < 1, las iteraciones convergen; si ρ > 1, divergen.

spectral_radius <- function(A) {
  max(Mod(eigen(A)$values))
}

# Convergent matrix: spectral radius < 1
A_conv <- matrix(c(0.5, 0.2,
                   0.1, 0.3), nrow = 2, byrow = TRUE)
spectral_radius(A_conv)  # < 1 -> iterations converge

# Divergent matrix: spectral radius > 1
A_div <- matrix(c(2, 0.5,
                  0.3, 1.5), nrow = 2, byrow = TRUE)
spectral_radius(A_div)  # > 1 -> iterations diverge

# For positive definite A, spectral radius = max eigenvalue
cat('Spectral radius determines iterative stability')

Determinante y traza mediante valores propios

El determinante es igual al producto de los valores propios; la traza es igual a su suma. Estas relaciones vinculan las propiedades algebraicas con los valores propios y permiten comprobar los resultados de eigen().

A <- matrix(c(5, 2,
              1, 4), nrow = 2, byrow = TRUE)
eig_vals <- eigen(A)$values

# det(A) = product of eigenvalues
det(A)
prod(eig_vals)  # Same!

# trace = sum of eigenvalues
sum(diag(A))
sum(eig_vals)  # Same!

# For numeric precision, use Re() on complex
A2 <- matrix(c(3, -1, 2, 5), nrow = 2, byrow = TRUE)
ev <- eigen(A2)$values
all.equal(det(A2), prod(Re(ev)), tolerance = 1e-10)
all.equal(sum(diag(A2)), sum(Re(ev)), tolerance = 1e-10)

Matrices definidas positivas

Una matriz simétrica es definida positiva (PD) si todos sus valores propios son positivos. Las matrices de covarianzas son semidefinidas positivas (valores propios ≥ 0). Las matrices PD son invertibles y admiten descomposiciones de Cholesky.

# Check positive definiteness
is_positive_definite <- function(A) {
  # Symmetric check
  if (!isTRUE(all.equal(A, t(A)))) return(FALSE)
  all(eigen(A)$values > 0)
}

# Positive definite covariance matrix
S <- matrix(c(4, 2,
              2, 3), nrow = 2, byrow = TRUE)
is_positive_definite(S)  # TRUE
eigen(S)$values  # Both positive

# Not PD (one negative eigenvalue)
Q <- matrix(c(1, 3,
              3, 2), nrow = 2, byrow = TRUE)
is_positive_definite(Q)  # FALSE
eigen(Q)$values  # One negative

Iteración de potencias para el valor propio dominante

En matrices grandes, calcular todos los valores propios es costoso. La iteración de potencias encuentra iterativamente el mayor valor propio y constituye la base del algoritmo PageRank de Google. Multiplique repetidamente por A y, después, normalice.

# Power iteration: finds dominant eigenvalue
power_iteration <- function(A, tol = 1e-10, max_iter = 1000) {
  n <- nrow(A)
  v <- rnorm(n); v <- v / sqrt(sum(v^2))  # random unit vector
  lambda_old <- 0
  for (i in seq_len(max_iter)) {
    w <- A %*% v
    lambda <- max(abs(w))
    v <- w / lambda
    if (abs(lambda - lambda_old) < tol) break
    lambda_old <- lambda
  }
  list(value = lambda, vector = v)
}

A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
result <- power_iteration(A)
result$value  # Should be ~5 (dominant eigenvalue)
eigen(A)$values[1]  # Compare

Comprobación rápida

Compruebe su comprensión de los valores y vectores propios en R.

Resumen: valores y vectores propios

Ideas clave: eigen(A) devuelve $values y $vectors. Verifique con A %*% v - lambda*v ≈ 0. Las matrices simétricas tienen valores propios reales y vectores propios ortogonales. Las matrices no simétricas pueden tener valores propios complejos. det(A) = producto de los valores propios; la traza = suma. El PCA descompone la matriz de covarianzas. Definida positiva ↔ todos los valores propios > 0.

A <- matrix(c(6, 2, 2, 3), nrow = 2)
eig <- eigen(A)

# Key eigen operations:
eig$values    # eigenvalues
eig$vectors   # eigenvectors (columns)

# Verify Av = lambda*v
v1 <- eig$vectors[, 1]
max(abs(A %*% v1 - eig$values[1] * v1))  # ~0

# Properties
all.equal(det(A), prod(eig$values))       # TRUE
all.equal(sum(diag(A)), sum(eig$values))  # TRUE

# Reconstruct A = V Lambda V^{-1}
V <- eig$vectors
all.equal(A, Re(V %*% diag(eig$values) %*% solve(V)))

Preguntas frecuentes

¿La lección «Valores propios y vectores propios» es gratis?

Sí — el texto completo de «Valores propios y vectores propios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Valores propios y vectores propios»?

Calcule descomposiciones espectrales con eigen() e interprete los resultados. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar R Academy?

No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Valores propios y vectores propios»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de R Academy?

Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Multiplicación de matrices y determinantes
  2. Resolución de sistemas lineales con solve()
  3. Valores propios y vectores propios
  4. Descomposiciones SVD, QR y de Cholesky
← Volver a R Academy