6  Taller 2. Matrices

Resumen de las actividades

Imágen tomada de Babaroga

Objetivo de la actividad

Imágen tomada de wittayayut

El presente taller tiene como objetivo, realizar un entrenamiento básico, realizar un entrenamiento general sobre algebra lineal aplicada a datos multivariados. Iniciarémos con operaciones básicas y posteriormente se realizarán algunas aplicaciones estadísticas como el análisis de componentes principales (pca) y el análisis discriminante (lda).

Documento de soporte

Se utilizará como referente al capitulo 3 del libro Análisis de datos ecológicos y ambientales (Rodríguez-Barrios, J. 2023), alojado en el siguiente enlace 📖Enlace_Libro

Actividad 1. Operaciones básicas de matrices

[ Imágen tomada de wachiwit ]

  1. Descargar el script de RMarkDown (rmd) titulado “Taller2.2.matrices.Rmd” en el siguiente enlace 📈Taller2.2.matrices.Rmd.

  2. Descargar la base de datos con mediciones de cuatro variables morfométricas a estudiantes de biología (csv) titulado “datos1.csv” en el siguiente enlace 📈datos1.csv.

  3. Crear una carpeta en su computador titulada “Taller2.2_Matrices.RStudio” y guardar el archivo descargado junto con archivo datos1.csv.

  4. Cerrar el RStudio y Abrir el archivo “Taller2.2.matrices.Rmd y abrir el siguiente enlace, correspondiente al ejercicio a realizar 📰Taller1.IntroRStudio.

  5. Revisar los siguientes enlaces complementarios:

1.1 producto matricial

# A (2,1,1,3)
# B (1,4,2,5,0,3)
# Calcular: (1) B'.A' (2) (A.B)' (3) Demostrar que B'.A' = (A'.B')

# R./
A = matrix(c(2,1,1,3),2,2,byrow=TRUE)      # Matriz A
B = matrix(c(1,4,2,5,0,3),2,3,byrow=TRUE)  # Matriz B

A
B

Respuestas

# (1) B'.A'
t(B)%*%t(A)    # %*%  representa el producto matricial, 
# "t" corresponde a la transpuesta de una matriz

# (2) (A.B)'
t(A%*%B)

# (3) B'.A' = (A.B)'
(t(B)%*%t(A)) == t(A%*%B)   # Demostración

1.2 Determinantes

# A (2,3,3,2)
# B (1,4,2,5,0,3)
# Cacular: Determinante de A y de B

#R./
A = matrix (c(2,3,3,2),2,2,byrow=TRUE)
B = matrix (c(1,4,2,5,0,3),3,3,byrow=TRUE)

A     
B

Respuestas

# Determinantes
det(A)
det(B)

1.3 Matriz inversa

# A (5,2,2,2)
# Calcular inversa de A

# R./
A = matrix(c(5,2,2,2), 2,2, byrow= T)

A

Respuestas

# Matriz inversa (solve)
solve(A)

1.4 Matriz de varianza - covarianza*

# A (2,2,4,3,6,9), 3 x 2
# B (2:10), 5 x 2

# R./
A = matrix(c(2,2,4,3,6,9),3,2, byrow= T)
B = matrix(c(2:10), 5,2, byrow=T)

A
B

Respuestas

# Covarianzas de cada matriz (c/grupo)
cov.A = cov(A)
cov.B = cov(B)

cov.A
cov.B

1.5 Covarianza generalizada (S)

cov.g = (3*(cov.A) + 5*(cov.B))/8  # cov.g corresponde a la covarianza generalizada
cov.g

Respuestas

# Covarianza generalizada invertida (S-1)
cov.g.i = solve(cov.g)   # cov.g.i representa a la covarianza gralizada invertida
cov.g.i

round(cov.g.i,2)   # round corresponde al redondeo de decimales

Aplicación de matrices en un Análisis de Componentes Principales - PCA

1. Matriz centrada (m.c) y matriz rotada (m.r)

Pasos:

  • Cargar librerías requeridas

  • Crear una matriz (o un dataframe)

  • Hallar el vector de medias (v.m)

  • Hallar la matriz centrada (m.c)

  • Hallar la matriz de covarianzas de m.c (s.c)

  • Hallar la matriz de autovectores o vectores propios (v.p)

  • Hallar la matriz rotada de A (m.r)

  • Graficar (stats y ggplot2)

  • Comparar con el PCA realizado en el paquete vegan

2. Cargar las librerías requeridas

# Librerías requeridas
library(tidyverse)
library(xtable)       # Importar y exportar
library(openxlsx)     # exportar "*.xlsx" 
library(readxl)       # Importar y exportar

library(ggplot2)       # gráfica en ggplot2
library(ggrepel)      # insertar rótulos a los puntos
library(vegan)        # para realizar el pca con vegan

3. Vector de medias (v.m) y matriz centrada (m.c)

A <- data.frame(Var1= c(1.2,3.4,4.5,5.6,1.2,3.4,4.5,5.6,
                        0.8,2.4,1.8,1.5,1.6,2.1,1.2,0.8),
                Var2= c(2.4,6.8,9.0,11.2,2.4,6.8,9.0,11.2,
                        1.6,4.8,3.6,3.0,3.2,4.2,2.4,1.6),
                Var3= c(4.4,10.8,19.0,21.2,12.4,16.8,19.0,21.2,
                        11.6,14.8,13.6,13.0,13.2,14.2,12.4,11.6))
A

v.m <- colMeans(A)   # Vector de medias
v.m

m.c <- t(t(A) - v.m) # Centralización de datos = Matriz centrada
round(m.c , 2)

4. Vectores própios (v.p)

m.c <- t(t(A) - v.m)  # Matriz centrada
round(m.c , 2)

