“Homework 2”

“14/10/2021”

“Saul Maldonado”

17/08/21

# Esto es un comentario
# Correr instrucciones Ctrl + Enter o "run"
2+2 # Toda la linea = situado en linea
## [1] 4
# Color azul todo bien
5-3
## [1] 2
3-9
## [1] -6
3*8
## [1] 24
#  * es multiplicador escalar
3^2
## [1] 9
### Asignación de nombres a variables, tablas, etc.
# <- operador de asignación <-
xyy<-5
yyz<-12
xyy+yyz
## [1] 17
xyy<-5
xyy+yyz
## [1] 17
zzz<-xyy+5
zzz
## [1] 10
vect6<- seq(10,40,10)

23/08/21

## Operaciones "punto" por vector##
vect3<- c(15,18,20,24)
5*vect3
## [1]  75  90 100 120
vect1 <- 15
vect1*vect3
## [1] 225 270 300 360
## [fila, columna] Matriz 5x4

practi <- c(5,7,3,9,7,12,6,7)
practi_mat <- matrix(practi,ncol = 4, byrow = TRUE)
practi_mat
##      [,1] [,2] [,3] [,4]
## [1,]    5    7    3    9
## [2,]    7   12    6    7
practi_mat2 <- matrix(practi, nrow=4, byrow = TRUE)

dim(practi_mat)
## [1] 2 4
dim(practi_mat2)
## [1] 4 2
practi_mat3 <- matrix(c(11,13,2,5,8,4,7,12,21,21,6,8),
                     ncol = 3, byrow = TRUE)
3*practi_mat3
##      [,1] [,2] [,3]
## [1,]   33   39    6
## [2,]   15   24   12
## [3,]   21   36   63
## [4,]   63   18   24
## indicadores de posicion (matriz y vector) ##
dim(practi_mat3)
## [1] 4 3
practi_mat3[1,3]
## [1] 2
practi_mat3 [, 3] #todos los renglones de la columna
## [1]  2  4 21  8
practi_mat3 [2, ] #todas las columnas del renglon
## [1] 5 8 4
practi_mat3 [1:2, ] # Fila 1 y 2. todas las columnas
##      [,1] [,2] [,3]
## [1,]   11   13    2
## [2,]    5    8    4
practi_mat3 [, 1:2] # Columna 1 y 2 todas las filas
##      [,1] [,2]
## [1,]   11   13
## [2,]    5    8
## [3,]    7   12
## [4,]   21    6
practi_mat3 [-1, ] # Elimina la fila solicitada
##      [,1] [,2] [,3]
## [1,]    5    8    4
## [2,]    7   12   21
## [3,]   21    6    8
practi_mat3 [-1, -1] #Elimina la fila y la columna 1
##      [,1] [,2]
## [1,]    8    4
## [2,]   12   21
## [3,]    6    8
matri2<- practi_mat3 [-1, -1]

practi_mat3 [c(1, 4),]
##      [,1] [,2] [,3]
## [1,]   11   13    2
## [2,]   21    6    8
practi_mat3 [-c(2,3),]
##      [,1] [,2] [,3]
## [1,]   11   13    2
## [2,]   21    6    8
practi_mat3 [-c(2,3), -c(1,3)]
## [1] 13  6
## Álgebra de matrices

t(practi_mat3)
##      [,1] [,2] [,3] [,4]
## [1,]   11    5    7   21
## [2,]   13    8   12    6
## [3,]    2    4   21    8
practi_mat4 <- practi_mat3[-4,]
practi_mat4
##      [,1] [,2] [,3]
## [1,]   11   13    2
## [2,]    5    8    4
## [3,]    7   12   21
dim(practi_mat4)
## [1] 3 3
inv_practi_mat4 <- solve(practi_mat4)

# para multiplicar matrices no se usa solo el "*"
#sino que se usa "%*%"

## ¿Multiplicación por la derecha o la izquierda? ##

practi_mat3 #4x3    3x2   dado que los elementos internos son iguales (3) se puede resolver
##      [,1] [,2] [,3]
## [1,]   11   13    2
## [2,]    5    8    4
## [3,]    7   12   21
## [4,]   21    6    8
matri2      #3x2    4x3   no se puede multiplicar pues el elemento interno es diferente (2 y 4)
##      [,1] [,2]
## [1,]    8    4
## [2,]   12   21
## [3,]    6    8
practi_mat3%*%matri2
##      [,1] [,2]
## [1,]  256  333
## [2,]  160  220
## [3,]  326  448
## [4,]  288  274
# Matriz por su inversa = identidad

practi_mat4%*%inv_practi_mat4
##               [,1]          [,2]          [,3]
## [1,]  1.000000e+00 -4.996004e-16  5.551115e-17
## [2,] -2.428613e-16  1.000000e+00 -2.220446e-16
## [3,]  5.551115e-17  0.000000e+00  1.000000e+00

24/08/21

#sistema de ecuaciones

#5x-3y+2z=1
#-2x+2y-z=5
#4x+2y-4z=-3

coeficientes<-matrix(c(5,-3,2,-2,2,-1,4,2,-4), byrow = TRUE, ncol = 3)
respuestas <- c(1,5,-3)
?solve
## starting httpd help server ... done
solucion<-solve(coeficientes, respuestas)
ainv <- solve(coeficientes)
solucion
## [1] 2.388889 8.611111 7.444444
length(solucion)
## [1] 3
#Intentemos x= b*a^(-1)
respuestas%*%ainv
##          [,1]     [,2]      [,3]
## [1,] 1.666667 4.555556 0.4444444
#Intentemos x= a^(-1)* b
ainv%*%respuestas #Este es el orden correcto para resolver el sistema de ecuaciones
##          [,1]
## [1,] 2.388889
## [2,] 8.611111
## [3,] 7.444444
(coeficientes + practi_mat4) %*% (solve(coeficientes + practi_mat4))
##               [,1]         [,2] [,3]
## [1,]  1.000000e+00 5.551115e-17    0
## [2,] -2.775558e-17 1.000000e+00    0
## [3,] -2.220446e-16 2.220446e-16    1
# Ctrl + L en la consola borra lo de la consola sin eliminar lo que se ha hecho
# Ctrl + A selecciona todo
ls()
##  [1] "ainv"            "coeficientes"    "inv_practi_mat4" "matri2"         
##  [5] "practi"          "practi_mat"      "practi_mat2"     "practi_mat3"    
##  [9] "practi_mat4"     "respuestas"      "solucion"        "vect1"          
## [13] "vect3"           "vect6"           "xyy"             "yyz"            
## [17] "zzz"
#ls() muestra todo los objetos del ambiente
#Rm elimina lo que se le indica

coeficientes
##      [,1] [,2] [,3]
## [1,]    5   -3    2
## [2,]   -2    2   -1
## [3,]    4    2   -4
t(coeficientes)
##      [,1] [,2] [,3]
## [1,]    5   -2    4
## [2,]   -3    2    2
## [3,]    2   -1   -4
diag(coeficientes)
## [1]  5  2 -4
det(coeficientes)
## [1] -18
?det

cbind(coeficientes, coeficientes[,1:2])
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    5   -3    2    5   -3
## [2,]   -2    2   -1   -2    2
## [3,]    4    2   -4    4    2
rbind(coeficientes, coeficientes [1:2,])
##      [,1] [,2] [,3]
## [1,]    5   -3    2
## [2,]   -2    2   -1
## [3,]    4    2   -4
## [4,]    5   -3    2
## [5,]   -2    2   -1
vari1<-c("M", "H")
vari1
## [1] "M" "H"
vari2<-c("M","H","M","H","H","M","M",
         "M","M","H","H","H","M")
length(vari2)
## [1] 13
table(vari2)
## vari2
## H M 
## 6 7
vari3<-c("1","0","1","0","0","1","1",
         "1","1","0","0","0","1")
table(vari3)
## vari3
## 0 1 
## 6 7
table (vari2, vari3)
##      vari3
## vari2 0 1
##     H 6 0
##     M 0 7
factor(vari3)
##  [1] 1 0 1 0 0 1 1 1 1 0 0 0 1
## Levels: 0 1
sum(as.numeric(vari3)) #cambia la informacion a numerica
## [1] 7
vari3 [5]<- "cero"
vari3 [7]<- "uno"
vari3
##  [1] "1"    "0"    "1"    "0"    "cero" "1"    "uno"  "1"    "1"    "0"   
## [11] "0"    "0"    "1"
as.numeric(vari3)
## Warning: NAs introducidos por coerción
##  [1]  1  0  1  0 NA  1 NA  1  1  0  0  0  1
table(as.numeric(vari3))
## Warning in table(as.numeric(vari3)): NAs introducidos por coerción
## 
## 0 1 
## 5 6
# Practicar el unir tablas/vectores del mismo tipo
# Distinto tipo/tipo de variable

