MArcela Guadalupe Hernández |
2025/03/02 |
#Creación de Matrices Matriz Y
matriz_y <- matrix(data = c(30, 20, 36, 24, 40),
nrow = 5,
ncol = 1,byrow = TRUE)
colnames(matriz_y)<-c("y")
print(matriz_y)
## y
## [1,] 30
## [2,] 20
## [3,] 36
## [4,] 24
## [5,] 40
Matriz X
matriz_x <- cbind(rep(1,5),matrix(data = c(4,10,3,8,6,11,4,9,8,12),nrow = 5,ncol = 2,byrow = TRUE))
colnames(matriz_x)<-c("Cte","x1","x2")
print(matriz_x)
## Cte x1 x2
## [1,] 1 4 10
## [2,] 1 3 8
## [3,] 1 6 11
## [4,] 1 4 9
## [5,] 1 8 12
Importación de Datos Archivo de Excel
Calculo el Producto de Matrices Cálculo de (xx) (Sigma matriz)
matriz_xx<-t(matriz_x)%*%matriz_x
print(matriz_xx)
## Cte x1 x2
## Cte 5 25 50
## x1 25 141 262
## x2 50 262 510
sigma_matriz<- function(matriz)(t(matriz)%*%matriz)
matriz_xx2<-sigma_matriz(matriz_x)
print(matriz_xx2)
## Cte x1 x2
## Cte 5 25 50
## x1 25 141 262
## x2 50 262 510
#La siguiente operación obtiene la matriz (XY)
matriz_xy <- t(matriz_x) %*% matriz_y
print(matriz_xy)
## y
## Cte 150
## x1 812
## x2 1552
#Calculando la inversa de matrices -> (x′x)^(-1)
xx_inv<-solve(matriz_xx)
print(xx_inv)
## Cte x1 x2
## Cte 40.825 4.375 -6.25
## x1 4.375 0.625 -0.75
## x2 -6.250 -0.750 1.00
#Obtención del Estimador MCO βˆ: ##Puede obtenerse a través del producto de la inversa de X’X, con la matriz X’Y: β=(X′X)(−1) * X′Y
Beta_<-solve(a = matriz_xx,b = matriz_xy)
colnames(Beta_)<-c("parámetros")
print(Beta_)
## parámetros
## Cte -23.75
## x1 -0.25
## x2 5.50
También puede obtenerse a través de la solución de las ecuaciones normales, usando el comando solve
Beta_<-solve(a = matriz_xx,b = matriz_xy)
colnames(Beta_)<-c("parámetros")
print(Beta_)
## parámetros
## Cte -23.75
## x1 -0.25
## x2 5.50
#obtención de autovalores y autovectores #Los autovalores se definen como las raices “λ”, de la siguiente ecuación polinómica: |C−λ∗I|=0, donde C es una matriz cuadrada!Se usará el comando eigen()
autovalores<-eigen(matriz_xx)
print(autovalores)
## eigen() decomposition
## $values
## [1] 650.78185037 5.19448432 0.02366531
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.08623239 0.1629390 0.9828606
## [2,] -0.45874789 -0.8822205 0.1060061
## [3,] -0.88437229 0.4417441 -0.1508239
#Muestra sólo los autovalores
autovalores<-eigen(matriz_xx)
print(autovalores$values)
## [1] 650.78185037 5.19448432 0.02366531
Ejercicios práctica 1
library(readr)
## Warning: package 'readr' was built under R version 4.4.3
practica_1 <- read_csv("C:/Users/HP/Downloads/practica_1.csv")
## Rows: 5 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (3): Y, X1, X2
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(practica_1)
## # A tibble: 5 × 3
## Y X1 X2
## <dbl> <dbl> <dbl>
## 1 30 4 10
## 2 20 3 8
## 3 36 6 11
## 4 24 4 9
## 5 40 8 12
#crear la matriz
matrizprincipal <- matrix(c(90, 1, 0,
100, 2, 0,
110, 3, 0,
135, 4, 1,
145, 5, 1,
165, 6, 1),
nrow = 6, ncol = 3, byrow = TRUE)
colnames(matrizprincipal)<-c("Y","X1","X2")
print(matrizprincipal)
## Y X1 X2
## [1,] 90 1 0
## [2,] 100 2 0
## [3,] 110 3 0
## [4,] 135 4 1
## [5,] 145 5 1
## [6,] 165 6 1
#Matriz y
matrizdey <- matrix(c(90,
100,
110,
135,
145,
165),
nrow = 6, ncol = 1, byrow = TRUE)
colnames(matrizdey)<-c("Y")
print(matrizdey)
## Y
## [1,] 90
## [2,] 100
## [3,] 110
## [4,] 135
## [5,] 145
## [6,] 165
Matriz X
matrizdex <- cbind(rep(1,6),matrix(data = c(1,0,2,0,3,0,4,1,5,1,6,1),nrow = 6,ncol = 2,byrow = TRUE))
colnames(matrizdex)<-c("Cte","x1","x2")
print(matrizdex)
## Cte x1 x2
## [1,] 1 1 0
## [2,] 1 2 0
## [3,] 1 3 0
## [4,] 1 4 1
## [5,] 1 5 1
## [6,] 1 6 1
#Matriz transpuesta de X
transpuesta_x<-t(matrizdex)
print(transpuesta_x)
## [,1] [,2] [,3] [,4] [,5] [,6]
## Cte 1 1 1 1 1 1
## x1 1 2 3 4 5 6
## x2 0 0 0 1 1 1
# Extraer las columnas X1 y X2
X1 <- matrizprincipal[, "X1"]
X2 <- matrizprincipal[, "X2"]
producto_escalar <- sum(X1 * X2)
print(producto_escalar)
## [1] 15
matrizdexx<-t(matrizdex)%*%matrizdex
print(matrizdexx)
## Cte x1 x2
## Cte 6 21 3
## x1 21 91 15
## x2 3 15 3
##Cálculo de X′X
matrizdexx<-t(matrizdex)%*%matrizdex
print(matrizdexx)
## Cte x1 x2
## Cte 6 21 3
## x1 21 91 15
## x2 3 15 3
##Cálculo de X′Y
matrizdexy<-t(matrizdex)%*%matrizdey
print(matrizdexy)
## Y
## Cte 745
## x1 2875
## x2 445
xx_inversa<-solve(matrizdexx)
print(xx_inversa)
## Cte x1 x2
## Cte 1.333333 -0.50 1.166667
## x1 -0.500000 0.25 -0.750000
## x2 1.166667 -0.75 2.916667
b_eta<-xx_inversa%*%matrizdexy
colnames(b_eta)<-c("parámetros")
print(b_eta)
## parámetros
## Cte 75.00000
## x1 12.50000
## x2 10.83333
También puede obtenerse a través de la solución de las ecuaciones normales, usando el comando solve
Beta__<-solve(a = matrizdexx,b = matrizdexy)
colnames(Beta__)<-c("parámetros")
print(Beta__)
## parámetros
## Cte 75.00000
## x1 12.50000
## x2 10.83333
P<-matrizdex%*%xx_inversa%*%transpuesta_x
P_redondeada <- round(P, digits = 6)
print(P_redondeada)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.583333 0.333333 0.083333 0.250000 0.000000 -0.250000
## [2,] 0.333333 0.333333 0.333333 0.000000 0.000000 0.000000
## [3,] 0.083333 0.333333 0.583333 -0.250000 0.000000 0.250000
## [4,] 0.250000 0.000000 -0.250000 0.583333 0.333333 0.083333
## [5,] 0.000000 0.000000 0.000000 0.333333 0.333333 0.333333
## [6,] -0.250000 0.000000 0.250000 0.083333 0.333333 0.583333
# Verificar simetría (P = P')
simetria <- all.equal(P_redondeada, t(P_redondeada))
print(simetria)
## [1] TRUE
# Verificar idempotencia (P %*% P = P)
idempotencia <- all.equal(P_redondeada, P_redondeada %*% P_redondeada)
print(idempotencia)
## [1] "Mean relative difference: 1e-06"
Y_hat <- P %*% matrizdey
Y_hat_redondeada <- round(Y_hat, digits = 2)
print(Y_hat_redondeada)
## Y
## [1,] 87.50
## [2,] 100.00
## [3,] 112.50
## [4,] 135.83
## [5,] 148.33
## [6,] 160.83
residuos <- matrizdey - Y_hat
residuos_redondeada <- round(residuos, digits = 2)
print(residuos_redondeada)
## Y
## [1,] 2.50
## [2,] 0.00
## [3,] -2.50
## [4,] -0.83
## [5,] -3.33
## [6,] 4.17
# Crear vectores con los datos
Y_observado <- c(90, 100, 110, 135, 145, 165)
Y_predicho <- c(87.50, 100.00, 112.50, 135.83, 148.33, 160.83)
Residuos <- c(2.50, 0.00, -2.50, -0.83, -3.33, 4.17)
# Crear un data.frame con los datos
tabla_residuos <- data.frame(
Fila = 1:6,
Y_Observado = Y_observado,
Y_Predicho = Y_predicho,
Residuo = Residuos)
# Mostrar la tabla
print(tabla_residuos)
## Fila Y_Observado Y_Predicho Residuo
## 1 1 90 87.50 2.50
## 2 2 100 100.00 0.00
## 3 3 110 112.50 -2.50
## 4 4 135 135.83 -0.83
## 5 5 145 148.33 -3.33
## 6 6 165 160.83 4.17
autovaloress<-eigen(matrizdexx)
print(autovaloress)
## eigen() decomposition
## $values
## [1] 98.356654 1.377669 0.265677
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.2238107 0.8591615 0.4601633
## [2,] -0.9616881 -0.1179798 -0.2474608
## [3,] -0.1583188 -0.4979179 0.8526505
#Muestra sólo los autovalores
autovaloress<-eigen(matrizdexx)
print(autovaloress$values)
## [1] 98.356654 1.377669 0.265677
todos_positivos <- all(autovaloress$values > 0)
print(todos_positivos)
## [1] TRUE
Los autovalores son todos positivos. Esto confirma que X′X es una matriz definida positiva.
# Calcular autovalores de P
autovalores_P <- eigen(P)$values
autovalores_P_redondeada <- round(autovalores_P, digits = 1)
print(autovalores_P_redondeada)
## [1] 1 1 1 0 0 0
# Calcular la traza de P
traza_P <- sum(diag(P))
print(traza_P)
## [1] 3
#Sumar los autovalores de P
suma_autovalores_P <- sum(autovalores_P)
print(suma_autovalores_P)
## [1] 3
# Verificar si la traza de P es igual a la suma de sus autovalores
traza_igual_suma <- all.equal(traza_P, suma_autovalores_P)
print(traza_igual_suma)
## [1] TRUE
# Crear la matriz identidad I del mismo tamaño que P
I <- diag(nrow(P))
print(I)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 0 0 0 0
## [2,] 0 1 0 0 0 0
## [3,] 0 0 1 0 0 0
## [4,] 0 0 0 1 0 0
## [5,] 0 0 0 0 1 0
## [6,] 0 0 0 0 0 1
# Calcular I - P
I_menos_P <- I - P
# Calcular I + P
I_mas_P <- I + P
# Mostrar las matrices redondeadas a 2 decimales
print(round(I_menos_P, digits = 2))
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.42 -0.33 -0.08 -0.25 0.00 0.25
## [2,] -0.33 0.67 -0.33 0.00 0.00 0.00
## [3,] -0.08 -0.33 0.42 0.25 0.00 -0.25
## [4,] -0.25 0.00 0.25 0.42 -0.33 -0.08
## [5,] 0.00 0.00 0.00 -0.33 0.67 -0.33
## [6,] 0.25 0.00 -0.25 -0.08 -0.33 0.42
print(round(I_mas_P, digits = 2))
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1.58 0.33 0.08 0.25 0.00 -0.25
## [2,] 0.33 1.33 0.33 0.00 0.00 0.00
## [3,] 0.08 0.33 1.58 -0.25 0.00 0.25
## [4,] 0.25 0.00 -0.25 1.58 0.33 0.08
## [5,] 0.00 0.00 0.00 0.33 1.33 0.33
## [6,] -0.25 0.00 0.25 0.08 0.33 1.58
3.Obtener los autovalores de I−P y I+P:
# Calcular autovalores de I - P
autovalores_I_menos_P <- eigen(I_menos_P)$values
# Calcular autovalores de I + P
autovalores_I_mas_P <- eigen(I_mas_P)$values
# Redondear los autovalores a 2 decimales
autovalores_I_menos_P_redondeados <- round(autovalores_I_menos_P, digits = 2)
autovalores_I_mas_P_redondeados <- round(autovalores_I_mas_P, digits = 2)
# Mostrar los autovalores redondeados
print(autovalores_I_menos_P_redondeados)
## [1] 1 1 1 0 0 0
print(autovalores_I_mas_P_redondeados)
## [1] 2 2 2 1 1 1