Ejercicio 1 - Operaciones con matrices
David Matamoros
2023-08-07
Parte 1
A = matrix(c(2, 0, 9, 4, -2, 0, -3, 5, 6), nrow = 3, ncol = 3)
B = matrix(c(8, -7, -3, 6, 9, 5, -2, -5, 1), nrow = 3, ncol = 3)
a)
A + B
## [,1] [,2] [,3]
## [1,] 10 10 -5
## [2,] -7 7 0
## [3,] 6 5 7
b)
4*A + 3*B
## [,1] [,2] [,3]
## [1,] 32 34 -18
## [2,] -21 19 5
## [3,] 27 15 27
c)
Me encanta lo amable que es R para trabajar con matrices. Siempre que saco la transpuesta
de una matriz lo recuerdo, pues me parece chistoso que tenga que escribir una sola letra
para conseguirla.
t(A)
## [,1] [,2] [,3]
## [1,] 2 0 9
## [2,] 4 -2 0
## [3,] -3 5 6
d)
Se me hizo raro el nombre “solve” para conseguir la inversa de una matriz; aunque me hizo
sentido y me gustó porque será fácil de recordar.
solve(A)
## [,1] [,2] [,3]
## [1,] -0.1176471 -0.2352941 0.13725490
## [2,] 0.4411765 0.3823529 -0.09803922
## [3,] 0.1764706 0.3529412 -0.03921569
e)
Otra vez, se nota cómo R se creó para trabajar con este tipo de arreglos de datos.
det(A)
## [1] 102
det(solve(A))
## [1] 0.009803922
f)
det(B)
## [1] 420
det(solve(B))
## [1] 0.002380952
Parte 2
Aquí preferí crear las matrices de un modo distinto a como lo hice arriba para que haya
variedad en mmi código y me sirva para recordar formas de hacer cosas diferente.
A2 = rbind(c(2, 1, 3, -3), c(3, 0, -2, -1), c(4, 5, 0, -5))
B2 = rbind(c(4, 2), c(-3, 1), c(5, -2), c(8, 0))
a)
Otra vez, para multiplicar matrices es tan fácil como multiplicar un número.
A*B
## [,1] [,2] [,3]
## [1,] 16 24 6
## [2,] 0 -18 -25
## [3,] -27 0 6
Parte 3
Mc <- read.csv("Actividad 1-mc-donalds-menu.csv")
head(Mc)
summary(Mc)
vectores <- Mc[, c("Calories", "Sodium", "Sugars", "Protein")]
vectores
Vector de medias
# vector de unos
n <- nrow(vectores)
vectorUnos <- matrix(rep(1, n), ncol = 1)
# vector de medias (xprom) = (x'1n)/n
vectorMedia <- (t(vectores)%*%(vectorUnos))/n
vectorMedia
## [,1]
## Calories 368.26923
## Sodium 495.75000
## Sugars 29.42308
## Protein 13.33846
Matriz de varianzas
matrizVarianza <- var(vectores)*(n -1)/n
matrizVarianza
## Calories Sodium Sugars Protein
## Calories 57507.581 98376.106 1781.98225 2154.60503
## Sodium 98376.106 331678.764 -7031.58654 5712.70769
## Sugars 1781.982 -7031.587 819.36716 -58.73935
## Protein 2154.605 5712.708 -58.73935 130.05467
Matriz de covarianzas
matrizCovarianza <- cov(vectores)*(n -1)/n
matrizCovarianza
## Calories Sodium Sugars Protein
## Calories 57507.581 98376.106 1781.98225 2154.60503
## Sodium 98376.106 331678.764 -7031.58654 5712.70769
## Sugars 1781.982 -7031.587 819.36716 -58.73935
## Protein 2154.605 5712.708 -58.73935 130.05467
Matriz de correlación
cor(vectores)
## Calories Sodium Sugars Protein
## Calories 1.0000000 0.7123087 0.2595981 0.7878475
## Sodium 0.7123087 1.0000000 -0.4265355 0.8698016
## Sugars 0.2595981 -0.4265355 1.0000000 -0.1799396
## Protein 0.7878475 0.8698016 -0.1799396 1.0000000
eigenvalores y eigenvectores
eigen(matrizVarianza)
## eigen() decomposition
## $values
## [1] 363531.25311 26441.18646 139.15528 24.17277
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] -0.30597175 0.94217521 0.135661467 -0.016826663
## [2,] -0.95174181 -0.30046538 -0.061324477 -0.012140735
## [3,] 0.01695010 0.14796011 -0.988839134 0.004203214
## [4,] -0.01677833 0.01158648 0.005695785 0.999775874
eigen(matrizCovarianza)
## eigen() decomposition
## $values
## [1] 363531.25311 26441.18646 139.15528 24.17277
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] -0.30597175 0.94217521 0.135661467 -0.016826663
## [2,] -0.95174181 -0.30046538 -0.061324477 -0.012140735
## [3,] 0.01695010 0.14796011 -0.988839134 0.004203214
## [4,] -0.01677833 0.01158648 0.005695785 0.999775874
Parte 4
En comentarios adicionales a los escritos, quiero decir que la última parte del ejercicio 3
me pareció interesante. Al principio me había confundido con cómo hace R el cálculo de los
estadísticos pero, al preguntar en clase, y con orientación de esta página de internet, me di
cuenta que los resultados solo variaban por multiplicar (𝑛 − 1)/𝑛, ya que R siempre saca la
varianza muestral, y en análisis multivariado no buscamos eso. Además, proporciona otra
manera de encontrar la correlación, que me parece interesante, pues es la representación
de la fórmula que vimos en clase.
#Matriz de Correlación R=D^-1/2*S*D^-1/2
DN <- diag(c(1/sqrt(diag(matrizCovarianza))))
matrizCorr <- DN%*%matrizCovarianza%*%DN
matrizCorr
## [,1] [,2] [,3] [,4]
## [1,] 1.0000000 0.7123087 0.2595981 0.7878475
## [2,] 0.7123087 1.0000000 -0.4265355 0.8698016
## [3,] 0.2595981 -0.4265355 1.0000000 -0.1799396
## [4,] 0.7878475 0.8698016 -0.1799396 1.0000000