rm(vect6)
vect6<- c(10,20,30,40,10,20,30,40,10,20,30,40,10,20,30,40)
vect7 <- c(10,10,10,10,20,20,20,20,30,30,30,30,40,40,40,40)

matriz7<-cbind(vect6,vect7)
dim(matriz7)
## [1] 16  2
matriz8<-cbind(vari2,vari3)
dim(matriz8)
## [1] 13  2
matriz9<- cbind(vect6[1:13], vari2)
matriz9
##            vari2
##  [1,] "10" "M"  
##  [2,] "20" "H"  
##  [3,] "30" "M"  
##  [4,] "40" "H"  
##  [5,] "10" "H"  
##  [6,] "20" "M"  
##  [7,] "30" "M"  
##  [8,] "40" "M"  
##  [9,] "10" "M"  
## [10,] "20" "H"  
## [11,] "30" "H"  
## [12,] "40" "H"  
## [13,] "10" "M"
######################################
# Marcos de datos #
# Conviven en la misma tabla distintos
#tipos de elementos#
######################################

data.frame(vector=vect6[1:13], vector2=vari3)
##    vector vector2
## 1      10       1
## 2      20       0
## 3      30       1
## 4      40       0
## 5      10    cero
## 6      20       1
## 7      30     uno
## 8      40       1
## 9      10       1
## 10     20       0
## 11     30       0
## 12     40       0
## 13     10       1
data.frame(vector=vect6[1:13], vector2=vari2)
##    vector vector2
## 1      10       M
## 2      20       H
## 3      30       M
## 4      40       H
## 5      10       H
## 6      20       M
## 7      30       M
## 8      40       M
## 9      10       M
## 10     20       H
## 11     30       H
## 12     40       H
## 13     10       M
data.frame(vector=as.numeric(vect6[1:13]), vector2=vari2)
##    vector vector2
## 1      10       M
## 2      20       H
## 3      30       M
## 4      40       H
## 5      10       H
## 6      20       M
## 7      30       M
## 8      40       M
## 9      10       M
## 10     20       H
## 11     30       H
## 12     40       H
## 13     10       M
data.frame(vector=as.numeric(vect6[1:13]), 
           vector2=as.numeric(vari3))
## Warning in data.frame(vector = as.numeric(vect6[1:13]), vector2 =
## as.numeric(vari3)): NAs introducidos por coerción
##    vector vector2
## 1      10       1
## 2      20       0
## 3      30       1
## 4      40       0
## 5      10      NA
## 6      20       1
## 7      30      NA
## 8      40       1
## 9      10       1
## 10     20       0
## 11     30       0
## 12     40       0
## 13     10       1
matriz11<-data.frame(vector=as.numeric(vect6[1:13]), 
           vector2=as.factor(vari3))

matriz12<-data.frame(vector=as.numeric(vect6[1:13]), 
                     vector2=as.factor(vari3),
                     vector3=as.numeric(vect7[1:13]),
                     vector4=as.factor(vari2))
matriz12
##    vector vector2 vector3 vector4
## 1      10       1      10       M
## 2      20       0      10       H
## 3      30       1      10       M
## 4      40       0      10       H
## 5      10    cero      20       H
## 6      20       1      20       M
## 7      30     uno      20       M
## 8      40       1      20       M
## 9      10       1      30       M
## 10     20       0      30       H
## 11     30       0      30       H
## 12     40       0      30       H
## 13     10       1      40       M
?data.frame

# Preguntas informativas
# proporciona informacion 
is.data.frame(matriz12)
## [1] TRUE
is.data.frame(matriz9)
## [1] FALSE
is.numeric(matriz12$vector)
## [1] TRUE
is.numeric(matriz12$vector2)
## [1] FALSE
is.factor(matriz12$vector)
## [1] FALSE
is.factor(matriz12$vector2)
## [1] TRUE
is.factor(matriz12$vector2[1])
## [1] TRUE
is.numeric(matriz12$vector2[1])
## [1] FALSE
View(matriz12) # Ver todos los elementos de la matriz

# Recap
## 1) Escalares... números sueltos
## 2) Vectores
## 3) Matriz
## 4) Listas  # Agregar todos los anteriores

?list
casa<-list(mensaje="Hola mundo",
           vector=vari1, 
           matriz=matriz12,
           generado=as.factor(seq(1,50)))
is.list(casa)
## [1] TRUE
is.list(matriz12)
## [1] TRUE
casa$mensaje
## [1] "Hola mundo"
casa$vector[1]
## [1] "M"
casa$matriz$vector
##  [1] 10 20 30 40 10 20 30 40 10 20 30 40 10
# Estadística de resumen/genéricas
# solve # mean # sd # var # max # min

matriz13 <- cbind(matriz12$vector, matriz12$vector3)

mean(matriz13[,2])
## [1] 21.53846
sd(matriz13[,2])
## [1] 9.870962
max(matriz13[,2])
## [1] 40
min(matriz13[,2])
## [1] 10
# ¿y si queremos obtener el vector [l=2] de las medias de matriz 13?
# Funciones ya hechas
# Funciones que podemos generar

31/08/21

# cargar datos preinstalados en R

data(iris)
?iris
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
data("iris3")
str(iris3)
##  num [1:50, 1:4, 1:3] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  - attr(*, "dimnames")=List of 3
##   ..$ : NULL
##   ..$ : chr [1:4] "Sepal L." "Sepal W." "Petal L." "Petal W."
##   ..$ : chr [1:3] "Setosa" "Versicolor" "Virginica"
dim(iris)
## [1] 150   5
is.matrix(iris)
## [1] FALSE
is.data.frame(iris)
## [1] TRUE
is.list(iris)
## [1] TRUE
is.data.frame(iris3)
## [1] FALSE
is.matrix(iris3)
## [1] FALSE
is.list(iris3)
## [1] FALSE
dim(iris3)
## [1] 50  4  3
head(iris3)
## , , Setosa
## 
##      Sepal L. Sepal W. Petal L. Petal W.
## [1,]      5.1      3.5      1.4      0.2
## [2,]      4.9      3.0      1.4      0.2
## [3,]      4.7      3.2      1.3      0.2
## [4,]      4.6      3.1      1.5      0.2
## [5,]      5.0      3.6      1.4      0.2
## [6,]      5.4      3.9      1.7      0.4
## 
## , , Versicolor
## 
##      Sepal L. Sepal W. Petal L. Petal W.
## [1,]      7.0      3.2      4.7      1.4
## [2,]      6.4      3.2      4.5      1.5
## [3,]      6.9      3.1      4.9      1.5
## [4,]      5.5      2.3      4.0      1.3
## [5,]      6.5      2.8      4.6      1.5
## [6,]      5.7      2.8      4.5      1.3
## 
## , , Virginica
## 
##      Sepal L. Sepal W. Petal L. Petal W.
## [1,]      6.3      3.3      6.0      2.5
## [2,]      5.8      2.7      5.1      1.9
## [3,]      7.1      3.0      5.9      2.1
## [4,]      6.3      2.9      5.6      1.8
## [5,]      6.5      3.0      5.8      2.2
## [6,]      7.6      3.0      6.6      2.1
View(iris)

is.numeric(iris[,1])
## [1] TRUE
iris3[1,,] # primer renglon con todas las variables (columnas)
##          Setosa Versicolor Virginica
## Sepal L.    5.1        7.0       6.3
## Sepal W.    3.5        3.2       3.3
## Petal L.    1.4        4.7       6.0
## Petal W.    0.2        1.4       2.5
            # y todos los niveles de profundidad
iris3[,3,] # primer columna todos las observaciones (renglones)
##       Setosa Versicolor Virginica
##  [1,]    1.4        4.7       6.0
##  [2,]    1.4        4.5       5.1
##  [3,]    1.3        4.9       5.9
##  [4,]    1.5        4.0       5.6
##  [5,]    1.4        4.6       5.8
##  [6,]    1.7        4.5       6.6
##  [7,]    1.4        4.7       4.5
##  [8,]    1.5        3.3       6.3
##  [9,]    1.4        4.6       5.8
## [10,]    1.5        3.9       6.1
## [11,]    1.5        3.5       5.1
## [12,]    1.6        4.2       5.3
## [13,]    1.4        4.0       5.5
## [14,]    1.1        4.7       5.0
## [15,]    1.2        3.6       5.1
## [16,]    1.5        4.4       5.3
## [17,]    1.3        4.5       5.5
## [18,]    1.4        4.1       6.7
## [19,]    1.7        4.5       6.9
## [20,]    1.5        3.9       5.0
## [21,]    1.7        4.8       5.7
## [22,]    1.5        4.0       4.9
## [23,]    1.0        4.9       6.7
## [24,]    1.7        4.7       4.9
## [25,]    1.9        4.3       5.7
## [26,]    1.6        4.4       6.0
## [27,]    1.6        4.8       4.8
## [28,]    1.5        5.0       4.9
## [29,]    1.4        4.5       5.6
## [30,]    1.6        3.5       5.8
## [31,]    1.6        3.8       6.1
## [32,]    1.5        3.7       6.4
## [33,]    1.5        3.9       5.6
## [34,]    1.4        5.1       5.1
## [35,]    1.5        4.5       5.6
## [36,]    1.2        4.5       6.1
## [37,]    1.3        4.7       5.6
## [38,]    1.4        4.4       5.5
## [39,]    1.3        4.1       4.8
## [40,]    1.5        4.0       5.4
## [41,]    1.3        4.4       5.6
## [42,]    1.3        4.6       5.1
## [43,]    1.3        4.0       5.1
## [44,]    1.6        3.3       5.9
## [45,]    1.9        4.2       5.7
## [46,]    1.4        4.2       5.2
## [47,]    1.6        4.2       5.0
## [48,]    1.4        4.3       5.2
## [49,]    1.5        3.0       5.4
## [50,]    1.4        4.1       5.1
            # y los tres niveles de profundidad
