martes, 4 de junio de 2019

ALGEBRA LINEAL CON R


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.
R  puede ser descargado del siguiente sitio: http://www.r-project.org/
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