library(dplyr)
library(knitr)
library(kableExtra)
library(DiagrammeR)

Imagina que trabajas para una agencia de desarrollo internacional y has recopilado datos de 10 indicadores clave para evaluar el estado de varios países.

Las 10 variables son:

  1. PIB per cápita (X1): Riqueza económica.
  2. Esperanza de vida (X2): Salud general.
  3. Años promedio de escolaridad (X3): Nivel educativo.
  4. Tasa de mortalidad infantil (X4): Salud infantil (nota: esta variable es negativa; un valor más alto es peor).
  5. Acceso a internet (%) (X5): Conectividad y tecnología.
  6. Tasa de urbanización (%) (X6): Nivel de desarrollo de infraestructura.
  7. Emisiones de CO2 per cápita (X7): Impacto industrial y ambiental.
  8. Participación laboral femenina (%) (X8): Equidad de género y desarrollo social.
  9. Índice de Estado de Derecho (X9): Estabilidad política y gobernanza.
  10. Acceso a electricidad (%) (X10): Infraestructura básica.

Y debes Calcular un indicador sintetico usando analisis factorial con componentes principales:

Y se tiene la siguiente extraccion (Completa la tabla)

Componentes principales

componentes <- data.frame(
  Componente = c("Componente 1", "Componente 2", "Componente 3", "Componente 4"),
  Autovalor = c(6.8, 1.5, 0.7, 0.4),
  Varianza_Explicada = c(68, 15, 9, 4),
  Acumulado = c(68, 83, 90, 94)
          
)

kable(componentes, format = "markdown", caption = "Componentes Principales") %>%
  kable_styling(full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, background = "#FFE6F6")  
Componentes Principales
Componente Autovalor Varianza_Explicada Acumulado
Componente 1 6.8 68 68
Componente 2 1.5 15 83
Componente 3 0.7 9 90
Componente 4 0.4 4 94
variables <- c(
  "PIB per capita (X1)",
  "Esperanza de vida (X2)",
  "Anos de escolaridad (X3)",
  "Tasa de mortalidad infantil (X4)",
  "Acceso a internet (%) (X5)",
  "Tasa de urbanizacion (%) (X6)",
  "Emisiones de CO2 per capita (X7)",
  "Participacion laboral femenina (%) (X8)",
  "Indice de Estado de Derecho (X9)",
  "Acceso a electricidad (%) (X10)"
)
 

cargas <- data.frame(
  Variable = variables,
  Componente1 = c(0.89, 0.92, 0.85, -0.91, 0.88, 0.4, 0.35, 0.82, 0.9, 0.93),
  Componente2 = c(0.21, 0.15, 0.30, -0.1, 0.25, 0.85, 0.88, -0.20, 0.18, 0.12)
)

cargas
##                                   Variable Componente1 Componente2
## 1                      PIB per capita (X1)        0.89        0.21
## 2                   Esperanza de vida (X2)        0.92        0.15
## 3                 Anos de escolaridad (X3)        0.85        0.30
## 4         Tasa de mortalidad infantil (X4)       -0.91       -0.10
## 5               Acceso a internet (%) (X5)        0.88        0.25
## 6            Tasa de urbanizacion (%) (X6)        0.40        0.85
## 7         Emisiones de CO2 per capita (X7)        0.35        0.88
## 8  Participacion laboral femenina (%) (X8)        0.82       -0.20
## 9         Indice de Estado de Derecho (X9)        0.90        0.18
## 10         Acceso a electricidad (%) (X10)        0.93        0.12
kable(cargas, format = "markdown", 
      caption = "Cargas Factoriales por Componente") %>%
  kable_styling(full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, background = "#FFE6F6")
Cargas Factoriales por Componente
Variable Componente1 Componente2
PIB per capita (X1) 0.89 0.21
Esperanza de vida (X2) 0.92 0.15
Anos de escolaridad (X3) 0.85 0.30
Tasa de mortalidad infantil (X4) -0.91 -0.10
Acceso a internet (%) (X5) 0.88 0.25
Tasa de urbanizacion (%) (X6) 0.40 0.85
Emisiones de CO2 per capita (X7) 0.35 0.88
Participacion laboral femenina (%) (X8) 0.82 -0.20
Indice de Estado de Derecho (X9) 0.90 0.18
Acceso a electricidad (%) (X10) 0.93 0.12

Calcule los pesos y dibuja el diagrama del indicador para esta bateria de indicadores

Calculo de los pesos

# Comunalidades (suma de cuadrados de las cargas)
cargas$Comunalidad <- cargas$Componente1^2 + cargas$Componente2^2

# Pesos normalizados para el indicador sintético
cargas$Peso <- round(cargas$Comunalidad / sum(cargas$Comunalidad), 4)

# Tabla final de pesos
pesos_df <- cargas %>% select(Variable, Peso)
kable(pesos_df, format = "markdown", caption = "Pesos de las Variables para el Indicador Sintetico") %>%
  kable_styling(full_width = FALSE, position = "center") %>%
  row_spec(0, bold = TRUE, background = "#FFE6F6")
Pesos de las Variables para el Indicador Sintetico
Variable Peso
PIB per capita (X1) 0.0995
Esperanza de vida (X2) 0.1034
Anos de escolaridad (X3) 0.0967
Tasa de mortalidad infantil (X4) 0.0997
Acceso a internet (%) (X5) 0.0996
Tasa de urbanizacion (%) (X6) 0.1050
Emisiones de CO2 per capita (X7) 0.1067
Participacion laboral femenina (%) (X8) 0.0847
Indice de Estado de Derecho (X9) 0.1002
Acceso a electricidad (%) (X10) 0.1046

Diagrama del indicador para esta bateria de indicadores

library(DiagrammeR)
diagrama <- grViz("
digraph bateria_indicadores {
  graph [layout = dot, rankdir = LR, label = 'Diagrama del Indicador', labelloc = t, fontsize = 20]

  // Componentes
  F1 [label='F1', shape=circle, style=filled, fillcolor=pink]
  F2 [label='F2', shape=circle, style=filled, fillcolor=purple]

  // Variables
  X1 [label='X1 PIB per capita', shape=oval]
  X2 [label='X2 Esperanza de vida', shape=oval]
  X3 [label='X3 Anos de escolaridad', shape=oval]
  X4 [label='X4 Tasa mortalidad infantil', shape=oval]
  X5 [label='X5 Acceso a internet', shape=oval]
  X6 [label='X6 Tasa urbanizacion', shape=oval]
  X7 [label='X7 Emisiones de CO2', shape=oval]
  X8 [label='X8 Participacion laboral femenina', shape=oval]
  X9 [label='X9 Indice de Estado de Derecho', shape=oval]
  X10 [label='X10 Acceso a electricidad', shape=oval]

  // Flechas de F1
  F1 -> X1 [label='0.0995']
  F1 -> X2 [label='0.1034']
  F1 -> X3 [label='0.0967']
  F1 -> X4 [label='0.0997']
  F1 -> X5 [label='0.0998']
  F1 -> X8 [label='0.0847']
  F1 -> X9 [label='0.1002']
  F1 -> X10 [label='0.1046']

  // Flechas de F2
  F2 -> X6 [label='0.1050']
  F2 -> X7 [label='0.1067']

  // Alinear variables verticalmente
  { rank = same; X1 -> X2 -> X3 -> X4 -> X5 -> X6 -> X7 -> X8 -> X9 -> X10 [style=invis] }

  // Componentes a la izquierda
  { rank = min; F1; F2 }
}
")

diagrama