iris3[,,3] # el primer nivel de profundidad con sus observaciones
##       Sepal L. Sepal W. Petal L. Petal W.
##  [1,]      6.3      3.3      6.0      2.5
##  [2,]      5.8      2.7      5.1      1.9
##  [3,]      7.1      3.0      5.9      2.1
##  [4,]      6.3      2.9      5.6      1.8
##  [5,]      6.5      3.0      5.8      2.2
##  [6,]      7.6      3.0      6.6      2.1
##  [7,]      4.9      2.5      4.5      1.7
##  [8,]      7.3      2.9      6.3      1.8
##  [9,]      6.7      2.5      5.8      1.8
## [10,]      7.2      3.6      6.1      2.5
## [11,]      6.5      3.2      5.1      2.0
## [12,]      6.4      2.7      5.3      1.9
## [13,]      6.8      3.0      5.5      2.1
## [14,]      5.7      2.5      5.0      2.0
## [15,]      5.8      2.8      5.1      2.4
## [16,]      6.4      3.2      5.3      2.3
## [17,]      6.5      3.0      5.5      1.8
## [18,]      7.7      3.8      6.7      2.2
## [19,]      7.7      2.6      6.9      2.3
## [20,]      6.0      2.2      5.0      1.5
## [21,]      6.9      3.2      5.7      2.3
## [22,]      5.6      2.8      4.9      2.0
## [23,]      7.7      2.8      6.7      2.0
## [24,]      6.3      2.7      4.9      1.8
## [25,]      6.7      3.3      5.7      2.1
## [26,]      7.2      3.2      6.0      1.8
## [27,]      6.2      2.8      4.8      1.8
## [28,]      6.1      3.0      4.9      1.8
## [29,]      6.4      2.8      5.6      2.1
## [30,]      7.2      3.0      5.8      1.6
## [31,]      7.4      2.8      6.1      1.9
## [32,]      7.9      3.8      6.4      2.0
## [33,]      6.4      2.8      5.6      2.2
## [34,]      6.3      2.8      5.1      1.5
## [35,]      6.1      2.6      5.6      1.4
## [36,]      7.7      3.0      6.1      2.3
## [37,]      6.3      3.4      5.6      2.4
## [38,]      6.4      3.1      5.5      1.8
## [39,]      6.0      3.0      4.8      1.8
## [40,]      6.9      3.1      5.4      2.1
## [41,]      6.7      3.1      5.6      2.4
## [42,]      6.9      3.1      5.1      2.3
## [43,]      5.8      2.7      5.1      1.9
## [44,]      6.8      3.2      5.9      2.3
## [45,]      6.7      3.3      5.7      2.5
## [46,]      6.7      3.0      5.2      2.3
## [47,]      6.3      2.5      5.0      1.9
## [48,]      6.5      3.0      5.2      2.0
## [49,]      6.2      3.4      5.4      2.3
## [50,]      5.9      3.0      5.1      1.8
            #(renglones) y sus variables (columnas)


# iris3
# promedio de Sepal L. & W. de cada flor
iris3[,1,]
##       Setosa Versicolor Virginica
##  [1,]    5.1        7.0       6.3
##  [2,]    4.9        6.4       5.8
##  [3,]    4.7        6.9       7.1
##  [4,]    4.6        5.5       6.3
##  [5,]    5.0        6.5       6.5
##  [6,]    5.4        5.7       7.6
##  [7,]    4.6        6.3       4.9
##  [8,]    5.0        4.9       7.3
##  [9,]    4.4        6.6       6.7
## [10,]    4.9        5.2       7.2
## [11,]    5.4        5.0       6.5
## [12,]    4.8        5.9       6.4
## [13,]    4.8        6.0       6.8
## [14,]    4.3        6.1       5.7
## [15,]    5.8        5.6       5.8
## [16,]    5.7        6.7       6.4
## [17,]    5.4        5.6       6.5
## [18,]    5.1        5.8       7.7
## [19,]    5.7        6.2       7.7
## [20,]    5.1        5.6       6.0
## [21,]    5.4        5.9       6.9
## [22,]    5.1        6.1       5.6
## [23,]    4.6        6.3       7.7
## [24,]    5.1        6.1       6.3
## [25,]    4.8        6.4       6.7
## [26,]    5.0        6.6       7.2
## [27,]    5.0        6.8       6.2
## [28,]    5.2        6.7       6.1
## [29,]    5.2        6.0       6.4
## [30,]    4.7        5.7       7.2
## [31,]    4.8        5.5       7.4
## [32,]    5.4        5.5       7.9
## [33,]    5.2        5.8       6.4
## [34,]    5.5        6.0       6.3
## [35,]    4.9        5.4       6.1
## [36,]    5.0        6.0       7.7
## [37,]    5.5        6.7       6.3
## [38,]    4.9        6.3       6.4
## [39,]    4.4        5.6       6.0
## [40,]    5.1        5.5       6.9
## [41,]    5.0        5.5       6.7
## [42,]    4.5        6.1       6.9
## [43,]    4.4        5.8       5.8
## [44,]    5.0        5.0       6.8
## [45,]    5.1        5.6       6.7
## [46,]    4.8        5.7       6.7
## [47,]    5.1        5.7       6.3
## [48,]    4.6        6.2       6.5
## [49,]    5.3        5.1       6.2
## [50,]    5.0        5.7       5.9
mean(iris3[,1,1]) #Sepal L de Setosa
## [1] 5.006
mean(iris3[,1,2]) #Sepal L de Versicolor
## [1] 5.936
mean(iris3[,1,3]) #Sepal L de Virginica
## [1] 6.588
mean(iris3[,2,1]) #Sepal W de Setosa
## [1] 3.428
mean(iris3[,2,2]) #Sepal W de Versicolor
## [1] 2.77
mean(iris3[,2,3]) #Sepal W de Virginica
## [1] 2.974
#iris

mean(iris[1:50,1])#Sepal L de Setosa
## [1] 5.006
mean(iris[51:100,1])#Sepal L de Versicolor
## [1] 5.936
mean(iris[101:150,1])#Sepal L de Virginica
## [1] 6.588
mean(iris[1:50,2])   #Sepal W de Setosa
## [1] 3.428
mean(iris[51:100,2]) #Sepal W de Versicolor
## [1] 2.77
mean(iris[101:150,2])#Sepal W de Virginica
## [1] 2.974
# esto es mas facil con las funciones apply() & aggregate

?apply
prom_setosa<-apply(iris[1:50,-5], 2, mean)     
# Todos los promedios de Setosa
prom_versi<-apply(iris[51:100,-5], 2, mean)   
# Todos los promedios de Versicolor
prom_virgi<-apply(iris[101:150,-5], 2, mean)  
# Todos los promedios de Virginical

promedio_flores<-data.frame(Setosa=prom_setosa,
                            Versicolor=prom_versi,
                            Virginical=prom_virgi)

promedio_flores
##              Setosa Versicolor Virginical
## Sepal.Length  5.006      5.936      6.588
## Sepal.Width   3.428      2.770      2.974
## Petal.Length  1.462      4.260      5.552
## Petal.Width   0.246      1.326      2.026
# Obtener la sd (desviacion estandar) de cada flor de sus 4
# variables, pero de la base iris3
# generar un data.frame parecido a promedio_flores

sd_setosa<-apply(iris3[,,1], 2, sd)     
# Todos las desviaciones estandar de Setosa
sd_versi<-apply(iris3[,,2], 2, sd)   
# Todos las desviaciones estandar de Versicolor
sd_virgi<-apply(iris3[,,3], 2, sd)  
# Todos las desviaciones estandar de Virginical

sd_flores <- data.frame(Setosa=sd_setosa,
                            Versicolor=sd_versi,
                            Virginical=sd_virgi)
rownames(sd_flores)<-c("Largo sépalo","Ancho sépalo","Largo pétalo",
                       "Ancho pétalo")
