ALGEBRA LINEAL CON R
Ing. Luis Manfredo Reyes Chávez
R es actualmente el lenguaje de análisis más utilizado en el mundo académico y de
investigación, primero por su potencia de procesamiento, y en segundo lugar por
ser un software libre.
Existen versiones para Windows, Mac, Linux y Android
UN ERROR MUY COMUN POR TODOS LADOS ES: HAY GENTE QUE CREE QUE R
ES UN PAQUETE ESTADÍSTICO (COMO SAS O SPSS).
Por ser un lenguaje y no un paquete, R tiene capacidades para
muchos procesos, pero se debe reconocer que quizá donde más se le ha utilizado
es en el campo de la estadística.
Una de las ventajas de R, es la enorme cantidad de librerías (o
paquetes), que han sido desarrolladas para ampliar sus capacidades.
Hay muchos
procesos estadísticos que requieren operaciones con matrices, de modo que no es
extraño que R posea una vasta cantidad de funciones para trabajar con ellas. Y
para casos especiales, hay un paquete que permite emular a MATLAB, y otros para
trabajar con casos más complejos (Matrix, LAPACK, TAUC)
Traducción y
adaptación del documento:
Funciones disponibles en R
En la siguiente lista,
A y B son matrices, x y b son vectores.
Operador o Función
|
Descripción
|
A * B
|
Producto por elementos
|
A %*% B
|
Pproducto de Matrices
|
A %o% B
|
Producto externo. AB'
|
crossprod(A,B)
crossprod(A) |
A'B and A'A respectivamente.
|
t(A)
|
Traspuesta
|
diag(x)
|
Crea una matriz diagonal con los elementos de x en la
diagonal principal
|
diag(A)
|
Retorna un vector que contiene los elementos de la diagonal principal
|
diag(k)
|
Si k es un escalar, crea una matriz identidad k x k
|
solve(A, b)
|
Retorna el vector x en la ecuación b = Ax (i.e., A-1b)
|
solve(A)
|
Inversa de A si A es una matriz cuadrada (no todas las
matrices cuadradas tienen inversa).
|
ginv(A)
|
Inversa generalizada de Moore-Penrose de A.
ginv(A) utiliza el paquete MASS |
y<-eigen(A)
|
y$val son los eigenvalores de A
y$vec son los eigenvectores of A |
y<-svd(A)
|
Descomposición de valores simples de A .
y$d = vector con los valores singulares de A y$u = matriz con columnas que contienen los vectores singulares izquierdos de A y$v = matriz con columnas que contienen los vectores singulares derechos de A |
R <- chol(A)
|
Factorización de Choleski para A. Retorna el factor
triangular superopr, de modo que R'R = A.
|
y <- qr(A)
|
Descomposición QR de A.
y$qr contiene el triangulo superior que contiene la descomposición, y un triangulo inferior que contiene información de la descomposición
Qy$rank es el rango de A.
y$qraux un vector que contiene información adicional de Q y$pivot contiene informacion de la estrategia de pivoteo utilizada |
cbind(A,B,...)
|
Combina matrices (o vectores) horizontalmente. Retorna una matriz.
|
rbind(A,B,...)
|
Combina matrices (o vectores) verticalmente. Retorna
una matriz.
|
rowMeans(A)
|
Retorna un vector de medias por filas.
|
rowSums(A)
|
Retorna un vector de sumas por filas
|
colMeans(A)
|
Retorna un vector de medias por
columnas
|
colSums(A)
|
Retorna un vector de sumas por
columnas
|
Y ahora…. Los ejemplos, traducidos y adaptados del
documento:
Crear una Matriz
# La función matrix
# Los datos se ingresan por columnas, indicando luego cuántas filas y cuántas columnas se tienen
> A <- matrix(c(2,3,-2,1,2,2),3,2)
> A
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
Determinar si un objeto es una Matriz
> is.matrix(A)
[1] TRUE
…. O si es un vector
> is.vector(A)
[1] FALSE
Multiplicación de una matriz por un escalar
> c <- 3
> c*A
[,1] [,2]
[1,] 6 3
[2,] 9 6
[3,] -6 6
Adición
y sustracción de matrices
> B <- matrix(c(1,4,-2,1,2,1),3,2)
> B
[,1] [,2]
[1,] 1 1
[2,] 4 2
[3,] -2 1
> C <- A + B
> C
[,1] [,2]
[1,] 3 2
[2,] 7 4
[3,] -4 3
> D <- A - B
> D
[,1] [,2]
[1,] 1 0
[2,] -1 0
[3,] 0 1
Multiplicación de matrices
> D <- matrix(c(2,-2,1,2,3,1),2,3)
> D
[,1] [,2] [,3]
[1,] 2 1 3
[2,] -2 2 1
> C <- D %*% A
> C
[,1] [,2]
[1,] 1 10
[2,] 0 4
> C <- A %*% D
> C
[,1] [,2] [,3]
[1,] 2 4 7
[2,] 2 7 11
[3,] -8 2 -4
> D <- matrix(c(2,1,3),1,3)
> D
[,1] [,2] [,3]
[1,] 2 1 3
> C <- D %*% A
> C
[,1] [,2]
[1,] 1 10
> C <- A %*% D
Error in A %*% D : non-conformable arguments
(En este caso no se puede realizar la operación por no ser conformables, es decir que el número de columnas de la primera debe ser igual al número de filas de la segunda)
Transpuesta
de una matriz
> AT <- t(A)
> AT
[,1] [,2] [,3]
[1,] 2 3 -2
[2,] 1 2 2
> ATT <- t(AT)
>ATT
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
Vectores comunmente usados
Vector unitario
> U <- matrix(1,3,1)
> U
[,1]
[1,] 1
[2,] 1
[3,] 1
Vector
nulo o cero
> Z <- matrix(0,3,1)
> Z
[,1]
[1,] 0
[2,] 0
[3,] 0
Matrices
comúnmente usadas
Matriz
unitaria
> U <- matrix(1,3,2)
> U
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] 1 1
Matriz
nula o cero
> Z <- matrix(0,3,2)
> Z
[,1] [,2]
[1,] 0 0
[2,] 0 0
[3,] 0 0
Matriz
diagonal
> S <- matrix(c(2,3,-2,1,2,2,4,2,3),3,3)
> S
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 3 2 2
[3,] -2 2 3
> D <- diag(S)
> D
[1] 2 2 3
> D <- diag(diag(S))
> D
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 0 2 0
[3,] 0 0 3
Matriz identidad
> I <- diag(c(1,1,1))
> I
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Matriz simétrica
> C <- matrix(c(2,1,5,1,3,4,5,4,-2),3,3)
> C
[,1] [,2] [,3]
[1,] 2 1 5
[2,] 1 3 4
[3,] 5 4 -2
> CT <- t(C)
> CT
[,1] [,2] [,3]
[1,] 2 1 5
[2,] 1 3 4
[3,] 5 4 -2
Inversa de una matriz
> A <- matrix(c(4,4,-2,2,6,2,2,8,4),3,3)
> A
[,1] [,2] [,3]
[1,] 4 2 2
[2,] 4 6 8
[3,] -2 2 4
> AI <- solve(A)
> AI
[,1] [,2] [,3]
[1,] 1.0 -0.5 0.5
[2,] -4.0 2.5 -3.0
[3,] 2.5 -1.5 2.0
## el producto de una matriz por su inversa debe ser igual a la matriz identidad
> A %*% AI
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> AI %*% A
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Inversa y Determinante de una Matriz
> C <- matrix(c(2,1,6,1,3,4,6,4,-2),3,3)
> C
[,1] [,2] [,3]
[1,] 2 1 6
[2,] 1 3 4
[3,] 6 4 -2
> CI <- solve(C)
CI
[,1] [,2] [,3]
[1,] 0.2156863 -0.25490196 0.13725490
[2,] -0.2549020 0.39215686 0.01960784
[3,] 0.1372549 0.01960784 -0.04901961
> d <- det(C)
> d
[1] -102
Rango de una matrix
> A <- matrix(c(2,3,-2,1,2,2,4,7,0),3,3)
> A
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 3 2 7
[3,] -2 2 0
> matA <- qr(A)
> matA$rank
[1] 3
> A <- matrix(c(2,3,-2,1,2,2,4,6,-4),3,3)
> A
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 3 2 6
[3,] -2 2 -4
> matA <- qr(A)
> matA$rank
[1] 2
# note column 3 is 2 times column 1
Numero de filas y columnas
> X <- matrix(c(3,2,4,3,2,-2,6,1),4,2)
> X
[,1] [,2]
[1,] 3 2
[2,] 2 -2
[3,] 4 6
[4,] 3 1
> dim(X)
[1] 4 2
> r <- nrow(X)
> r
[1] 4
> c <- ncol(X)
> c
[1] 2
Calcular sumas de filas y columnas
# ojo con la S en mayúsculas
> A <- matrix(c(2,3,-2,1,2,2),3,2)
> A
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
> c <- colSums(A)
> c
[1] 3 5
> r <- rowSums(A)
> r
[1] 3 5 0
> a <- sum(A)
> a
[1] 8
Calcular medias por filas y columnas
# Ojo con la M en mayúsculas
> cm <- colMeans(A)
> cm
[1] 1.000000 1.666667
> rm <- rowMeans(A)
> rm
[1] 1.5 2.5 0.0
> m <- mean(A)
> m
[1] 1.333333
Concatenación por columnas
> A
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
> B <- matrix(c(1,3,2,1,4,2),3,2)
> B
[,1] [,2]
[1,] 1 1
[2,] 3 4
[3,] 2 2
> C <- cbind(A,B)
> C
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 3 2 3 4
[3,] -2 2 2 2
Concatenación
por filas
> C <- rbind(A,B)
> C
[,1] [,2]
[1,] 2 1
[2,] 3 2
[3,] -2 2
[4,] 1 1
[5,] 3 4
[6,] 2 2
No hay comentarios:
Publicar un comentario