s.c <- var(m.c)       # Covarianza de la matriz centrada
round(s.c , 2)

vv.p <- eigen(s.c)    # Vectores y valores propios de m.centrada
round(vv.p, 2)

v.p  <- vv.p$vectors   # Matriz de vectores propios 
round(v.p, 2)

5. Matriz Rotada (m.r)

m.c <- as.matrix(m.c)   # Matriz centrada (m.c)
round(m.c, 2)

m.r <- m.c %*% v.p      # Matriz rotada (m.r)
round(m.r, 2)

A <- data.frame (n= 1:16, A)  # matriz A como dataframe
round(A, 2)

6. figura (paquete - stats)

x11()
plot(m.r[,1:2],
     xlab="PC1", ylab="PC2")

text(m.r,               # Rótulos de los datos (filas)
     labels = row.names(A),
     pos=3, cex=0.7)    

7. figura

m.r <- data.frame(m.r)   # matriz rotada como data.frame 

x11()
ggplot(m.r, aes(x= X1 ,y= X2)) +
  geom_point() +
  geom_text_repel (aes (label = A$n)) +
  geom_hline(yintercept=0,linetype=2,size=1) +
  geom_vline(xintercept=0,linetype=2,size=1)

Análisis de Componentes principales - PCA en librería "vegan"

Objetivo: Comparar los resultados del PCA anterior con los generados por un paquete o librería de R

1. Realización del PCA

library(vegan)          # Librería requerida
A 
head(A[,2:4])             # Variables y observaciones (columnas y filas)
pca <- rda(A[,2:4])       # Realización del pca

2. Figura del PCA

x11()
biplot(pca)                   # Figura del pca

Operaciones matriciales - base Caimanes

Objetivo de la actividad:

Poner en práctica operaciones matriciales, para resolver un ejercicio de ordenación multivariada, denominado “Análisis de Componentes Principales - PCA, cuyo objetivo es relacionar a las observaciones de las matrices o de las bases de datos (filas de la matriz), de acuerdo a las variables definidas (columnas de la matriz). Finalmente se realizará la misma técnica con la librería vegan de R. La base de datos a utilizar se presenta en dos formatos: caimanes.csv y caimanes.xlsx. Esta base cuenta con 3 variables morfométricas (columnas) y 17 individuos evaluados (filas).

Procedimiento del PCA

  • Cargar librerías requeridas

  • Cargar la base datos (usar diferentes opciones para practicar)

  • Hallar el vector de medias (v.m) y la matriz centrada (m.c)

  • Hallar la matriz de covarianzas de m.c (s.c)

  • Hallar la matriz de autovectores o vectores propios (v.p)

  • Hallar la matriz rotada de A (m.r)

  • Graficar (stats y ggplot2)

  • Comparar con el PCA realizado en el paquete vegan

1. Cargar las librerías requeridas

# Librerías requeridas
library(tidyverse)
library(xtable)       # Importar y exportar
library(openxlsx)     # exportar "*.xlsx" 
library(readxl)       # Importar y exportar

library(ggplot2)       # gráfica en ggplot2
library(ggrepel)      # insertar rótulos a los puntos
library(vegan)        # para realizar el pca con vegan

2. Cargar o importar la base de datos

#------------
datos <- read_excel("caimanes.xlsx")    # paquete "readxl" 
head(datos)

datos <- read_csv2("caimanes.csv")      # paquete "readxl"
head(datos)

datos <- read.csv2("caimanes.csv")      # paquete "utils"
head(datos)
  • Ajustar la base de datos
# Resumir los rótulos de las columnas
colnames(datos) <- c("ID", "Sexo","LT","CD","CS")       # Rótulos de la base de datos
head(datos)          # Base de datos abreviada
str(datos)

3. Hallar el vector de medias (v.m) y la matriz centrada (m.c)

v.m <- colMeans(datos[,3:5])   # Vector de medias
v.m

m.c <- t(t(datos[,3:5]) - v.m) # Centralización de datos = Matriz centrada
round(m.c , 2)

4. Vectores própios (v.p)

s.c <- var(m.c)       # Covarianza de la matriz centrada
round(s.c , 2)

vv.p <- eigen(s.c)    # Vectores y valores propios de m.centrada
round(vv.p, 2)

v.p  <- vv.p$vectors   # Matriz de vectores propios 
round(v.p , 2)

5. Matriz Rotada (m.r)

m.c <- as.matrix(m.c)   # Matriz centrada (m.c)
round(m.c, 2)

m.r <- m.c %*% v.p      # Matriz rotada (m.r)
round(m.r, 2)

A <- data.frame (n= 1:16, A)  # matriz A como dataframe
round(A, 2)

6. figura (paquete - stats)

x11()
plot(m.r[,1:2],
     xlab="PC1", ylab="PC2")

text(m.r,               # Rótulos de los datos (caimanes)
     labels = row.names(datos),
     pos=3, cex=0.7)    

abline(v=0, lty=2,col= "blue")
abline(h=0, lty=2,col= "blue")

7. figura)

x11()
m.r <- data.frame(m.r)   # matriz rotada como data.frame 

ggplot(m.r, aes(x= X1 ,y= X2)) +
  geom_point() +
  geom_text_repel (aes (label = datos$ID)) +
  geom_hline(yintercept=0,linetype=2,size=1) +
  geom_vline(xintercept=0,linetype=2,size=1)

Análisis de Componentes principales - PCA en librería "vegan"

Objetivo: Comparar los resultados del PCA anterior con los generados por un paquete o librería de R

1. Realización del PCA

# Comparar con el Análisis de Componentes Principales - pca
head(datos[,3:5])             # Variables y observaciones (caimanes)
pca <- rda(datos[,3:5])       # Realización del pca

2. Figura del PCA

x11()
biplot(pca)