colnames(sd_flores)<-c("Set","Versi","Virgi")
sd_flores
##                    Set     Versi     Virgi
## Largo sépalo 0.3524897 0.5161711 0.6358796
## Ancho sépalo 0.3790644 0.3137983 0.3224966
## Largo pétalo 0.1736640 0.4699110 0.5518947
## Ancho pétalo 0.1053856 0.1977527 0.2746501

06/09/21

apply(iris3[,,3],2,summary)
##         Sepal L. Sepal W. Petal L. Petal W.
## Min.       4.900    2.200    4.500    1.400
## 1st Qu.    6.225    2.800    5.100    1.800
## Median     6.500    3.000    5.550    2.000
## Mean       6.588    2.974    5.552    2.026
## 3rd Qu.    6.900    3.175    5.875    2.300
## Max.       7.900    3.800    6.900    2.500
rbind(colMeans(iris[1:50,-5]),
colMeans(iris[51:100,-5]),
colMeans(iris[101:150,-5]))
##      Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,]        5.006       3.428        1.462       0.246
## [2,]        5.936       2.770        4.260       1.326
## [3,]        6.588       2.974        5.552       2.026
#aggregate() + 
#variable numerica~variable puede ser no numerica
?aggregate

aggregate(Sepal.Length~Species, data=iris, mean)
##      Species Sepal.Length
## 1     setosa        5.006
## 2 versicolor        5.936
## 3  virginica        6.588
aggregate(Sepal.Width~Species, data=iris, mean)
##      Species Sepal.Width
## 1     setosa       3.428
## 2 versicolor       2.770
## 3  virginica       2.974
aggregate(cbind(Sepal.Length, Sepal.Width,
                Petal.Length, Petal.Width)
          ~Species, data=iris, mean)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa        5.006       3.428        1.462       0.246
## 2 versicolor        5.936       2.770        4.260       1.326
## 3  virginica        6.588       2.974        5.552       2.026
aggregate(cbind(Sepal.Length, Sepal.Width,
                Petal.Length, Petal.Width)
          ~Species, data=iris, summary)
##      Species Sepal.Length.Min. Sepal.Length.1st Qu. Sepal.Length.Median
## 1     setosa             4.300                4.800               5.000
## 2 versicolor             4.900                5.600               5.900
## 3  virginica             4.900                6.225               6.500
##   Sepal.Length.Mean Sepal.Length.3rd Qu. Sepal.Length.Max. Sepal.Width.Min.
## 1             5.006                5.200             5.800            2.300
## 2             5.936                6.300             7.000            2.000
## 3             6.588                6.900             7.900            2.200
##   Sepal.Width.1st Qu. Sepal.Width.Median Sepal.Width.Mean Sepal.Width.3rd Qu.
## 1               3.200              3.400            3.428               3.675
## 2               2.525              2.800            2.770               3.000
## 3               2.800              3.000            2.974               3.175
##   Sepal.Width.Max. Petal.Length.Min. Petal.Length.1st Qu. Petal.Length.Median
## 1            4.400             1.000                1.400               1.500
## 2            3.400             3.000                4.000               4.350
## 3            3.800             4.500                5.100               5.550
##   Petal.Length.Mean Petal.Length.3rd Qu. Petal.Length.Max. Petal.Width.Min.
## 1             1.462                1.575             1.900            0.100
## 2             4.260                4.600             5.100            1.000
## 3             5.552                5.875             6.900            1.400
##   Petal.Width.1st Qu. Petal.Width.Median Petal.Width.Mean Petal.Width.3rd Qu.
## 1               0.200              0.200            0.246               0.300
## 2               1.200              1.300            1.326               1.500
## 3               1.800              2.000            2.026               2.300
##   Petal.Width.Max.
## 1            0.600
## 2            1.800
## 3            2.500
aggregate(cbind(Sepal.Length, Sepal.Width,
                Petal.Length, Petal.Width)
          ~Species, data=iris, sd)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa    0.3524897   0.3790644    0.1736640   0.1053856
## 2 versicolor    0.5161711   0.3137983    0.4699110   0.1977527
## 3  virginica    0.6358796   0.3224966    0.5518947   0.2746501
############### Cambio de base de datos ####################

data("ToothGrowth")
ToothGrowth
##     len supp dose
## 1   4.2   VC  0.5
## 2  11.5   VC  0.5
## 3   7.3   VC  0.5
## 4   5.8   VC  0.5
## 5   6.4   VC  0.5
## 6  10.0   VC  0.5
## 7  11.2   VC  0.5
## 8  11.2   VC  0.5
## 9   5.2   VC  0.5
## 10  7.0   VC  0.5
## 11 16.5   VC  1.0
## 12 16.5   VC  1.0
## 13 15.2   VC  1.0
## 14 17.3   VC  1.0
## 15 22.5   VC  1.0
## 16 17.3   VC  1.0
## 17 13.6   VC  1.0
## 18 14.5   VC  1.0
## 19 18.8   VC  1.0
## 20 15.5   VC  1.0
## 21 23.6   VC  2.0
## 22 18.5   VC  2.0
## 23 33.9   VC  2.0
## 24 25.5   VC  2.0
## 25 26.4   VC  2.0
## 26 32.5   VC  2.0
## 27 26.7   VC  2.0
## 28 21.5   VC  2.0
## 29 23.3   VC  2.0
## 30 29.5   VC  2.0
## 31 15.2   OJ  0.5
## 32 21.5   OJ  0.5
## 33 17.6   OJ  0.5
## 34  9.7   OJ  0.5
## 35 14.5   OJ  0.5
## 36 10.0   OJ  0.5
## 37  8.2   OJ  0.5
## 38  9.4   OJ  0.5
## 39 16.5   OJ  0.5
## 40  9.7   OJ  0.5
## 41 19.7   OJ  1.0
## 42 23.3   OJ  1.0
## 43 23.6   OJ  1.0
## 44 26.4   OJ  1.0
## 45 20.0   OJ  1.0
## 46 25.2   OJ  1.0
## 47 25.8   OJ  1.0
## 48 21.2   OJ  1.0
## 49 14.5   OJ  1.0
## 50 27.3   OJ  1.0
## 51 25.5   OJ  2.0
## 52 26.4   OJ  2.0
## 53 22.4   OJ  2.0
## 54 24.5   OJ  2.0
## 55 24.8   OJ  2.0
## 56 30.9   OJ  2.0
## 57 26.4   OJ  2.0
## 58 27.3   OJ  2.0
## 59 29.4   OJ  2.0
## 60 23.0   OJ  2.0
str(ToothGrowth)
## 'data.frame':    60 obs. of  3 variables:
##  $ len : num  4.2 11.5 7.3 5.8 6.4 10 11.2 11.2 5.2 7 ...
##  $ supp: Factor w/ 2 levels "OJ","VC": 2 2 2 2 2 2 2 2 2 2 ...
##  $ dose: num  0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
?ToothGrowth

mean(ToothGrowth$len)
## [1] 18.81333
mean(ToothGrowth$dose)
## [1] 1.166667
sd(ToothGrowth$dose)
## [1] 0.6288722
max(ToothGrowth$len)
## [1] 33.9
min(ToothGrowth$len)
## [1] 4.2
# ¿Cual es el promedio de crecimiento 
# por metodo de aplicacion?

aggregate(len~supp, data = ToothGrowth, mean)
##   supp      len
## 1   OJ 20.66333
## 2   VC 16.96333
aggregate(len~dose, data = ToothGrowth, mean)
##   dose    len
## 1  0.5 10.605
## 2  1.0 19.735
## 3  2.0 26.100
aggregate(len~supp+dose, data = ToothGrowth, mean)
##   supp dose   len
## 1   OJ  0.5 13.23
## 2   VC  0.5  7.98
## 3   OJ  1.0 22.70
## 4   VC  1.0 16.77
## 5   OJ  2.0 26.06
## 6   VC  2.0 26.14
?runif

set.seed(15148)
pesos<-rnorm(60,10,2)
pesos2<-runif(60)
peso_dientes<-data.frame(ToothGrowth, pesos= pesos)

aggregate(cbind(pesos,len)~dose+supp,
          data=peso_dientes, mean)
##   dose supp     pesos   len
## 1  0.5   OJ 10.024162 13.23
## 2  1.0   OJ  8.305933 22.70
## 3  2.0   OJ  9.195878 26.06
## 4  0.5   VC  9.744000  7.98
## 5  1.0   VC 10.293366 16.77
## 6  2.0   VC  9.481802 26.14
aggregate(cbind(len, pesos)~dose+supp,
          data=peso_dientes, mean)
##   dose supp   len     pesos
## 1  0.5   OJ 13.23 10.024162
## 2  1.0   OJ 22.70  8.305933
## 3  2.0   OJ 26.06  9.195878
## 4  0.5   VC  7.98  9.744000
## 5  1.0   VC 16.77 10.293366
## 6  2.0   VC 26.14  9.481802
aggregate(cbind(len, pesos, pesos2)~dose+supp,
          data=peso_dientes, mean)
