ejercicio 3.3 analisis multivariante pena

import numpy as np
import pandas as pd

# Definir los datos del problema 3.2 como DataFrame
X_df = pd.DataFrame({
    "x1": [2, 1, 2, 2],
    "x2": [3, 5, 2, 3],
    "x3": [-1, -2, 1, 1]
})

# 1. Calcular el vector de medias
vector_medias_df = X_df.mean().to_frame(name="Medias")

# 2. Calcular la matriz de varianzas y covarianzas
matriz_covarianza_df = X_df.cov()

# 3. Calcular la varianza generalizada
varianza_generalizada_df = pd.DataFrame({"Varianza Generalizada": [np.linalg.det(matriz_covarianza_df)]})

# 4. Calcular la matriz de correlaciones
matriz_correlacion_df = X_df.corr()

# 5. Calcular los valores y vectores propios
valores_propios_cov, vectores_propios_cov = np.linalg.eig(matriz_covarianza_df)
indice_mayor_cov = np.argmax(valores_propios_cov)
raiz_mayor_cov = valores_propios_cov[indice_mayor_cov]
vector_caracteristico_mayor_cov = vectores_propios_cov[:, indice_mayor_cov]

df_raiz_mayor = pd.DataFrame({"Raíz Mayor": [raiz_mayor_cov]})
df_vector_caracteristico_mayor = pd.DataFrame(vector_caracteristico_mayor_cov, columns=["Vector"], index=["x1", "x2", "x3"])

# Problema 3.3
A = np.array([[1/3, 1/3, 1/3], [1, -0.5, -0.5]])

# 1. Vector de medias transformado
vector_medias_y_df = pd.DataFrame(A @ vector_medias_df.values, columns=["Medias"], index=["y1", "y2"])

# 2. Matriz de varianzas y covarianzas de Y
matriz_covarianza_y_df = pd.DataFrame(A @ matriz_covarianza_df.values @ A.T, columns=["y1", "y2"], index=["y1", "y2"])

# 3. Varianza generalizada de Y
varianza_generalizada_y_df = pd.DataFrame({"Varianza Generalizada": [np.linalg.det(matriz_covarianza_y_df)]})

# 4. Calcular la matriz de correlaciones para Y - Corrección
# Asegurarse de que estamos trabajando con valores numéricos
cov_values = matriz_covarianza_y_df.values  # Convertir a numpy array para evitar problemas con pandas
variances = np.diag(cov_values)  # Extraer las varianzas de la diagonal
if np.any(variances <= 0):
    print("Advertencia: Varianzas negativas o cero detectadas, lo que puede causar NaN.")
D_y_inv_sqrt = np.diag(1 / np.sqrt(variances))  # Matriz diagonal inversa de las raíces cuadradas
matriz_correlacion_y_df = pd.DataFrame(D_y_inv_sqrt @ cov_values @ D_y_inv_sqrt, columns=["y1", "y2"], index=["y1", "y2"])

# Imprimir resultados
print("\n===== Problema 3.2 =====")

===== Problema 3.2 =====
print("\nVector de Medias:")

Vector de Medias:
print(vector_medias_df)
    Medias
x1    1.75
x2    3.25
x3   -0.25
print("\nMatriz de Varianzas y Covarianzas:")

Matriz de Varianzas y Covarianzas:
print(matriz_covarianza_df)
          x1        x2        x3
x1  0.250000 -0.583333  0.583333
x2 -0.583333  1.583333 -1.583333
x3  0.583333 -1.583333  2.250000
print("\nVarianza Generalizada:")

Varianza Generalizada:
print(varianza_generalizada_df)
   Varianza Generalizada
0               0.037037
print("\nMatriz de Correlación:")

Matriz de Correlación:
print(matriz_correlacion_df)
          x1        x2        x3
x1  1.000000 -0.927173  0.777778
x2 -0.927173  1.000000 -0.838870
x3  0.777778 -0.838870  1.000000
print("\nRaíz Característica Mayor:")

Raíz Característica Mayor:
print(df_raiz_mayor)
   Raíz Mayor
0     3.72838
print("\nVector Característico Mayor:")

Vector Característico Mayor:
print(df_vector_caracteristico_mayor)
      Vector
x1  0.229720
x2 -0.617658
x3  0.752149
print("\n===== Problema 3.3 =====")

===== Problema 3.3 =====
print("\nVector de Medias (Y):")

Vector de Medias (Y):
print(vector_medias_y_df)
      Medias
y1  1.583333
y2  0.250000
print("\nMatriz de Varianzas y Covarianzas (Y):")

Matriz de Varianzas y Covarianzas (Y):
print(matriz_covarianza_y_df)
          y1        y2
y1  0.101852 -0.027778
y2 -0.027778  0.416667
print("\nVarianza Generalizada (Y):")

Varianza Generalizada (Y):
print(varianza_generalizada_y_df)
   Varianza Generalizada
0               0.041667
print("\nMatriz de Correlación (Y):")

Matriz de Correlación (Y):
print(matriz_correlacion_y_df)
         y1       y2
y1  1.00000 -0.13484
y2 -0.13484  1.00000
# Cargar las librerías necesarias
library(MASS)  # Para operaciones matriciales avanzadas si es necesario

# =========================
# Resolviendo el Problema 3.2 en R
# =========================

# Definir los datos del problema 3.2 como DataFrame
X_df <- data.frame(
  x1 = c(2, 1, 2, 2),
  x2 = c(3, 5, 2, 3),
  x3 = c(-1, -2, 1, 1)
)

