EJEMPLO 1
# Ejercicio 1
# 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=T) # Estructura de comandos para las matrices
A # 2,2: dos filas y dos columnas.
## [,1] [,2]
## [1,] 2 1
## [2,] 1 3
B = matrix(c(1,4,2,5,0,3),2,3,byrow=T) # byrow: ordenar valores por filas de la matriz.
B # 2,3: dos filas y tres columnas
## [,1] [,2] [,3]
## [1,] 1 4 2
## [2,] 5 0 3
tA= t(A) # t(A): Transpuesta de la matriz A
tA
## [,1] [,2]
## [1,] 2 1
## [2,] 1 3
tB= t(B) # t(B): Transpuesta de la matriz B
tB
## [,1] [,2]
## [1,] 1 5
## [2,] 4 0
## [3,] 2 3
tB%*%tA == t(A%*%B) # %*%: para multiplicar matrices.
## [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE TRUE
## [3,] TRUE TRUE
#==: demostrar una igualdad.
#-------------
# Ejercicio 2
# A (2,3,3,2)
# B (1,4,2,5,0,3)
# Calcular: Determinante de A y de B
#R./
A = matrix(c(2,3,3,2),2,2,byrow=T) # Matriz A
A
## [,1] [,2]
## [1,] 2 3
## [2,] 3 2
B = matrix(c(1,4,2,5,0,3),3,3,byrow=T) # Matriz B
B
## [,1] [,2] [,3]
## [1,] 1 4 2
## [2,] 5 0 3
## [3,] 1 4 2
det(A) # det(A): Determinante de la matriz A
## [1] -5
det(B) # det(b): Determinante de la matriz B
## [1] 0
#------------
# Ejercicio 3
# A (5,2,2,2)
# Calcular inversa de A
# R./
A = matrix(c(5,2,2,2),2,2,byrow=T) # Matriz A
A
## [,1] [,2]
## [1,] 5 2
## [2,] 2 2
solve(A) # solve(A): Determinante de la matriz A
## [,1] [,2]
## [1,] 0.3333333 -0.3333333
## [2,] -0.3333333 0.8333333
#------------
# Ejercicio 4
# A (5,2,2,2)
# Calcular valores y vectores propios de A
# R./
A = matrix(c(5,2,2,2),2,2,byrow=T) # Matriz A
A
## [,1] [,2]
## [1,] 5 2
## [2,] 2 2
eigen(A) # Valores y vectores propios
## eigen() decomposition
## $values
## [1] 6 1
##
## $vectors
## [,1] [,2]
## [1,] -0.8944272 0.4472136
## [2,] -0.4472136 -0.8944272
# Ejercicios:
# 1. Extraer los valores y vectores propios por separado.
# 2. Extraer el primer vector fila y el primer vector columna, por separado del resto de insumos.
# R./ ***
eigen(A)$vectors
## [,1] [,2]
## [1,] -0.8944272 0.4472136
## [2,] -0.4472136 -0.8944272
eigen(A)$vectors[,1]
## [1] -0.8944272 -0.4472136
eigen(A)$vectors[1,]
## [1] -0.8944272 0.4472136
#------------
# Ejercicio 5
# Fila (observaciĂłn) 1: 5,2
# Fila (observaciĂłn) 2: 2,2
# Calcular la matriz de distancia euclidea entre las filas
# R./
A = matrix(c(5,2,2,2),2,2,byrow=T) # Matriz A
A
## [,1] [,2]
## [1,] 5 2
## [2,] 2 2
dist(A) # dist(A): Matriz de distancia euclĂdea
## 1
## 2 3
#------------
# Ejercicio 6
# Fila (observaciĂłn) 1: 5,2
# Fila (observaciĂłn) 2: 2,2
# Fila (observaciĂłn) 3: 2,5
# Calcular la matriz de distancia euclĂdea entre las filas
# R./
A = matrix(c(5,2,2,2,2,5),3,2,byrow=T) # Matriz A
A
## [,1] [,2]
## [1,] 5 2
## [2,] 2 2
## [3,] 2 5
dist(A) # dist(A): Matriz de distancia euclĂdea
## 1 2
## 2 3.000000
## 3 4.242641 3.000000
round(dist(A),1) # dound(): Disminuye decimales del resultado
## 1 2
## 2 3.0
## 3 4.2 3.0
#------------
# Ejercicio 7
# Variable 1: 2,1,2
# Variable 2: 4,3,5
# Calcular las matrices de Covarianza y de CorrelaciĂłn
# R./
A = matrix(c(2,1,2,4,3,5),3,2,byrow=F)
A
## [,1] [,2]
## [1,] 2 4
## [2,] 1 3
## [3,] 2 5
cov(A)
## [,1] [,2]
## [1,] 0.3333333 0.5
## [2,] 0.5000000 1.0
var(A)
## [,1] [,2]
## [1,] 0.3333333 0.5
## [2,] 0.5000000 1.0
cor(A)
## [,1] [,2]
## [1,] 1.0000000 0.8660254
## [2,] 0.8660254 1.0000000
round(cov(A),1)
## [,1] [,2]
## [1,] 0.3 0.5
## [2,] 0.5 1.0
round(cor(A),1)
## [,1] [,2]
## [1,] 1.0 0.9
## [2,] 0.9 1.0
# Calcular la matriz de distancia y analizar el resultado.
dist(A)
## 1 2
## 2 1.414214
## 3 1.000000 2.236068
round(dist(A),1)
## 1 2
## 2 1.4
## 3 1.0 2.2
EJEMPLO 2
#------------
# LibrerĂas o paquetes requeridos
library(MASS)
library(ellipse)
library(lattice)
#------------
# 1) Crear la base de datos "datos"
datos2= read.csv2("datos1.csv",row.names = 1) # Base de datos original
head(datos2) # Falta un dato al estudiante 13
## Sexo Longitud.total Cintura Longitud.espalda Long.brazo
## Alumno 1 F 170 85 43 57
## Alumno 2 F 160 80 41 54
## Alumno 3 F 156 88 35 48
## Alumno 4 F 173 63 53 59
## Alumno 5 M 170 86 47 56
## Alumno 6 M 165 89 45 61
datos2=na.omit(datos2) # na.omit, para eliminar al estudiante 13
colnames(datos2) <- c("Sexo","LTot","Cint","LEsp","LBra") # RĂłtulos de la base de datos
head(datos2) # Base de datos abreviada
## Sexo LTot Cint LEsp LBra
## Alumno 1 F 170 85 43 57
## Alumno 2 F 160 80 41 54
## Alumno 3 F 156 88 35 48
## Alumno 4 F 173 63 53 59
## Alumno 5 M 170 86 47 56
## Alumno 6 M 165 89 45 61
datos2$Sexo = as.factor(datos2$Sexo) # convertir columna Sexo a factor
summary(datos2$Sexo) # 14 mujeres y 10 hombres
## F M
## 14 10
#------------
# 2) Matrices por sexo
str(datos2)
## 'data.frame': 24 obs. of 5 variables:
## $ Sexo: Factor w/ 2 levels "F","M": 1 1 1 1 2 2 2 2 2 2 ...
## $ LTot: int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cint: num 85 80 88 63 86 89 88 80 76 45 ...
## $ LEsp: int 43 41 35 53 47 45 56 60 55 60 ...
## $ LBra: int 57 54 48 59 56 61 59 55 54 86 ...
## - attr(*, "na.action")= 'omit' Named int 13
## ..- attr(*, "names")= chr "Alumno 13"
hombres = datos2[datos2$Sexo == "M",] # Matriz de hombres
hombres [1:4, 1:5] # cuatro filas y 5 columnas de esta base de datos
## Sexo LTot Cint LEsp LBra
## Alumno 5 M 170 86 47 56
## Alumno 6 M 165 89 45 61
## Alumno 7 M 170 88 56 59
## Alumno 8 M 181 80 60 55
mujeres = datos2[datos2$Sexo == "F",] # Matriz de mujeres
mujeres [1:4, 1:5] # cuatro filas y 5 columnas de esta base de datos
## Sexo LTot Cint LEsp LBra
## Alumno 1 F 170 85 43 57
## Alumno 2 F 160 80 41 54
## Alumno 3 F 156 88 35 48
## Alumno 4 F 173 63 53 59
#------------
# 3) Matrices centradas por sexos
var.h = hombres[,c(2:5)] # Variables morfométricas de hombres
promedio.h = colMeans(var.h) # Promedios de las variables
head(promedio.h)
## LTot Cint LEsp LBra
## 173.3 83.4 52.0 62.5
var.m = mujeres[,c(2:5)] # Variables morfométricas de mujeres
promedio.m = colMeans(var.m) # Promedios de las variables
head(promedio.m)
## LTot Cint LEsp LBra
## 161.92857 72.14286 40.64286 59.57143
# *Opcional - matriz centrada
m.centrada.h <- t(t(var.h) - promedio.h) # Restar cada dato a los promedios
head(m.centrada.h)
## LTot Cint LEsp LBra
## Alumno 5 -3.3 2.6 -5 -6.5
## Alumno 6 -8.3 5.6 -7 -1.5
## Alumno 7 -3.3 4.6 4 -3.5
## Alumno 8 7.7 -3.4 8 -7.5
## Alumno 9 1.7 -7.4 3 -8.5
## Alumno 10 12.7 -38.4 8 23.5
m.centrada.m <- t(t(var.m) - promedio.m) # Restar cada dato a los promedios
head(m.centrada.m)
## LTot Cint LEsp LBra
## Alumno 1 8.071429 12.857143 2.3571429 -2.5714286
## Alumno 2 -1.928571 7.857143 0.3571429 -5.5714286
## Alumno 3 -5.928571 15.857143 -5.6428571 -11.5714286
## Alumno 4 11.071429 -9.142857 12.3571429 -0.5714286
## Alumno 11 6.071429 -7.142857 8.3571429 -4.5714286
## Alumno 12 -6.928571 -2.142857 -4.6428571 -9.5714286
#------------
# 4) Operaciones vectoriales
dif = promedio.h - promedio.m # Diferencia de medias (m1-m2)
dif
## LTot Cint LEsp LBra
## 11.371429 11.257143 11.357143 2.928571
t.dif = t(dif) # Transpuesta de la diferencia (m1-m2)'
t.dif
## LTot Cint LEsp LBra
## [1,] 11.37143 11.25714 11.35714 2.928571
sum = promedio.h + promedio.m # Suma de medias (m1+m2)
sum
## LTot Cint LEsp LBra
## 335.22857 155.54286 92.64286 122.07143
#------------
# 5) Matriz de covarianza generalizada o compuesta (S-1)
cov.h = var(hombres[,c(2:5)]) # Matriz de varianza y covarianzas de hombres
round(cov.h,1)
## LTot Cint LEsp LBra
## LTot 37.6 -79.0 27.1 30.2
## Cint -79.0 347.2 -57.0 -116.9
## LEsp 27.1 -57.0 37.1 -5.2
## LBra 30.2 -116.9 -5.2 134.3
cov.m = var(mujeres[,c(2:5)]) # Matriz de varianza y covarianzas de mujeres
round(cov.m,1)
## LTot Cint LEsp LBra
## LTot 37.0 5.0 23.0 22.1
## Cint 5.0 94.1 -24.4 -15.2
## LEsp 23.0 -24.4 35.3 8.6
## LBra 22.1 -15.2 8.6 96.0
summary(datos2$Sexo) # 14 mujeres y 10 hombres
## F M
## 14 10
cov.g = (10*cov.h + 14*cov.m)/24 # Covarianza genealizada o compuesta
round(cov.g,2)
## LTot Cint LEsp LBra
## LTot 37.23 -30.00 24.70 25.47
## Cint -30.00 199.56 -37.99 -57.59
## LEsp 24.70 -37.99 36.07 2.84
## LBra 25.47 -57.59 2.84 111.92
cov.g.i = solve(cov.g) # Cov. generalizada invertida
round(cov.g.i,3)
## LTot Cint LEsp LBra
## LTot 0.067 -0.004 -0.049 -0.016
## Cint -0.004 0.008 0.010 0.005
## LEsp -0.049 0.010 0.071 0.015
## LBra -0.016 0.005 0.015 0.015
#------------
# 3) FunciĂłn discriminante de Wlad y Anderson (Wx)
# W(x) = [(m1-m2)'.S-1.x]-[1/2.(m1-m2)'.S-1 .(m1+m2)]
head(datos2) # Base de datos
## Sexo LTot Cint LEsp LBra
## Alumno 1 F 170 85 43 57
## Alumno 2 F 160 80 41 54
## Alumno 3 F 156 88 35 48
## Alumno 4 F 173 63 53 59
## Alumno 5 M 170 86 47 56
## Alumno 6 M 165 89 45 61
datos3 = as.matrix (datos2[2:5])
head(datos3)
## LTot Cint LEsp LBra
## Alumno 1 170 85 43 57
## Alumno 2 160 80 41 54
## Alumno 3 156 88 35 48
## Alumno 4 173 63 53 59
## Alumno 5 170 86 47 56
## Alumno 6 165 89 45 61
# 10 primeros alumnos como vectores
x1 = as.vector(datos3[1, 1:4]) # Datos del alumno 1
x2 = as.vector(datos3[2, 1:4]) # datos3[2, 1:4]: fila 2, columnas 1 a 4. alumno 1
x3 = as.vector(datos3[3, 1:4])
x4 = as.vector(datos3[4, 1:4])
x5 = as.vector(datos3[5, 1:4])
x6 = as.vector(datos3[6, 1:4])
x7 = as.vector(datos3[7, 1:4])
x8 = as.vector(datos3[8, 1:4])
x9 = as.vector(datos3[9, 1:4])
x10 = as.vector(datos3[10, 1:4]) # Datos del alumno 10
# Discriminantes de los 10 primeros alumnos
# Si da negativo discrimina en mujer y positivo en hombre
# W(x) = [(m1-m2)'.S-1.x]-[1/2.(m1-m2)'.S-1 .(m1+m2)]
W1 = ((t.dif%*%cov.g.i%*%x1)-(1/2*(t.dif%*%cov.g.i%*%sum))) # Datos del alumno 1,
W2 = ((t.dif%*%cov.g.i%*%x2)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W3 = ((t.dif%*%cov.g.i%*%x3)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W4 = ((t.dif%*%cov.g.i%*%x4)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W5 = ((t.dif%*%cov.g.i%*%x5)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W6 = ((t.dif%*%cov.g.i%*%x6)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W7 = ((t.dif%*%cov.g.i%*%x7)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W8 = ((t.dif%*%cov.g.i%*%x8)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W9 = ((t.dif%*%cov.g.i%*%x9)-(1/2*(t.dif%*%cov.g.i%*%sum)))
W10 = ((t.dif%*%cov.g.i%*%x10)-(1/2*(t.dif%*%cov.g.i%*%sum))) # Discriminante alumno 10
ad = data.frame (W1,W2,W3,W4,W5,W6,W7,W8,W9,W10) # Discriminantes compilados
ad
## W1 W2 W3 W4 W5 W6 W7 W8
## 1 -0.1271618 -3.265828 -5.281626 0.6418749 1.613796 1.109279 5.899785 7.149955
## W9 W10
## 1 3.592283 4.048357
t(ad) # Transpuesto
## [,1]
## W1 -0.1271618
## W2 -3.2658277
## W3 -5.2816257
## W4 0.6418749
## W5 1.6137960
## W6 1.1092793
## W7 5.8997846
## W8 7.1499551
## W9 3.5922827
## W10 4.0483574
clase1 <- sample("F", size = 3, replace = TRUE) # vector de las 3 mujeres
clase2 <- sample("M", size = 7, replace = TRUE) # vector de los 7 hombres
clase <- c(clase1, clase2) # FusiĂłn de vectores
clase
## [1] "F" "F" "F" "M" "M" "M" "M" "M" "M" "M"
ad = data.frame(LD1 = t(ad),clase)
ad
## LD1 clase
## W1 -0.1271618 F
## W2 -3.2658277 F
## W3 -5.2816257 F
## W4 0.6418749 M
## W5 1.6137960 M
## W6 1.1092793 M
## W7 5.8997846 M
## W8 7.1499551 M
## W9 3.5922827 M
## W10 4.0483574 M
#------------
# 4) ComparaciĂłn del discriminante manual con el automatizado
# *Nota: Los detalles de este análisis de presentarán en el capĂtulo de discriminantes lineales.
library(MASS)
ad1<-lda(Sexo~LTot+Cint+LEsp+LBra,data=datos2) # Discriminante lineal de Fisher
ad1
## Call:
## lda(Sexo ~ LTot + Cint + LEsp + LBra, data = datos2)
##
## Prior probabilities of groups:
## F M
## 0.5833333 0.4166667
##
## Group means:
## LTot Cint LEsp LBra
## F 161.9286 72.14286 40.64286 59.57143
## M 173.3000 83.40000 52.00000 62.50000
##
## Coefficients of linear discriminants:
## LD1
## LTot 0.04120765
## Cint 0.06119582
## LEsp 0.14351940
## LBra 0.02713046
names(ad1) # Insumos del discriminante
## [1] "prior" "counts" "means" "scaling" "lev" "svd" "N"
## [8] "call" "terms" "xlevels"
group<-predict(ad1,method="plug-in")$class # Desempeño del discriminante
(tabla<-table(datos2$Sexo,group))
## group
## F M
## F 13 1
## M 0 10
result = predict(ad1,method="plug-in") # Otros insumos del discriminante
result$class # Discriminante realizado
## [1] F F F M M M M M M M F F F M F F M F F M F M F F
## Levels: F M
head(result$x) # FunciĂłn discriminante en cada alumno
## LD1
## Alumno 1 0.1933965
## Alumno 2 -0.8930893
## Alumno 3 -1.5922524
## Alumno 4 0.4601662
## Alumno 5 0.8015395
## Alumno 6 0.6277022
result = data.frame(result$x, clase=result$class) # Data frame
ad2 = result[1:10,] # Data frame de los 10 primeros alumnos
ad2
## LD1 clase
## Alumno 1 0.1933965 F
## Alumno 2 -0.8930893 F
## Alumno 3 -1.5922524 F
## Alumno 4 0.4601662 M
## Alumno 5 0.8015395 M
## Alumno 6 0.6277022 M
## Alumno 7 2.2969970 M
## Alumno 8 2.7262704 M
## Alumno 9 1.4895138 M
## Alumno 10 1.6314990 M
ad == ad2 # Igualdad ente el discriminante manual (ad) y el automatizado (ad2)
## LD1 clase
## W1 FALSE TRUE
## W2 FALSE TRUE
## W3 FALSE TRUE
## W4 FALSE TRUE
## W5 FALSE TRUE
## W6 FALSE TRUE
## W7 FALSE TRUE
## W8 FALSE TRUE
## W9 FALSE TRUE
## W10 FALSE TRUE
#------------
# 5) Figuras
# LibrerĂas
library(ellipse)
library(lattice)
str(datos2)
## 'data.frame': 24 obs. of 5 variables:
## $ Sexo: Factor w/ 2 levels "F","M": 1 1 1 1 2 2 2 2 2 2 ...
## $ LTot: int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cint: num 85 80 88 63 86 89 88 80 76 45 ...
## $ LEsp: int 43 41 35 53 47 45 56 60 55 60 ...
## $ LBra: int 57 54 48 59 56 61 59 55 54 86 ...
## - attr(*, "na.action")= 'omit' Named int 13
## ..- attr(*, "names")= chr "Alumno 13"
x11()
boxplot(LTot~Sexo, data = datos2, ylab ="Altura (cm)", # Cajas grises
cex.lab=1.3)

boxplot(LTot~Sexo, data = datos2, ylab ="Altura (cm)", # Cajas amarillas con muescas
cex.lab=1.3,notch=T,col="bisque")

boxplot(LTot~Sexo, data = datos2, ylab ="Altura (cm)", # Cajas azules con muescas
cex.lab=1.3,notch=T,col="lightblue")

x11()
boxplot(LD1~clase, data = ad, ylab ="Eje 1",
cex.lab=1.3)

x11()
boxplot(LD1~clase, data = ad2, ylab ="Eje 1",
cex.lab=1.3)

EJEMPLO 3
#---------------
# Cargar la base de datos de Excel *.csv
datos= read.csv2("datos1.csv")
str(datos) # Estructura de la base de datos
## 'data.frame': 25 obs. of 6 variables:
## $ Nombre : chr "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" ...
## $ Sexo : chr "F" "F" "F" "F" ...
## $ Longitud.total : int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cintura : num 85 80 88 63 86 89 88 80 76 45 ...
## $ Longitud.espalda: int 43 41 35 53 47 45 56 60 55 60 ...
## $ Long.brazo : int 57 54 48 59 56 61 59 55 54 86 ...
# LibrerĂas
library(ggplot2)
library(vegan)
#---------------
# 1) Ajuste de la base de datos para el trabajo matricial
datos = datos[-13,] # Eliminar el alumno 13 por faltarle un dato
head(datos) # Encabezado de la base datos
## Nombre Sexo Longitud.total Cintura Longitud.espalda Long.brazo
## 1 Alumno 1 F 170 85 43 57
## 2 Alumno 2 F 160 80 41 54
## 3 Alumno 3 F 156 88 35 48
## 4 Alumno 4 F 173 63 53 59
## 5 Alumno 5 M 170 86 47 56
## 6 Alumno 6 M 165 89 45 61
str(datos) # Estructura de la base de datos
## 'data.frame': 24 obs. of 6 variables:
## $ Nombre : chr "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" ...
## $ Sexo : chr "F" "F" "F" "F" ...
## $ Longitud.total : int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cintura : num 85 80 88 63 86 89 88 80 76 45 ...
## $ Longitud.espalda: int 43 41 35 53 47 45 56 60 55 60 ...
## $ Long.brazo : int 57 54 48 59 56 61 59 55 54 86 ...
# Abreviaturas de los estudiantes (filas de la matriz)
str(datos) # Estructura de la base
## 'data.frame': 24 obs. of 6 variables:
## $ Nombre : chr "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" ...
## $ Sexo : chr "F" "F" "F" "F" ...
## $ Longitud.total : int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cintura : num 85 80 88 63 86 89 88 80 76 45 ...
## $ Longitud.espalda: int 43 41 35 53 47 45 56 60 55 60 ...
## $ Long.brazo : int 57 54 48 59 56 61 59 55 54 86 ...
datos1 <- datos[,c(3:6)] # Variables morfométricas
head(datos1)
## Longitud.total Cintura Longitud.espalda Long.brazo
## 1 170 85 43 57
## 2 160 80 41 54
## 3 156 88 35 48
## 4 173 63 53 59
## 5 170 86 47 56
## 6 165 89 45 61
1:nrow(datos1) # Generar datos de 1 a n: 25 estudiantes
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
LETTERS[1:nrow(datos1)] # Letras para los nombres de los estudiantes
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X"
nombres <- LETTERS[1:nrow(datos1)] # Asignar como "nombres" al comando anterior
# Abreviaturas de las variables (Columnas de la matriz).
colnames(datos1) <- c("LTot","Cint","LEsp","LBra")
head(datos1)
## LTot Cint LEsp LBra
## 1 170 85 43 57
## 2 160 80 41 54
## 3 156 88 35 48
## 4 173 63 53 59
## 5 170 86 47 56
## 6 165 89 45 61
# Base de datos con nombres abreviados (filas y columnas)
dimnames(datos1)=(list(nombres,colnames(datos1)))
head(datos1)
## LTot Cint LEsp LBra
## A 170 85 43 57
## B 160 80 41 54
## C 156 88 35 48
## D 173 63 53 59
## E 170 86 47 56
## F 165 89 45 61
str(datos1) # Estructura de la base abreviada
## 'data.frame': 24 obs. of 4 variables:
## $ LTot: int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cint: num 85 80 88 63 86 89 88 80 76 45 ...
## $ LEsp: int 43 41 35 53 47 45 56 60 55 60 ...
## $ LBra: int 57 54 48 59 56 61 59 55 54 86 ...
datos1$Estud <- rownames(datos1) # Insertar columna de observaciones
head(datos1) # Encabezado de la base de datos
## LTot Cint LEsp LBra Estud
## A 170 85 43 57 A
## B 160 80 41 54 B
## C 156 88 35 48 C
## D 173 63 53 59 D
## E 170 86 47 56 E
## F 165 89 45 61 F
# Guardar una base datos en el directorio de trabajo
write.csv2(datos1, "datos.csv")
datos = datos1 # Cambiar "datos1" a "datos"
datos[,5] # Siglas de los estudiantes
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X"
rownames(datos)= datos[,5] # Siglas para las operaciones
#---------------
# 2) Análisis de mediciones de los estudiantes
str(datos)
## 'data.frame': 24 obs. of 5 variables:
## $ LTot : int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cint : num 85 80 88 63 86 89 88 80 76 45 ...
## $ LEsp : int 43 41 35 53 47 45 56 60 55 60 ...
## $ LBra : int 57 54 48 59 56 61 59 55 54 86 ...
## $ Estud: chr "A" "B" "C" "D" ...
# 2.1) Sumas y norma de los vectores (variables)
datos = datos[,1:4] # asignar "datos" solo a las variables morfométricas
sumas <- rowSums(datos) # Suma de las variables por cada estudiante (rowSums)
sumas
## A B C D E F G H I J K L M N O P Q R S T
## 355 335 327 348 359 360 373 376 360 377 337 311 325 376 312 339 400 322 348 363
## U V W X
## 328 368 373 320
sumas1 <- colSums(datos) # Suma los estudiantes por cada variable (colSums)
sumas1
## LTot Cint LEsp LBra
## 4000 1844 1089 1459
normas <- sqrt(rowSums(datos ^ 2)) # Norma de cada estudiante (vector fila)
round(normas,2) # Resumen de resultados a dos decimales
## A B C D E F G H I J K
## 203.03 191.30 188.70 200.47 204.06 202.22 207.99 213.98 205.77 218.21 194.62
## L M N O P Q R S T U V
## 180.89 186.48 210.71 180.75 193.74 222.91 185.22 195.24 204.41 188.19 208.76
## W X
## 209.99 187.21
# Base (datos.t) que integra a las sumas y las normas
datos.t = data.frame(datos,sumas,norma= round(normas,2))
head(datos.t)
## LTot Cint LEsp LBra sumas norma
## A 170 85 43 57 355 203.03
## B 160 80 41 54 335 191.30
## C 156 88 35 48 327 188.70
## D 173 63 53 59 348 200.47
## E 170 86 47 56 359 204.06
## F 165 89 45 61 360 202.22
# 2.2) Figura de proyecciĂłn vectorial de los estudiantes
x11() # Figura de cada estudiante como un vector
plot(datos.t[,c(1,3)]) # figura de las variables 1 y 3

# Figuras de distancias de cada estudiante como vectores
plot(sumas, normas)
text(sumas, normas, labels = names(sumas),
cex = 0.8, pos = 2, col = "red") # RĂłtulos de los puntos
abline (lm(normas~sumas),lty=2, lwd=2, col="lightblue") # Ajuste lineal (lĂnea sĂłlida)
lines(lowess(sumas, normas),lty=1,lwd=1,col=2) # Ajuste suavizado (lĂnea punteada)

# Figura de relaciĂłn con ggplot2
library(ggplot2)
ggplot(data=datos.t,
aes(x=datos.t$sumas, y=datos.t$norma)) +
geom_point(na.rm=T) + # Nube de puntos
geom_smooth(method='loess',na.rm=T) + # curva tipo loess
labs(x='Sumas', y='Normas') +
theme_bw() # Fondo blanco

ggplot(data=datos.t,
aes(x=datos.t$sumas, y=datos.t$norma)) +
geom_point() +
labs(x='Sumas', y='Normas') +
geom_smooth(method = lm, se = FALSE)

#---------------
# 3) Cálculo de la matriz centrada de las variables morfométricas
var = datos.t[,c(1:4)] # Variables morfométricas
promedio = colMeans(var) # Promedios de las variables
promedio
## LTot Cint LEsp LBra
## 166.66667 76.83333 45.37500 60.79167
m.centrada <- t(t(var) - promedio) # Restar cada dato a los promedios
head(m.centrada)
## LTot Cint LEsp LBra
## A 3.333333 8.166667 -2.375 -3.7916667
## B -6.666667 3.166667 -4.375 -6.7916667
## C -10.666667 11.166667 -10.375 -12.7916667
## D 6.333333 -13.833333 7.625 -1.7916667
## E 3.333333 9.166667 1.625 -4.7916667
## F -1.666667 12.166667 -0.375 0.2083333
# Figura de las observaciones centradas
plot(m.centrada[,c(1,3)]) # Figura general

plot(m.centrada[,c(1,3)],xlim = c(-20, 20), # Figura editada
ylim = c(-15, 20), asp = 1, pch = 19)
text(m.centrada[,c(1,3)], # Rotulos de los puntos
labels = row.names(m.centrada[,c(1,3)]),
pos = 3, cex=0.7)
grid() # Grilla en la figura
abline(h = 0, col = "red", lty = 4) # Plano Cartesiano
abline(v = 0, col = "red", lty = 4)

#---------------
# 4) Operaciones matriciales - OrdenaciĂłn multivariada
# 1. Cálculo de valores y vectores propios
cov = var(datos.t[,c(1:4)]) # Matriz de varianza y covarianzas
cov = var(var) # OpciĂłn 2
round(cov,1)
## LTot Cint LEsp LBra
## LTot 68.4 4.4 56.3 32.8
## Cint 4.4 221.2 -3.7 -46.0
## LEsp 56.3 -3.7 67.2 11.3
## LBra 32.8 -46.0 11.3 109.0
promedio = colMeans(var) # Promedios de las variables
promedio
## LTot Cint LEsp LBra
## 166.66667 76.83333 45.37500 60.79167
m.centrada <- t(t(var) - promedio) # Variables centradas
head(m.centrada)
## LTot Cint LEsp LBra
## A 3.333333 8.166667 -2.375 -3.7916667
## B -6.666667 3.166667 -4.375 -6.7916667
## C -10.666667 11.166667 -10.375 -12.7916667
## D 6.333333 -13.833333 7.625 -1.7916667
## E 3.333333 9.166667 1.625 -4.7916667
## F -1.666667 12.166667 -0.375 0.2083333
vc.centrada = var(m.centrada) # Matriz de varianza y covarianzas centrada
vc.centrada
## LTot Cint LEsp LBra
## LTot 68.405797 4.376812 56.347826 32.75362
## Cint 4.376812 221.188406 -3.673913 -45.99275
## LEsp 56.347826 -3.673913 67.201087 11.25543
## LBra 32.753623 -45.992754 11.255435 108.95471
v.propios= eigen(vc.centrada) # Vectores y valores propios de m.centrada
v.propios
## eigen() decomposition
## $values
## [1] 238.551229 141.646198 77.460019 8.092554
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] -0.06532082 -0.6446607 -0.2348736 0.72455510
## [2,] 0.93124818 -0.2601970 0.2459119 -0.06783569
## [3,] -0.06460934 -0.5458245 -0.5144348 -0.65822342
## [4,] -0.35261262 -0.4677453 0.7872220 -0.19276967
v.propios$vectors # Extraer vectores propios
## [,1] [,2] [,3] [,4]
## [1,] -0.06532082 -0.6446607 -0.2348736 0.72455510
## [2,] 0.93124818 -0.2601970 0.2459119 -0.06783569
## [3,] -0.06460934 -0.5458245 -0.5144348 -0.65822342
## [4,] -0.35261262 -0.4677453 0.7872220 -0.19276967
# 2. ProyecciĂłn matricial (matriz rotada), usando a los vectores propios
m.centrada=as.matrix(m.centrada) # Variables centradas como matriz
head(m.centrada)
## LTot Cint LEsp LBra
## A 3.333333 8.166667 -2.375 -3.7916667
## B -6.666667 3.166667 -4.375 -6.7916667
## C -10.666667 11.166667 -10.375 -12.7916667
## D 6.333333 -13.833333 7.625 -1.7916667
## E 3.333333 9.166667 1.625 -4.7916667
## F -1.666667 12.166667 -0.375 0.2083333
# Matriz rotada
head(m.Rotada <- m.centrada %*% v.propios$vectors)
## [,1] [,2] [,3] [,4]
## A 8.877894 -1.203944 -0.5377327 4.1553911
## B 6.061918 9.038533 -0.7513522 -0.8562256
## C 16.276518 15.617019 0.5187139 0.8088270
## D -13.156847 -3.807327 -10.2223190 0.8536681
## E 9.903318 -3.179694 -3.1367821 1.6474314
## F 11.389822 -1.984059 3.7403017 -1.8262527
#---------------
# 5) Figuras de la matriz proyectada "m.Rotada"
# Figura sin editar
plot(m.Rotada) # m.Rotada es la matriz rotada

# Figura editada
plot(m.Rotada, asp = 2, pch = 19, # asp=2 son los cĂrculos, pch= 19 es el relleno de los cĂrculos
xlab="Eje 1",ylab="Eje 2") # RĂłtulos de los ejes
text(m.Rotada, # RĂłtulos de los datos (estudiantes)
labels = row.names(datos.t[,c(1:4)]),
pos = 3, cex=0.7) # cex() relaciona el tamaño del texto
abline(h=0, col = "red") # abline (h=0) lĂnea horizontal del plano cartesiano
abline(v=0, col = "red") # abline (v=0) lĂnea vertical del plano cartesiano
grid() # Grilla en la figura

# Comparar con el Análisis de Componentes Principales - pca
library(vegan) # LibrerĂa requerida
# Datos del procedimiento 2.1) Sumas y norma de los vectores
head(datos) # Variables y observaciones (estudiantes)
## LTot Cint LEsp LBra
## A 170 85 43 57
## B 160 80 41 54
## C 156 88 35 48
## D 173 63 53 59
## E 170 86 47 56
## F 165 89 45 61
pca <- rda(datos) # RealizaciĂłn del pca
x11()
biplot(pca) # Figura del pca
abline(h=0, col = "blue") # abline (h=0) lĂnea horizontal del plano cartesiano
abline(v=0, col = "blue") # abline (v=0) lĂnea vertical del plano cartesiano
grid()

#-----------------------
# 6) * Avanzados
# Figura con nombres de los estudiantes
datos2= read.csv2("datos1.csv") # Base de datos original
datos2=na.omit(datos2) # na.omit, para eliminar al estudiante 13
str(datos2)
## 'data.frame': 24 obs. of 6 variables:
## $ Nombre : chr "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" ...
## $ Sexo : chr "F" "F" "F" "F" ...
## $ Longitud.total : int 170 160 156 173 170 165 170 181 175 186 ...
## $ Cintura : num 85 80 88 63 86 89 88 80 76 45 ...
## $ Longitud.espalda: int 43 41 35 53 47 45 56 60 55 60 ...
## $ Long.brazo : int 57 54 48 59 56 61 59 55 54 86 ...
## - attr(*, "na.action")= 'omit' Named int 13
## ..- attr(*, "names")= chr "13"
head(datos2) # Encabezado de la la base "datos2"
## Nombre Sexo Longitud.total Cintura Longitud.espalda Long.brazo
## 1 Alumno 1 F 170 85 43 57
## 2 Alumno 2 F 160 80 41 54
## 3 Alumno 3 F 156 88 35 48
## 4 Alumno 4 F 173 63 53 59
## 5 Alumno 5 M 170 86 47 56
## 6 Alumno 6 M 165 89 45 61
datos2$Nombre # Valores de la columna "nombres"
## [1] "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" "Alumno 5" "Alumno 6"
## [7] "Alumno 7" "Alumno 8" "Alumno 9" "Alumno 10" "Alumno 11" "Alumno 12"
## [13] "Alumno 14" "Alumno 15" "Alumno 16" "Alumno 17" "Alumno 18" "Alumno 19"
## [19] "Alumno 20" "Alumno 21" "Alumno 22" "Alumno 23" "Alumno 24" "Alumno 25"
head(m.Rotada) # Matriz rotada original
## [,1] [,2] [,3] [,4]
## A 8.877894 -1.203944 -0.5377327 4.1553911
## B 6.061918 9.038533 -0.7513522 -0.8562256
## C 16.276518 15.617019 0.5187139 0.8088270
## D -13.156847 -3.807327 -10.2223190 0.8536681
## E 9.903318 -3.179694 -3.1367821 1.6474314
## F 11.389822 -1.984059 3.7403017 -1.8262527
m.Rotada1 = as.data.frame (m.Rotada) # Matriz rotada como data frame
m.Rotada1$nombres <- datos2$Nombre # Insertar nombres de los estudiantes
m.Rotada1 = as.matrix(m.Rotada1) # M. rotada como matriz
rownames(m.Rotada1)= datos2[,1] # Siglas para las operaciones
x11()
plot(m.Rotada1[,1:4], asp = 2, pch = 19, # EdiciĂłn de la figura
xlab="Eje 1", ylab="Eje 2")
text(m.Rotada1, labels = row.names(m.Rotada1[,1:4]),
pos = 3, cex=0.7, col = "blue")
abline(h=0, col = "red")
abline(v=0, col = "red")
grid()

#---------------
# 7) Análisis de Componentes Principales - pca
library(vegan)
datos2= read.csv2("datos1.csv") # Base de datos original
datos2=na.omit(datos2) # na.omit, para eliminar al estudiante 13
colnames(datos2) <- c("Nombre","Sexo","LTot","Cint","LEsp","LBra")
head(datos2) # Base de datos abreviada
## Nombre Sexo LTot Cint LEsp LBra
## 1 Alumno 1 F 170 85 43 57
## 2 Alumno 2 F 160 80 41 54
## 3 Alumno 3 F 156 88 35 48
## 4 Alumno 4 F 173 63 53 59
## 5 Alumno 5 M 170 86 47 56
## 6 Alumno 6 M 165 89 45 61
pca <- rda(datos2[3:6]) # eEalizaciĂłn del pca
rownames(datos2)= datos2[,1] # Siglas para las operaciones
# Figura del pca
x11()
biplot(pca, type = c("text", "n"),scaling =2, # Figura solo con variables morfométricas
main="PCA - Scaling 2",cex=2)
text(pca, display="sites", cex=0.7, # Graficas a los estudiantes
col="blue", lwd=1.5, pos=3,
labels = as.character(datos2$Nombre)) # Nombres de los estudiantes

#---------------
# 8) Figura en 3D de la matriz proyectada "m.Rotada"
library(plot3D)
m.Rotada1 = as.data.frame (m.Rotada) # Matriz rotada como data frame
m.Rotada1$nombres <- datos2$Nombre # Insertar nombres de los estudiantes
colnames(m.Rotada1) <- c("Eje1","Eje2","Eje3","Eje4","Nombre")
plot(m.Rotada1[, c(1, 2)], pch = 19, asp = 1) # Figura con ejes 1 y 2

plot(m.Rotada1[, c(1, 3)], pch = 19, asp = 1) # Figura con ejes 1 y 3

plot(m.Rotada1[, c(2, 3)], pch = 19, asp = 1) # Figura con ejes 2 y 3

x11()
str(m.Rotada1)
## 'data.frame': 24 obs. of 5 variables:
## $ Eje1 : num 8.88 6.06 16.28 -13.16 9.9 ...
## $ Eje2 : num -1.2 9.04 15.62 -3.81 -3.18 ...
## $ Eje3 : num -0.538 -0.751 0.519 -10.222 -3.137 ...
## $ Eje4 : num 4.155 -0.856 0.809 0.854 1.647 ...
## $ Nombre: chr "Alumno 1" "Alumno 2" "Alumno 3" "Alumno 4" ...
scatter3D (m.Rotada1[, 1], m.Rotada1[, 2], # Figura con ejes 1, 2 y 3
m.Rotada1[, 3], pch = 19, asp = 2)