##   dose supp   len     pesos    pesos2
## 1  0.5   OJ 13.23 10.024162 0.4034515
## 2  1.0   OJ 22.70  8.305933 0.5679498
## 3  2.0   OJ 26.06  9.195878 0.4765870
## 4  0.5   VC  7.98  9.744000 0.4664007
## 5  1.0   VC 16.77 10.293366 0.5118205
## 6  2.0   VC 26.14  9.481802 0.3408846

07/09/21

## Llamar los datos ##
#tibble, datos organizados como tabla
# es otro tipo de tabla junto con data.frame y matrix

#install.packages("readxl") # comprar e instalar el foco
library(readxl) # encender el foco

#library(kernlab)

datos10<-read_excel("C:\\Users\\divis\\Documents\\METPOL\\Semestre 1\\Manejo de BDD\\C.07.09.21\\datos_ags_estado_2020.xlsx",
           sheet="Hoja1", range="A1:HV481",
           na=c("*", "N/D"))
mean(as.numeric(datos10$POBTOT))
## [1] 2497.315
mean(datos10$POBTOT)
## [1] 2497.315
#1) ¿cual es la poblacion total de los 11 municipios?
#2) ¿cual es el total de hombres de los 11 municipios?
#3) ¿cual es el total de mujeres de los 11 municipios?
#4) ¿cual es la proporcion?

#1)
aggregate(as.numeric(POBTOT)~NOM_MUN,
          data=datos10, sum)
##                      NOM_MUN as.numeric(POBTOT)
## 1             Aguascalientes             901446
## 2                   Asientos              17760
## 3                   Calvillo              28367
## 4                      Cosío               8477
## 5                   El Llano               6307
## 6                Jesús María              97524
## 7        Pabellón de Arteaga              35351
## 8            Rincón de Romos              42562
## 9  San Francisco de los Romo              46196
## 10        San José de Gracia               5607
## 11                  Tepezalá               9114
#2)
aggregate(as.numeric(POBMAS)~NOM_MUN,
          data=datos10, sum)
##                      NOM_MUN as.numeric(POBMAS)
## 1             Aguascalientes             437749
## 2                   Asientos               8673
## 3                   Calvillo              13806
## 4                      Cosío               4067
## 5                   El Llano               3088
## 6                Jesús María              48011
## 7        Pabellón de Arteaga              17305
## 8            Rincón de Romos              20808
## 9  San Francisco de los Romo              22865
## 10        San José de Gracia               2635
## 11                  Tepezalá               4524
#3)
aggregate(as.numeric(POBFEM)~NOM_MUN,
          data=datos10, sum)
##                      NOM_MUN as.numeric(POBFEM)
## 1             Aguascalientes             463697
## 2                   Asientos               9087
## 3                   Calvillo              14561
## 4                      Cosío               4410
## 5                   El Llano               3219
## 6                Jesús María              49513
## 7        Pabellón de Arteaga              18046
## 8            Rincón de Romos              21748
## 9  San Francisco de los Romo              23331
## 10        San José de Gracia               2972
## 11                  Tepezalá               4590
#4)
tabla1<-aggregate(cbind(as.numeric(POBTOT),
               as.numeric(POBFEM),
                as.numeric(POBMAS))~NOM_MUN,
          data=datos10, sum)
prop_fem<-tabla1$V2/tabla1$V1
tabla2<-data.frame(tabla1, Prop_fem=prop_fem)
tabla2
##                      NOM_MUN     V1     V2     V3  Prop_fem
## 1             Aguascalientes 901446 463697 437749 0.5143924
## 2                   Asientos  17760   9087   8673 0.5116554
## 3                   Calvillo  28367  14561  13806 0.5133077
## 4                      Cosío   8477   4410   4067 0.5202312
## 5                   El Llano   6307   3219   3088 0.5103853
## 6                Jesús María  97524  49513  48011 0.5077007
## 7        Pabellón de Arteaga  35351  18046  17305 0.5104806
## 8            Rincón de Romos  42556  21748  20808 0.5110443
## 9  San Francisco de los Romo  46196  23331  22865 0.5050437
## 10        San José de Gracia   5607   2972   2635 0.5300517
## 11                  Tepezalá   9114   4590   4524 0.5036208
#5) Aproximado de personas por vivienda en cada municipio
#6) De san Jose de Gracia ¿cual es la poblacion de sus 
# AGEBs urbanos?
#7) De todos los AGEBs urbanos ¿cual es la proporcion de mujeres?

#5)
# ¿Cauantas viviendas entre cuantas personas?
tabla15<-aggregate(cbind(as.numeric(VIVTOT),
                as.numeric(POBTOT))~NOM_MUN,
          data=datos10,FUN=sum)
tabla15$Pro_viv<-tabla15$V2/tabla15$V1

#6)
san_jose<-which(datos10$NOM_MUN=="San José de Gracia")
datos_san_jose<-datos10[san_jose,]

datos_san_jose$POBTOT
## [1] 1095 1145  873  850  778  866
sum(as.numeric(datos_san_jose$POBTOT))
## [1] 5607
#7)
tabla18<-aggregate(cbind(as.numeric(POBTOT),
                as.numeric(POBFEM))~NOM_MUN+AGEB,
          data=datos10,FUN=sum)
tabla18$Prop_muj<-tabla18$V2/tabla18$V1

# trabajar con NA's # para no considerar NA's : na.rm=T
mean(as.numeric(datos10$P_0A2_F), na.rm = T)
## [1] 62.48817
?mean
sum(is.na(as.numeric(datos10$P_0A2_F)))
## [1] 15
summary(as.numeric(datos10$P_0A2_F))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    0.00   28.00   50.00   62.49   88.00  387.00      15
summary(as.numeric(datos10$P_0A2_F))[3]
## Median 
##     50
# Promedio por municipio
aggregate(as.numeric(P_0A2_F)~NOM_MUN, FUN=mean,
          data = datos10,na.rm=T)
##                      NOM_MUN as.numeric(P_0A2_F)
## 1             Aguascalientes            63.59077
## 2                   Asientos            40.57143
## 3                   Calvillo            51.06667
## 4                      Cosío            36.42857
## 5                   El Llano            63.66667
## 6                Jesús María            64.17949
## 7        Pabellón de Arteaga            63.66667
## 8            Rincón de Romos            83.26667
## 9  San Francisco de los Romo            74.47368
## 10        San José de Gracia            36.50000
## 11                  Tepezalá            38.42857

14/09/21

# FUN = funcion realizada por nnosotros ¿como la realizamos?

# FUNCIONES PERSONALIZADAS # FUNCIONES DEL USUARIO #

# ¿ENTRADA DE LA FUNCION? ¿CUAL ES LA SALIDA? #
# SE PROGRAMAN COMO SE NECESITAN, PERSONALIZADAS #

#1) Rango (max-min)
#2) Coeficiente de variabilidad sigma/abs(media)
#3) Media cortada: descartar el mayor y el menor

#1)
rango<-function(x){max(x)-min(x)}
#Setosa
rango(iris3[,1,1])
## [1] 1.5
apply(iris3[,,1],2,mean)
## Sepal L. Sepal W. Petal L. Petal W. 
##    5.006    3.428    1.462    0.246
apply(iris3[,,1],2,rango)
## Sepal L. Sepal W. Petal L. Petal W. 
##      1.5      2.1      0.9      0.5
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length,
                Petal.Width)~Species,
          data=iris,mean)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa        5.006       3.428        1.462       0.246
## 2 versicolor        5.936       2.770        4.260       1.326
## 3  virginica        6.588       2.974        5.552       2.026
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length,
                Petal.Width)~Species,
          data=iris,rango)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa          1.5         2.1          0.9         0.5
## 2 versicolor          2.1         1.4          2.1         0.8
## 3  virginica          3.0         1.6          2.4         1.1
#2)
coef_var<-function(x){sd(x)/abs(mean(x))}
apply(iris3[,,1],2,coef_var)
##   Sepal L.   Sepal W.   Petal L.   Petal W. 
## 0.07041344 0.11057887 0.11878522 0.42839670
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length,
                Petal.Width)~Species,
          data=iris,coef_var)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa   0.07041344   0.1105789   0.11878522   0.4283967
## 2 versicolor   0.08695606   0.1132846   0.11030774   0.1491348
## 3  virginica   0.09652089   0.1084387   0.09940466   0.1355627
#3)
max(iris3[,1,1])
## [1] 5.8
min(iris3[,1,1])
## [1] 4.3
which(iris3[,1,1]==max(iris3[,1,1]))
## [1] 15
which(iris3[,1,1]==min(iris3[,1,1]))
## [1] 14
descarte<-c(which(iris3[,3,1]==max(iris3[,3,1])),
  which(iris3[,3,1]==min(iris3[,3,1])))