# 1. Calcular el vector de medias
vector_medias_df <- as.data.frame(t(colMeans(X_df)))
colnames(vector_medias_df) <- c("x1", "x2", "x3")

# 2. Calcular la matriz de varianzas y covarianzas
matriz_covarianza_df <- cov(X_df)

# 3. Calcular la varianza generalizada (determinante de la matriz de covarianza)
varianza_generalizada_df <- data.frame("Varianza_Generalizada" = det(matriz_covarianza_df))

# 4. Calcular la matriz de correlaciones
matriz_correlacion_df <- cor(X_df)

# 5. Calcular los valores y vectores propios de la matriz de covarianza
eigen_decomp <- eigen(matriz_covarianza_df)
valores_propios_cov <- eigen_decomp$values
vectores_propios_cov <- eigen_decomp$vectors
indice_mayor_cov <- which.max(valores_propios_cov)
raiz_mayor_cov <- valores_propios_cov[indice_mayor_cov]
vector_caracteristico_mayor_cov <- vectores_propios_cov[, indice_mayor_cov]

df_raiz_mayor <- data.frame("Raíz_Mayor" = raiz_mayor_cov)
df_vector_caracteristico_mayor <- data.frame("Vector" = vector_caracteristico_mayor_cov)
row.names(df_vector_caracteristico_mayor) <- c("x1", "x2", "x3")

# =========================
# Resolviendo el Problema 3.3 en R
# =========================

# Definir la matriz de transformación A para los nuevos indicadores y1, y2
A <- matrix(c(1/3, 1/3, 1/3,   # Coeficientes para y1
              1, -0.5, -0.5),  # Coeficientes para y2
            nrow = 2, byrow = TRUE)

# 1. Calcular el vector de medias transformado
vector_medias_y_df <- data.frame(t(A %*% t(vector_medias_df)))
colnames(vector_medias_y_df) <- c("y1", "y2")

# 2. Calcular la matriz de varianzas y covarianzas de Y
matriz_covarianza_y_df <- A %*% matriz_covarianza_df %*% t(A)
colnames(matriz_covarianza_y_df) <- c("y1", "y2")
rownames(matriz_covarianza_y_df) <- c("y1", "y2")

# 3. Calcular la varianza generalizada de la nueva matriz de covarianzas
varianza_generalizada_y_df <- data.frame("Varianza_Generalizada" = det(matriz_covarianza_y_df))

# 4. Calcular la matriz de correlaciones para Y (dimensión 2x2)
D_y_inv_sqrt <- diag(1 / sqrt(diag(matriz_covarianza_y_df)))  # Matriz inversa de raíz cuadrada de varianzas
matriz_correlacion_y_df <- D_y_inv_sqrt %*% matriz_covarianza_y_df %*% D_y_inv_sqrt
colnames(matriz_correlacion_y_df) <- c("y1", "y2")
rownames(matriz_correlacion_y_df) <- c("y1", "y2")

# =========================
# Imprimir los resultados
# =========================

# Imprimir los resultados del problema 3.2
cat("\n===== Problema 3.2 =====\n")

===== Problema 3.2 =====
cat("\nVector de Medias:\n")

Vector de Medias:
print(vector_medias_df)
    x1   x2    x3
1 1.75 3.25 -0.25
cat("\nMatriz de Varianzas y Covarianzas:\n")

Matriz de Varianzas y Covarianzas:
print(matriz_covarianza_df)
           x1         x2         x3
x1  0.2500000 -0.5833333  0.5833333
x2 -0.5833333  1.5833333 -1.5833333
x3  0.5833333 -1.5833333  2.2500000
cat("\nVarianza Generalizada:\n")

Varianza Generalizada:
print(varianza_generalizada_df)
  Varianza_Generalizada
1            0.03703704
cat("\nMatriz de Correlación:\n")

Matriz de Correlación:
print(matriz_correlacion_df)
           x1         x2         x3
x1  1.0000000 -0.9271726  0.7777778
x2 -0.9271726  1.0000000 -0.8388705
x3  0.7777778 -0.8388705  1.0000000
cat("\nRaíz Característica Mayor:\n")

Raíz Característica Mayor:
print(df_raiz_mayor)
  Raíz_Mayor
1    3.72838
cat("\nVector Característico Mayor:\n")

Vector Característico Mayor:
print(df_vector_caracteristico_mayor)
       Vector
x1  0.2297201
x2 -0.6176579
x3  0.7521485
# Imprimir los resultados del problema 3.3
cat("\n===== Problema 3.3 =====\n")

===== Problema 3.3 =====
cat("\nVector de Medias (Y):\n")

Vector de Medias (Y):
print(vector_medias_y_df)
        y1   y2
1 1.583333 0.25
cat("\nMatriz de Varianzas y Covarianzas (Y):\n")

Matriz de Varianzas y Covarianzas (Y):
print(matriz_covarianza_y_df)
            y1          y2
y1  0.10185185 -0.02777778
y2 -0.02777778  0.41666667
cat("\nVarianza Generalizada (Y):\n")

Varianza Generalizada (Y):
print(varianza_generalizada_y_df)
  Varianza_Generalizada
1            0.04166667
cat("\nMatriz de Correlación (Y):\n")

Matriz de Correlación (Y):
print(matriz_correlacion_y_df)
         y1       y2
y1  1.00000 -0.13484
y2 -0.13484  1.00000