mean(iris3[-descarte,1,1])
## [1] 5.017021
desc_media<-function(x){
descarte<-c(which(x==max(x)),
            which(x==min(x)))

mean(x[-descarte])}

desc_media(iris3[,3,1])
## [1] 1.453191
desc_media(iris3[,4,1])
## [1] 0.2545455
mean(iris3[,3,1])
## [1] 1.462
apply(iris3[,,1],2,desc_media)
##  Sepal L.  Sepal W.  Petal L.  Petal W. 
## 5.0041667 3.4312500 1.4531915 0.2545455
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length,
                Petal.Width)~Species,
          data=iris,desc_media)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa     5.004167    3.431250     1.453191   0.2545455
## 2 versicolor     5.935417    2.772917     4.268750   1.3690476
## 3  virginica     6.595833    2.955319     5.545833   2.0086957
## Quitarle los dos últimos y los dos primeros
# * sort
longi<-length(iris3[,3,1])
posis_quit<-c(1,2,longi-1,longi)
ordenado<-sort(iris3[,3,1], decreasing = T)
mean(ordenado[-posis_quit])
## [1] 1.46087
corte_dos<-function(w){
  longi<-length(w)
  posis_quit<-c(1,2,longi-1,longi)
  ordenado<-sort(w, decreasing = T)
  mean(ordenado[-posis_quit])
}

corte_dos(iris[,2])
## [1] 3.053425
apply(iris3[,,1],2,corte_dos)
##  Sepal L.  Sepal W.  Petal L.  Petal W. 
## 5.0021739 3.4260870 1.4608696 0.2391304
aggregate(cbind(Sepal.Length, Sepal.Width, Petal.Length,
                Petal.Width)~Species,
          data=iris,corte_dos)
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa     5.002174    3.426087     1.460870   0.2391304
## 2 versicolor     5.934783    2.773913     4.273913   1.3217391
## 3  virginica     6.593478    2.965217     5.536957   2.0304348
## Descartar el valor más próximo a la media

dist_abs<-abs(iris3[,3,1]-mean(iris3[,3,1]))
dist_abs
##  [1] 0.062 0.062 0.162 0.038 0.062 0.238 0.062 0.038 0.062 0.038 0.038 0.138
## [13] 0.062 0.362 0.262 0.038 0.162 0.062 0.238 0.038 0.238 0.038 0.462 0.238
## [25] 0.438 0.138 0.138 0.038 0.062 0.138 0.138 0.038 0.038 0.062 0.038 0.262
## [37] 0.162 0.062 0.162 0.038 0.162 0.162 0.162 0.138 0.438 0.062 0.138 0.062
## [49] 0.038 0.062
esc_dis_min<-min(dist_abs)
v_dis_min<-(esc_dis_min==dist_abs)
quitar<-which(dist_abs==esc_dis_min)
mean(iris3[-quitar,3,1])
## [1] 1.448649
prom_min_dist<-function(x){
  dist_abs<-abs(x-mean(x))
esc_dis_min<-min(dist_abs)
v_dis_min<-(esc_dis_min==dist_abs)
quitar<-which(dist_abs==esc_dis_min)
mean(x[-quitar])}

prom_min_dist(iris3[,3,1])
## [1] 1.448649

21/09/21

#Funciones personalizadas mas complejas
#ingreso de una tabla 
#(descomponerla o sacar correlaciones)

eigen(cor(iris[,-5]))
## eigen() decomposition
## $values
## [1] 2.91849782 0.91403047 0.14675688 0.02071484
## 
## $vectors
##            [,1]        [,2]       [,3]       [,4]
## [1,]  0.5210659 -0.37741762  0.7195664  0.2612863
## [2,] -0.2693474 -0.92329566 -0.2443818 -0.1235096
## [3,]  0.5804131 -0.02449161 -0.1421264 -0.8014492
## [4,]  0.5648565 -0.06694199 -0.6342727  0.5235971
descomposi<-function(w){
return(eigen(cor(w))$values)
}

descomposi(iris3[,,1])
## [1] 2.0585402 1.0221782 0.6678202 0.2514613
descomposi(iris3[,1:3,1])
## [1] 1.8581925 0.8902232 0.2515843
descomposi(iris3[1:10,,2])
## [1] 3.3419155 0.3638825 0.2326014 0.0616007
descomposi2<-function(w){
lista1<-eigen(cor(w))
return(list(lista1$vectors,lista1$values))
}

descomposi2(iris3[,,1])[[1]][,1]
## [1] 0.6044164 0.5756194 0.3754348 0.4029788
descomposi2(iris3[,,1])[[2]][3]
## [1] 0.6678202
descomposi3<-function(w){
  lista1<-eigen(cor(w))
  return(list(Vector=lista1$vectors,
              Valores=lista1$values))
}

descomposi3(iris3[,,1])$Valores[2]
## [1] 1.022178
descomposi3(iris3[,,1])$Vector[1,1]
## [1] 0.6044164
## Ingreso de dos o mas argumentos 
## (resolver sistema de ecuaciones)

coeficiente<-matrix(c(3,2,1,5,3,4,1,1,-1),
                    ncol = 3, byrow = T)
respuesta<-c(1,2,1)

solve(coeficiente,respuesta)
## [1] -4  6  1
res_ecua<-function(matriz,respu){
solve(matriz,respu)}


res_ecua2<-function(matriz,respu){
  solucion<-solve(matriz,respu)
  return(paste0("La solucion al sistema es : x = ",
                solucion[1]))}

res_ecua2(coeficiente, respuesta)
## [1] "La solucion al sistema es : x = -3.99999999999999"
coef2<-matrix(c(5,-3,-1,1,4,-6,2,3,4),
              ncol = 3, byrow = T)
respuesta2<-c(1,-1,9)

res_ecua2(coef2,respuesta2)
## [1] "La solucion al sistema es : x = 1"
res_ecua3<-function(matriz,respu){
  solucion<-solve(matriz,respu)
  return(paste0("La solucion al sistema es : x = ",
                solucion[1], ", ",
  " y = ", solucion[2], ", ",
  " z = ",solucion[3]))}

res_ecua3(coef2,respuesta2)
## [1] "La solucion al sistema es : x = 1,  y = 1,  z = 1"
res_ecua4<-function(matriz,respu){
  solucion<-solve(matriz,respu)
  return(cat("La solucion al sistema es:", "\n",
             "x = ",
                solucion[1], "\n",
                "y = ", solucion[2], "\n",
                "z = ",solucion[3]))}

res_ecua4(coef2,respuesta2)
## La solucion al sistema es: 
##  x =  1 
##  y =  1 
##  z =  1
### Formato de fechas 

covid_oaxaca<-read.csv("C:\\Users\\divis\\Documents\\METPOL\\Semestre 1\\Manejo de BDD\\Manejo fechas y emparejamiento. Caso COVID, Oaxaca 2020-20210921\\covid_oaxaca.csv")
fallecidos_oaxaca<-read.csv("C:\\Users\\divis\\Documents\\METPOL\\Semestre 1\\Manejo de BDD\\Manejo fechas y emparejamiento. Caso COVID, Oaxaca 2020-20210921\\fallecidos.csv")

str(covid_oaxaca)
## 'data.frame':    33367 obs. of  7 variables:
##  $ X             : int  195 297 334 406 491 556 572 630 919 930 ...
##  $ ENTIDAD_RES   : int  20 20 20 20 20 20 20 20 20 20 ...
##  $ MUNICIPIO_RES : int  413 45 278 399 67 43 390 174 67 45 ...
##  $ FECHA_INGRESO : chr  "2020-04-06" "2020-03-31" "2020-04-04" "2020-03-27" ...
##  $ FECHA_SINTOMAS: chr  "2020-03-26" "2020-03-26" "2020-03-28" "2020-03-26" ...
##  $ FECHA_DEF     : chr  "2020-04-11" "9999-99-99" "9999-99-99" "2020-03-29" ...
##  $ TIEM_SINT_HOSP: int  11 5 7 1 6 1 2 6 1 4 ...
str(fallecidos_oaxaca)
## 'data.frame':    129018 obs. of  39 variables:
##  $ X                  : int  3 6 15 16 19 22 27 30 31 35 ...
##  $ FECHA_ACTUALIZACION: chr  "2020-10-28" "2020-10-28" "2020-10-28" "2020-10-28" ...
##  $ ID_REGISTRO        : chr  "0e7853" "0a9217" "043f64" "0e07d8" ...
##  $ ORIGEN             : int  1 1 2 1 1 2 1 1 1 1 ...
##  $ SECTOR             : int  13 4 4 4 12 4 12 4 4 4 ...
##  $ ENTIDAD_UM         : int  21 9 9 15 9 14 9 15 10 2 ...
##  $ SEXO               : int  1 2 2 2 2 2 1 2 2 1 ...
##  $ ENTIDAD_NAC        : int  21 9 9 15 9 9 21 9 10 2 ...
##  $ ENTIDAD_RES        : int  21 9 9 15 9 14 9 15 10 2 ...
##  $ MUNICIPIO_RES      : int  85 5 10 104 15 67 15 121 7 2 ...
##  $ TIPO_PACIENTE      : int  2 2 2 2 1 2 2 2 2 2 ...
##  $ FECHA_INGRESO      : chr  "2020-03-28" "2020-03-26" "2020-03-26" "2020-03-28" ...
##  $ FECHA_SINTOMAS     : chr  "2020-03-23" "2020-03-26" "2020-03-26" "2020-03-28" ...
##  $ FECHA_DEF          : chr  "2020-04-05" "2020-04-02" "2020-03-30" "2020-04-02" ...
##  $ INTUBADO           : int  2 2 2 2 97 2 1 2 2 2 ...
##  $ NEUMONIA           : int  1 2 1 1 1 1 1 1 1 1 ...
##  $ EDAD               : int  73 94 58 49 54 42 83 49 73 62 ...
##  $ NACIONALIDAD       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ EMBARAZO           : int  2 97 97 97 97 97 2 97 97 2 ...
##  $ HABLA_LENGUA_INDIG : int  2 2 2 1 2 2 2 2 2 2 ...
##  $ INDIGENA           : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ DIABETES           : int  2 2 1 2 1 2 1 1 1 2 ...
##  $ EPOC               : int  2 2 1 2 2 2 2 2 2 1 ...
##  $ ASMA               : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ INMUSUPR           : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ HIPERTENSION       : int  1 2 1 2 2 2 2 1 1 1 ...
##  $ OTRA_COM           : int  2 2 2 2 2 2 2 1 2 2 ...
##  $ CARDIOVASCULAR     : int  2 1 2 2 2 2 2 2 2 2 ...
##  $ OBESIDAD           : int  1 2 2 2 2 1 2 2 2 2 ...
##  $ RENAL_CRONICA      : int  2 2 1 2 2 2 2 1 2 1 ...
##  $ TABAQUISMO         : int  2 2 2 2 2 2 2 1 2 1 ...
##  $ OTRO_CASO          : int  2 99 99 99 1 2 1 99 99 99 ...
##  $ TOMA_MUESTRA       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ RESULTADO_LAB      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ CLASIFICACION_FINAL: int  3 3 3 3 3 3 3 3 3 3 ...
##  $ MIGRANTE           : int  99 99 99 99 99 99 99 99 99 99 ...
##  $ PAIS_NACIONALIDAD  : chr  "México" "México" "México" "México" ...
##  $ PAIS_ORIGEN        : chr  "97" "97" "97" "97" ...
##  $ UCI                : int  2 2 1 2 97 2 2 2 2 2 ...
# Formato = fechas
#fechas sin hora = as.date
#Fechas con hora = strptime

?as.Date
# visualizar covid_oaxaca$FECHA_INGRESO
funcionas2<-as.Date(covid_oaxaca$FECHA_INGRESO,
        format = "%Y-%m-%d")
funcionas3<-as.Date(covid_oaxaca$FECHA_SINTOMAS,
                    format = "%Y-%m-%d")
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
day(funcionas2)
table(month(funcionas2))
## 
##    1    2    3    4    5    6    7    8    9   10 
##  162  149  384  912 3358 6812 7155 4721 5233 4481
funcionas2-funcionas3
summary(as.numeric(funcionas2-funcionas3))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   2.000   3.000   3.619   5.000  68.000
boxplot(as.numeric(funcionas2-funcionas3))

28/09/21

## ¿Y si tenemos hora y fecha de un evento?
##Crear función para cambiar formatos a fechas

bosque<-read.csv("C:\\Users\\divis\\Downloads\\Manejo de Fechas-20210928\\Datos bosque Harvard.csv")
dim(bosque)
## [1] 584352     30
#Obtener la direccion del archivo de trabajo
#getwd()
#setwd()

bosque$datetime[1]
## [1] "2005-01-01T00:15"
fechax<-substr(bosque$datetime[1], 1,10)
horax<-substr(bosque$datetime[1], 12,16)
hora_fechx<-paste0(fechax," ", horax)

hora_fechaxx<-strptime(hora_fechx,
         format = "%Y-%m-%d %H:%M")


strsplit(bosque$datetime[1],"T")
## [[1]]
## [1] "2005-01-01" "00:15"
hour(hora_fechaxx)
## [1] 0
minute(hora_fechaxx)
## [1] 15
year(hora_fechaxx)
## [1] 2005
month(hora_fechaxx)
## [1] 1
day(hora_fechaxx)
## [1] 1
# Hacer funcion que transforme 2005-01-01T00:15
# a una de tipo strptime
trans_fecha_p<-function(){
separado<-strsplit(bosque$datetime,
                          "T")
fecha_fi<-separado[[]]}

trans_fecha<-function(dia_fecha){
  fechax<-substr(dia_fecha,1,10)
  horax<-substr(dia_fecha,12,16)
  hora_fechx<-paste0(fechax," ",horax)
  return(hora_fechx)
}
trans_fecha(bosque$datetime[2])
## [1] "2005-01-01 00:30"
#apply por filas? Por columnas? Pero aquí queremos
#por cada elemento de un vector!!

trans_fecha2<-function(trans_fecha){
  vecto_lar<-unlist(strsplit(as.character(trans_fecha),"T"))
  return(paste0(vecto_lar[1]," ",vecto_lar[2])) }

uli_<-unlist(lapply(bosque$datetime,
              FUN = trans_fecha))
uli_sap<-sapply(bosque$datetime, FUN = trans_fecha)

datetime2<-trans_fecha(bosque$datetime)
bosque$datetime22<-datetime2

# Temperatura promedio en los meses

#month(bosque$datetime22)
bosque$mes_registro<-month(bosque$datetime22)

aggregate(airt~mes_registro, FUN = mean,
          data = bosque)
##    mes_registro       airt
## 1             1 -4.4354325
## 2             2 -3.5182661
## 3             3  0.7246007
## 4             4  7.2847304
## 5             5 13.3104319
## 6             6 17.9437049
## 7             7 20.9478956
## 8             8 19.8952857
## 9             9 16.1440116
## 10           10  9.8309351
## 11           11  3.8887324
## 12           12 -1.5565650
# Temperatura promedio por año

bosque$año_registro<-year(bosque$datetime22)

aggregate(airt~año_registro, FUN = mean,
          data = bosque)
##    año_registro     airt
## 1          2005 8.098615
## 2          2006 8.971521
## 3          2007 7.848312
## 4          2008 7.988106
## 5          2009 7.630917
## 6          2010 9.025195
## 7          2011 8.746093
## 8          2012 9.490905
## 9          2013 8.095751
## 10         2014 7.493287
## 11         2015 8.102295
## 12         2016 8.968480
## 13         2017 8.576417
## 14         2018 8.490829
## 15         2019 7.929258
## 16         2020 9.164283
## 17         2021 9.486828
# ¿Cuando es menor la temperatura promedio?
# ¿Entre 3am y 6 am o entre 10pm y 11:59pm?

bosque$hora_registro<-hour(bosque$datetime22)
mean(as.numeric(bosque$airt[which(bosque$hora_registro==(3:5))]))
## [1] NA
mean(bosque$airt)
## [1] NA
aggregate(airt~hora_registro, FUN = mean,
          data = bosque)
##    hora_registro      airt
## 1              0  6.322022
## 2              1  6.034637
## 3              2  5.783765
## 4              3  5.557917
## 5              4  5.355666
## 6              5  5.293780
## 7              6  5.815016
## 8              7  6.754419
## 9              8  7.915150
## 10             9  9.128418
## 11            10 10.211427
## 12            11 11.079078
## 13            12 11.743171
## 14            13 12.174090
## 15            14 12.375936
## 16            15 12.259656
## 17            16 11.711932
## 18            17 10.710056
## 19            18  9.462751
## 20            19  8.431527
## 21            20  7.819401
## 22            21  7.378303
## 23            22  6.999359
## 24            23  6.649224
val_22_24<-c(6.649224,6.999359)
val_3_6<-c(5.557917,5.355666,5.293780)
mean(val_3_6)
## [1] 5.402454
mean(val_22_24)
## [1] 6.824292
#  

grupo1<-which(hour(bosque$datetime22)>=3 & hour(bosque$datetime22)<=5)
grupo1<-which(hour(bosque$datetime22)>=22 & hour(bosque$datetime22)<=23)

mean(bosque[grupo1,3], nar.rm=T)
## [1] NA
mean(bosque[grupo1,3], nar.rm=T)
## [1] NA
## funcion del profesor

grupo1<-which(hour(bosque$datetime22)>=3 & hour(bosque$datetime22)<6)
grupo2<-which(hour(bosque$datetime22)>=22 & hour(bosque$datetime22)<=23)

mean(bosque[grupo1,3],na.rm = TRUE)
## [1] 5.402454
mean(bosque[grupo2,3],na.rm = TRUE)
## [1] 6.824291
#La temperatura entre 3 y 5:59 es más baja

#Otra manera
grupo11<-c(which(hour(bosque$datetime22)==3),
           which(hour(bosque$datetime22)==4),
           which(hour(bosque$datetime22)==5) )

grupo22<-c(which(hour(bosque$datetime22)==22),
           which(hour(bosque$datetime22)==23) )

mean(bosque[grupo11,3],na.rm=TRUE)
## [1] 5.402454
mean(bosque[grupo22,3],na.rm=TRUE)
## [1] 6.824291
pruebaxxs<-"Clase de, R en, la METPOL"
substr(pruebaxxs,9,22)
## [1] ", R en, la MET"
strsplit(pruebaxxs,",") # separa texto en una condicion
## [[1]]
## [1] "Clase de"   " R en"      " la METPOL"

05/10/21

### Gráfico y tablas realcionadas

datos_covid20<-read.csv("C:\\Users\\divis\\Downloads\\COVID2020_5estados.csv")

catalo_enti<-read_excel("C:\\Users\\divis\\Downloads\\201128 Catalogos.xlsx",
           sheet = "Catálogo de ENTIDADES")
catalo_sexo<-read_excel("C:\\Users\\divis\\Downloads\\201128 Catalogos.xlsx",
                        sheet = "Catálogo SEXO")
catalo_muni<-read_excel("C:\\Users\\divis\\Downloads\\201128 Catalogos.xlsx",
                        sheet = "Catálogo MUNICIPIOS")

#datos_covid20$ENTIDAD_UM
#catalo_enti$CLAVE_ENTIDAD

# Emparejar tablas
empate_estadoUM<-merge(datos_covid20, catalo_enti,
      by.x = "ENTIDAD_UM",
      by.y = "CLAVE_ENTIDAD", sort = F)
# Ordenar según una columna
C_Hw2_<-empate_estadoUM[sort(empate_estadoUM$ENTIDAD_UM, decreasing = F),]

dim(empate_estadoUM)
## [1] 149564     41
dim(datos_covid20)
## [1] 149564     39
empate_estadoUM2<-merge(empate_estadoUM, catalo_sexo,
                        by.x = "SEXO", by.y = "CLAVE", sort = F)
dim(empate_estadoUM2)
## [1] 149564     42
table(empate_estadoUM2$DESCRIPCIÓN,
      empate_estadoUM2$ENTIDAD_FEDERATIVA)
##         
##          AGUASCALIENTES BAJA CALIFORNIA BAJA CALIFORNIA SUR CAMPECHE
##   HOMBRE          16138           29342               16162    11145
##   MUJER           18606           32378               17365     8428
# ¿Proporción de mujeres con COVID en cada estado?
### Tarea

head(empate_estadoUM2)
##   SEXO ENTIDAD_UM       X FECHA_ACTUALIZACION ID_REGISTRO ORIGEN SECTOR
## 1    1          3       5          2020-10-28      016eda      2     12
## 2    1          3 2092469          2020-10-28      2191c4      2     12
## 3    1          3  815907          2020-10-28      0230b3      2     12
## 4    1          2 1000386          2020-10-28      413aae      2      4
## 5    1          3 2174118          2020-10-28      246614      2     12
## 6    1          3  815953          2020-10-28      1a3b55      1      4
##   ENTIDAD_NAC ENTIDAD_RES MUNICIPIO_RES TIPO_PACIENTE FECHA_INGRESO
## 1          14           3             8             1    2020-03-30
## 2           3           3             3             1    2020-10-22
## 3          25           3             8             1    2020-09-02
## 4          21           2             4             1    2020-09-24
## 5           9           3             8             1    2020-10-24
## 6          20           3             3             1    2020-07-15
##   FECHA_SINTOMAS  FECHA_DEF INTUBADO NEUMONIA EDAD NACIONALIDAD EMBARAZO
## 1     2020-03-23 9999-99-99       97        2   29            1        2
## 2     2020-10-21 9999-99-99       97        2   31            1        2
## 3     2020-08-28 9999-99-99       97        2   40            1        2
## 4     2020-09-20 9999-99-99       97        2   50            1        2
## 5     2020-10-20 9999-99-99       97        2   32            1        2
## 6     2020-07-13 9999-99-99       97        2   49            1        2
##   HABLA_LENGUA_INDIG INDIGENA DIABETES EPOC ASMA INMUSUPR HIPERTENSION OTRA_COM
## 1                  2        2        2    2    2        2            2        2
## 2                  2        2        2    2    2        2            2        2
## 3                  2        2        2    2    2        2            2        2
## 4                  2        2        2    2    2        2            2        2
## 5                  2        2        2    2    2        2            2        2
## 6                  2        2        2    2    2        2            2        2
##   CARDIOVASCULAR OBESIDAD RENAL_CRONICA TABAQUISMO OTRO_CASO TOMA_MUESTRA
## 1              2        2             2          2         1            1
## 2              2        2             2          2         1            1
## 3              2        2             2          2         2            1
## 4              2        2             2          2         1            1
## 5              2        2             2          2         1            1
## 6              2        2             2          2         1            1
##   RESULTADO_LAB CLASIFICACION_FINAL MIGRANTE PAIS_NACIONALIDAD PAIS_ORIGEN UCI
## 1             1                   3       99           México          97  97
## 2             1                   3       99           México          97  97
## 3             1                   3       99           México          97  97
## 4             1                   3       99           México          97  97
## 5             2                   7       99           México          97  97
## 6             1                   3       99           México          97  97
##    ENTIDAD_FEDERATIVA ABREVIATURA DESCRIPCIÓN
## 1 BAJA CALIFORNIA SUR          BS       MUJER
## 2 BAJA CALIFORNIA SUR          BS       MUJER
## 3 BAJA CALIFORNIA SUR          BS       MUJER
## 4     BAJA CALIFORNIA          BC       MUJER
## 5 BAJA CALIFORNIA SUR          BS       MUJER
## 6 BAJA CALIFORNIA SUR          BS       MUJER
aggregate(empate_estadoUM2$DESCRIPCIÓN~ENTIDAD_FEDERATIVA,
          empate_estadoUM2, length)
##    ENTIDAD_FEDERATIVA empate_estadoUM2$DESCRIPCIÓN
## 1      AGUASCALIENTES                        34744
## 2     BAJA CALIFORNIA                        61720
## 3 BAJA CALIFORNIA SUR                        33527
## 4            CAMPECHE                        19573
length(empate_estadoUM2$DESCRIPCIÓN)
## [1] 149564
rea_sex<-which(empate_estadoUM2$SEXO==2)
empate_estadoUM2$SEXO[rea_sex]<-"0"
tot_pob<-c(34744,61720,33527,19573)
aggregate(as.numeric(empate_estadoUM2$SEXO)~ENTIDAD_FEDERATIVA,
          empate_estadoUM2, sum)
##    ENTIDAD_FEDERATIVA as.numeric(empate_estadoUM2$SEXO)
## 1      AGUASCALIENTES                             18606
## 2     BAJA CALIFORNIA                             32378
## 3 BAJA CALIFORNIA SUR                             17365
## 4            CAMPECHE                              8428
tot_muj<-c(18606,32378,17365,8428)
Entidad_F<-c("AGUASCALIENTES","BAJA CALIFORNIA",
             "BAJA CALIFORNIA SUR","CAMPECHE")
inf_pob<-data.frame(Entidad_F, tot_pob, tot_muj,
                    prop_muj = tot_muj/tot_pob)
inf_pob
##             Entidad_F tot_pob tot_muj  prop_muj
## 1      AGUASCALIENTES   34744   18606 0.5355169
## 2     BAJA CALIFORNIA   61720   32378 0.5245949
## 3 BAJA CALIFORNIA SUR   33527   17365 0.5179408
## 4            CAMPECHE   19573    8428 0.4305932
###########################################################

merge(datos_covid20,catalo_enti,by.x = "ENTIDAD_UM",by.y="CLAVE_ENTIDAD",all.x=TRUE)

12/10/21

tabla_munic<-merge(datos_covid20,catalo_muni,
                   by.x=c("ENTIDAD_RES","MUNICIPIO_RES"),
                   by.y=c("CLAVE_ENTIDAD","CLAVE_MUNICIPIO"),
                   all.x = T, sort = F)

head(datos_covid20$ENTIDAD_FEDERATIVA)
## NULL
tablasss<-table(datos_covid20$ENTIDAD_UM, datos_covid20$SEXO)
table(datos_covid20$ENTIDAD_UM,datos_covid20$INTUBADO)
##    
##         1     2    97    99
##   1   624  3642 30269   209
##   2  1943  9196 50206   375
##   3   434  2273 30628   192
##   4   338  2649 16564    22
plot(tablasss)