Taller: Construcción de un IDH Propio

Análisis Multivariado – Universidad Surcolombiana (USCO) – Especialización en Estadística

Author

Sergio Andrés Beltrán González

Published

May 28, 2026


1 Descripción del Problema

El Índice de Desarrollo Humano (IDH) del PNUD resume el nivel de desarrollo de un país en tres dimensiones: salud, educación e ingreso. Sin embargo, esta medida excluye factores relevantes como la desigualdad interna (Gini), la vulnerabilidad laboral (desempleo) y la integración económica (comercio exterior).

El objetivo de este taller es construir un IDH propio que analice seis dimensiones iniciales y, tras el diagnóstico del PCA, se construya un índice final depurado de cuatro dimensiones, utilizando técnicas de análisis multivariado (PCA) para validar la estructura de los datos y comparar distintos métodos de ponderación.

NoteInforme Metodológico Recíproco

Las justificaciones de diseño, análisis de sensibilidad y decisiones del estadístico se detallan de forma impersonal en el documento complementario: Informe de Construcción del IDH Propio (RPubs).

NoteObjetivos del Análisis
  1. Verificar la adecuación de los datos para un análisis de componentes principales (Bartlett, KMO, normalidad).
  2. Ejecutar un PCA para identificar la estructura latente de las seis variables.
  3. Construir un IDH propio mediante media ponderada con pesos teóricos.
  4. Comparar el índice propio con un IDH basado en PCA (data-driven) y la fórmula del PNUD.
  5. Clasificar los países en grupos de desarrollo mediante cuartiles basados en la línea base del PCA.

2 Descripción de Variables

Ver código
# ── Importar datos ────────────────────────────────────────────────────────────
IDH <- read_excel("IDH_Duty.xlsx", sheet = "IDH")

# ── Fijar nombres de fila ────────────────────────────────────────────────────
rownames(IDH) <- IDH$Country

# ── Tabla resumen de datos cargados ──────────────────────────────────────────
resumen_datos <- data.frame(
  Concepto = c("Total de países",
               "Total de variables",
               "Variables numéricas",
               "Variable de agrupación"),
  Valor = c(as.character(nrow(IDH)),
            as.character(ncol(IDH)),
            "6 (Escolaridad, Esperanza, PIB, Gini, Desempleo, Cexterior)",
            "Agr (región geográfica)")
)

apa_table(resumen_datos,
          col.names = c("Concepto", "Valor"),
          caption   = "Resumen de los Datos Cargados — IDH_Duty",
          align     = c("l", "l"))
Resumen de los Datos Cargados — IDH_Duty
Concepto Valor
Total de países 30
Total de variables 8
Variables numéricas 6 (Escolaridad, Esperanza, PIB, Gini, Desempleo, Cexterior)
Variable de agrupación Agr (región geográfica)
Ver código
apa_table(
  head(IDH, 8),
  caption = "Primeros 8 registros — IDH_Duty",
  align   = c("l", "l", "r", "r", "r", "r", "r", "r")
)
Primeros 8 registros — IDH_Duty
Country Escolaridad Esperanza PIB Gini Desempleo Cexterior Agr
Argentina 17.7 76.7 21190 41.4 9.8 32.4 South
Austria 16.1 81.5 56197 29.7 4.7 107.7 Euro
Belgium 19.8 81.6 52085 27.4 5.6 163.3 Euro
Bolivia (Plurinational State of) 14.2 71.5 8554 42.2 3.5 56.4 South
Brazil 15.4 75.9 14263 53.9 12.1 29.0 South
Canada 16.2 82.4 48527 33.8 5.6 65.0 North
Chile 16.4 80.2 23261 44.4 7.1 56.8 South
Colombia 14.4 77.3 14257 50.4 9.7 38.1 South
Ver código
tabla_vars <- data.frame(
  Variable    = c("Country", "Agr", "Escolaridad", "Esperanza",
                  "PIB", "Gini", "Desempleo", "Cexterior"),
  Tipo        = c("Categórica", "Categórica", "Continua", "Continua",
                  "Continua", "Continua", "Continua", "Continua"),
  Rol         = c("Identificador", "Agrupación",
                  "Dimensión educación", "Dimensión salud",
                  "Dimensión ingreso", "Dimensión equidad",
                  "Dimensión empleo", "Dimensión apertura"),
  Descripcion = c("Nombre del país",
                  "Región geográfica (América, Europa, Asia, etc.)",
                  "Años promedio de educación (15+)",
                  "Esperanza de vida al nacer (años)",
                  "INB per cápita PPP (USD)",
                  "Coeficiente de desigualdad (0–100)",
                  "Tasa de desempleo (%)",
                  "Comercio exterior (% del PIB)")
)

apa_table(tabla_vars,
         col.names = c("Variable", "Tipo", "Rol", "Descripción"),
         caption   = "Diccionario de Variables del Estudio",
         align     = c("l", "l", "l", "l"))
Diccionario de Variables del Estudio
Variable Tipo Rol Descripción
Country Categórica Identificador Nombre del país
Agr Categórica Agrupación Región geográfica (América, Europa, Asia, etc.)
Escolaridad Continua Dimensión educación Años promedio de educación (15+)
Esperanza Continua Dimensión salud Esperanza de vida al nacer (años)
PIB Continua Dimensión ingreso INB per cápita PPP (USD)
Gini Continua Dimensión equidad Coeficiente de desigualdad (0–100)
Desempleo Continua Dimensión empleo Tasa de desempleo (%)
Cexterior Continua Dimensión apertura Comercio exterior (% del PIB)
WarningVariables positivas y negativas

Las variables Gini y Desempleo son indicadores donde un valor alto es desfavorable. En la normalización (sección 6) se invierten sus índices para que valores altos representen mejor desarrollo.


3 Preparación y Diagnóstico de Datos

Ver código
# ── Separar variables numéricas ──────────────────────────────────────────────
Xnum <- IDH[, c("Escolaridad", "Esperanza", "PIB",
                 "Gini", "Desempleo", "Cexterior")]
Xnum <- as.data.frame(lapply(Xnum, as.numeric))
rownames(Xnum) <- IDH$Country

3.1 Diagnóstico de Datos Faltantes

Ver código
na_por_var <- colSums(is.na(Xnum))
total_na   <- sum(is.na(Xnum))

apa_table(
  data.frame(Variable = names(na_por_var),
             NA_count = as.integer(na_por_var)),
  col.names = c("Variable", "Valores faltantes (NA)"),
  caption   = "Diagnóstico de Datos Faltantes por Variable",
  align     = c("l", "r"),
  nota      = paste0("Total de NA en la base: ", total_na, ".")
)
Diagnóstico de Datos Faltantes por Variable
Variable Valores faltantes (NA)
Escolaridad 0
Esperanza 0
PIB 0
Gini 0
Desempleo 0
Cexterior 0
Nota. Total de NA en la base: 0.

3.2 Estadísticos Descriptivos

Ver código
desc <- data.frame(
  Variable = names(Xnum),
  Media    = round(sapply(Xnum, mean, na.rm = TRUE), 2),
  DE       = round(sapply(Xnum, sd, na.rm = TRUE), 2),
  Min      = round(sapply(Xnum, min, na.rm = TRUE), 2),
  Mediana  = round(sapply(Xnum, median, na.rm = TRUE), 2),
  Max      = round(sapply(Xnum, max, na.rm = TRUE), 2)
)

apa_table(desc,
          col.names = c("Variable", "Media", "DE", "Mín", "Mediana", "Máx"),
          caption   = "Estadísticos Descriptivos — Variables Numéricas",
          align     = c("l", "r", "r", "r", "r", "r"))
Estadísticos Descriptivos — Variables Numéricas
Variable Media DE Mín Mediana Máx
Escolaridad 14.99 2.45 9.7 15.50 19.8
Esperanza 77.76 4.37 64.0 77.60 83.6
PIB 26296.90 18233.89 1709.0 20627.00 63826.0
Gini 40.40 7.23 27.4 41.25 53.9
Desempleo 6.98 3.87 2.5 5.60 17.2
Cexterior 70.63 32.60 26.4 65.55 163.3

3.3 Boxplots Individuales por Variable

Ver código
par(mfrow = c(2, 3), mar = c(4, 4, 2, 1))
for (v in names(Xnum)) {
  boxplot(Xnum[[v]], main = v, col = "#00AFBB", border = "#005f6b",
          ylab = v, las = 1)
}

Ver código
par(mfrow = c(1, 1))

Interpretación: Los boxplots permiten identificar visualmente valores atípicos por variable. Las observaciones fuera de los bigotes (1.5 × IQR) son candidatos a outliers univariados.

3.4 Detección de Outliers Multivariados — Distancia de Mahalanobis

Ver código
Xnum_completo <- Xnum[complete.cases(Xnum), ]
D2 <- mahalanobis(Xnum_completo,
                  center = colMeans(Xnum_completo),
                  cov    = cov(Xnum_completo))
p_val_mah <- pchisq(D2, df = ncol(Xnum_completo), lower.tail = FALSE)

outliers_mah <- data.frame(
  País    = rownames(Xnum_completo),
  D2      = round(D2, 2),
  p_valor = round(p_val_mah, 4)
)
outliers_mah <- outliers_mah[order(outliers_mah$D2, decreasing = TRUE), ]

apa_table(head(outliers_mah, 10),
          col.names = c("País", "D² Mahalanobis", "p-valor"),
          caption   = "Top 10 — Distancia de Mahalanobis (posibles outliers si p < 0.05)",
          align     = c("l", "r", "r"),
          nota      = "Bajo H₀ de normalidad multivariada, D² sigue una distribución χ² con p = 6 grados de libertad.")
Top 10 — Distancia de Mahalanobis (posibles outliers si p < 0.05)
País D² Mahalanobis p-valor
Haiti 19.95 0.0028
United States 15.74 0.0152
Belgium 13.32 0.0382
Honduras 8.81 0.1844
Hungary 8.80 0.1850
Greece 8.55 0.2005
Brazil 7.92 0.2437
Panama 6.41 0.3785
Venezuela (Bolivarian Republic of) 6.34 0.3859
Argentina 5.60 0.4698
Nota. Bajo H₀ de normalidad multivariada, D² sigue una distribución χ² con p = 6 grados de libertad.
Tip¿Qué es la Distancia de Mahalanobis?

La distancia de Mahalanobis mide qué tan lejos está un punto del centro de la distribución, teniendo en cuenta la correlación entre variables. Un país con D² alto y p < 0.05 es un outlier multivariado: su combinación de variables es atípica incluso si cada variable individualmente parece normal.

3.5 Test de Normalidad Multivariada

Ver código
result_mvn <- mvn(Xnum_completo)

apa_table(result_mvn$multivariate_normality,
          caption = "Test de Normalidad Multivariada — Henze-Zirkler",
          align   = c("l", "r", "r", "l"))
Test de Normalidad Multivariada — Henze-Zirkler
Test Statistic p.value Method MVN
Henze-Zirkler 1.04 0.002 asymptotic ✗ Not normal
Ver código
apa_table(result_mvn$univariate_normality,
          caption = "Tests de Normalidad Univariada — Shapiro-Wilk",
          align   = c("l", "l", "r", "r", "l"))
Tests de Normalidad Univariada — Shapiro-Wilk
Test Variable Statistic p.value Normality
Anderson-Darling Escolaridad 0.534 0.158 ✓ Normal
Anderson-Darling Esperanza 0.519 0.172 ✓ Normal
Anderson-Darling PIB 0.884 0.021 ✗ Not normal
Anderson-Darling Gini 0.321 0.515 ✓ Normal
Anderson-Darling Desempleo 1.156 0.004 ✗ Not normal
Anderson-Darling Cexterior 0.977 0.012 ✗ Not normal

4 Análisis Exploratorio — Correlaciones

Ver código
Rho <- cor(Xnum, use = "pairwise.complete.obs", method = "pearson")
corrplot(Rho,
         method  = "color",
         type    = "upper",
         tl.col  = "black",
         addCoef.col = "black",
         number.cex  = 0.7,
         title   = "Matriz de correlaciones – IDH_Duty",
         mar     = c(0, 0, 1, 0))

Interpretación: Las correlaciones altas entre Escolaridad, Esperanza y PIB sugieren que estas variables comparten una dimensión latente (desarrollo general). Gini y Desempleo muestran correlaciones negativas con las anteriores, confirmando que países más desarrollados tienden a tener menor desigualdad y desempleo.


5 Tests Previos al PCA

5.1 Test de Esfericidad de Bartlett

Ver código
bart <- cortest.bartlett(Rho, n = nrow(Xnum), diag = TRUE)

apa_table(
  data.frame(
    Estadístico = "Chi-cuadrado",
    Valor       = round(bart$chisq, 2),
    GL          = bart$df,
    p_valor     = format(bart$p.value, scientific = TRUE)
  ),
  col.names = c("Estadístico", "Valor", "GL", "p-valor"),
  caption   = "Test de Esfericidad de Bartlett",
  align     = c("l", "r", "c", "r"),
  nota      = "H₀: la matriz de correlaciones es identidad (no hay estructura). p < 0.05 → se rechaza H₀ → tiene sentido aplicar PCA."
)
Test de Esfericidad de Bartlett
Estadístico Valor GL p-valor
Chi-cuadrado 82.03 15 2.968819e-11
Nota. H₀: la matriz de correlaciones es identidad (no hay estructura). p < 0.05 → se rechaza H₀ → tiene sentido aplicar PCA.

5.2 Índice KMO (Adecuación Muestral)

Ver código
kmo_result <- KMOS(Xnum, use = "pairwise.complete.obs")

apa_table(
  data.frame(
    Variable = c(names(kmo_result$KMO.ind), "KMO Global"),
    KMO      = round(c(kmo_result$KMO.ind, kmo_result$KMO), 3)
  ),
  col.names = c("Variable", "KMO"),
  caption   = "Índice KMO — Adecuación Muestral para PCA",
  align     = c("l", "r"),
  nota      = "KMO > 0.6 es aceptable; > 0.7 es bueno; > 0.8 es excelente."
)
Índice KMO — Adecuación Muestral para PCA
Variable KMO
KMO Global 0.668
Nota. KMO > 0.6 es aceptable; > 0.7 es bueno; > 0.8 es excelente.

5.3 Valores Propios de la Matriz de Correlaciones

Ver código
e <- eigen(Rho, symmetric = TRUE)

apa_table(
  data.frame(
    Componente    = paste0("CP", 1:length(e$values)),
    Eigenvalue    = round(e$values, 3),
    Var_explicada = paste0(round(e$values / sum(e$values) * 100, 1), "%"),
    Acumulada     = paste0(round(cumsum(e$values / sum(e$values) * 100), 1), "%"),
    Kaiser        = ifelse(e$values >= 1, "✓ Retener", "✗ Descartar")
  ),
  col.names = c("Componente", "Eigenvalue", "% Varianza", "% Acumulada", "Criterio Kaiser"),
  caption   = "Valores Propios de la Matriz de Correlaciones",
  align     = c("l", "r", "r", "r", "c"),
  nota      = "Criterio de Kaiser: retener componentes con eigenvalue ≥ 1."
)
Valores Propios de la Matriz de Correlaciones
Componente Eigenvalue % Varianza % Acumulada Criterio Kaiser
CP1 3.086 51.4% 51.4% ✓ Retener
CP2 1.316 21.9% 73.4% ✓ Retener
CP3 0.828 13.8% 87.2% ✗ Descartar
CP4 0.394 6.6% 93.7% ✗ Descartar
CP5 0.240 4% 97.7% ✗ Descartar
CP6 0.137 2.3% 100% ✗ Descartar
Nota. Criterio de Kaiser: retener componentes con eigenvalue ≥ 1.
Important¿Cuántos componentes retener?

Se retienen los componentes cuyo eigenvalue ≥ 1 (criterio de Kaiser). Cada componente con eigenvalue < 1 explica menos varianza que una sola variable original estandarizada, por lo que no aporta información relevante.


6 Análisis de Componentes Principales (PCA)

Ver código
pca_idh <- PCA(Xnum,
               scale.unit = TRUE,
               graph      = FALSE)

eig_idh <- get_eigenvalue(pca_idh)
eig_df <- as.data.frame(round(eig_idh, 2))
eig_df <- cbind(Componente = rownames(eig_df), eig_df)
apa_table(eig_df,
          col.names = c("Componente", "Valor Propio", "% Varianza", "% Acumulada"),
          caption = "Varianza Explicada por Componente Principal",
          align   = c("l", "r", "r", "r"))
Varianza Explicada por Componente Principal
Componente Valor Propio % Varianza % Acumulada
Dim.1 3.09 51.43 51.43
Dim.2 1.32 21.93 73.36
Dim.3 0.83 13.80 87.15
Dim.4 0.39 6.57 93.72
Dim.5 0.24 3.99 97.71
Dim.6 0.14 2.29 100.00

6.0.1 Fórmulas Matemáticas de los Componentes (Scoring Coefficients)

A partir de las coordenadas (loadings) de las variables y sus respectivos valores propios (eigenvalues), se extraen los coeficientes de puntuación (scoring coefficients) para cada componente, dividiendo la coordenada de la variable por la raíz cuadrada del valor propio.

Ver código
eigenvalues <- pca_idh$eig[, 1]
loadings <- pca_idh$var$coord
coef_cp1 <- loadings[, 1] / sqrt(eigenvalues[1])
coef_cp2 <- loadings[, 2] / sqrt(eigenvalues[2])

score_coefs <- data.frame(
  Variable = rownames(loadings),
  Simbolo  = paste0("$Z_", 1:nrow(loadings), "$"),
  CP1 = round(coef_cp1, 4),
  CP2 = round(coef_cp2, 4)
)

apa_table(score_coefs,
          col.names = c("Variable", "Símbolo", "Coeficiente CP1", "Coeficiente CP2"),
          caption   = "Coeficientes de Ponderación (Scoring Coefficients) para CP1 y CP2",
          align     = c("l", "c", "r", "r"),
          nota      = "Los símbolos corresponden a las variables originales en su escala estandarizada.")
Coeficientes de Ponderación (Scoring Coefficients) para CP1 y CP2
Variable Símbolo Coeficiente CP1 Coeficiente CP2
Escolaridad $Z_1$ 0.4869 0.2870
Esperanza $Z_2$ 0.4863 0.2134
PIB $Z_3$ 0.5191 -0.0185
Gini $Z_4$ -0.4572 0.2128
Desempleo $Z_5$ 0.0025 0.6545
Cexterior $Z_6$ 0.2191 -0.6310
Nota. Los símbolos corresponden a las variables originales en su escala estandarizada.
NoteCombinaciones Lineales de los Componentes Principales

Las combinaciones lineales matemáticas resultantes para el cálculo de las puntuaciones de los componentes a partir de las variables estandarizadas de la tabla son:

\[CP_1 = 0.487 \cdot Z_1 + 0.486 \cdot Z_2 + 0.519 \cdot Z_3 - 0.457 \cdot Z_4 + 0.002 \cdot Z_5 + 0.219 \cdot Z_6\]

\[CP_2 = 0.287 \cdot Z_1 + 0.213 \cdot Z_2 - 0.019 \cdot Z_3 + 0.213 \cdot Z_4 + 0.655 \cdot Z_5 - 0.631 \cdot Z_6\]

6.1 Scree Plot con Criterio de Kaiser

Ver código
fviz_eig(pca_idh,
         addlabels = TRUE,
         ylim      = c(0, 60),
         main      = "Varianza explicada por componente") +
  geom_hline(yintercept = 100/ncol(Xnum),
             linetype   = "dashed",
             color      = "red") +
  annotate("text", x = ncol(Xnum) - 0.5,
           y = 100/ncol(Xnum) + 2,
           label = "Criterio de Kaiser (eigenvalue = 1)",
           color = "red", size = 3.5)

6.2 Círculo de Correlaciones

Ver código
fviz_pca_var(pca_idh,
             col.var       = "contrib",
             arrowsize     = 1.2,
             labelsize     = 5,
             repel         = TRUE,
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             title         = "Círculo de correlaciones – PCA IDH")

Interpretación: Las flechas cercanas al borde del círculo (cos² alto) están bien representadas en el plano CP1–CP2. Variables con flechas en la misma dirección están positivamente correlacionadas; en direcciones opuestas, negativamente correlacionadas.

6.3 Calidad de Representación (Cos²)

Ver código
ggarrange(
  fviz_cos2(pca_idh, choice = "var", axes = 1, ylim = c(0, 1),
            title = "Cos² — Dimensión 1"),
  fviz_cos2(pca_idh, choice = "var", axes = 1:2, ylim = c(0, 1),
            title = "Cos² — Dimensiones 1+2"),
  ncol = 2
)

6.4 Contribuciones de Variables

Ver código
ggarrange(
  fviz_contrib(pca_idh, choice = "var", axes = 1, top = 6,
               title = "Contribución a CP1"),
  fviz_contrib(pca_idh, choice = "var", axes = 2, top = 6,
               title = "Contribución a CP2"),
  ncol = 2
)

6.5 Interpretación de Componentes (Dimdesc)

Ver código
desc_pca <- dimdesc(pca_idh, axes = c(1, 2), proba = 0.05)

if (!is.null(desc_pca$Dim.1$quanti)) {
  df_dim1 <- as.data.frame(round(desc_pca$Dim.1$quanti, 4))
  df_dim1 <- cbind(Variable = rownames(df_dim1), df_dim1)
  apa_table(df_dim1,
            col.names = c("Variable", "Correlación", "p-valor", "N"),
            caption = "Variables significativamente correlacionadas con CP1",
            align   = c("l", "r", "r", "c"))
}
Variables significativamente correlacionadas con CP1
Variable Correlación p-valor N
PIB 0.9118 0.0000 30
Escolaridad 0.8553 0.0000 30
Esperanza 0.8542 0.0000 30
Cexterior 0.3849 0.0357 30
Gini -0.8031 0.0000 30
Ver código
if (!is.null(desc_pca$Dim.2$quanti)) {
  df_dim2 <- as.data.frame(round(desc_pca$Dim.2$quanti, 4))
  df_dim2 <- cbind(Variable = rownames(df_dim2), df_dim2)
  apa_table(df_dim2,
            col.names = c("Variable", "Correlación", "p-valor", "N"),
            caption = "Variables significativamente correlacionadas con CP2",
            align   = c("l", "r", "r", "c"))
}
Variables significativamente correlacionadas con CP2
Variable Correlación p-valor N
Desempleo 0.7507 0 30
Cexterior -0.7237 0 30

6.6 Mapa de Individuos (Países)

Ver código
fviz_pca_ind(pca_idh,
             col.ind       = "cos2",
             pointsize     = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel         = TRUE,
             title         = "Países en el espacio PCA")

6.7 Biplot

Ver código
fviz_pca_biplot(pca_idh,
                col.var  = "#FC4E07",
                col.ind  = "#00AFBB",
                repel    = TRUE,
                title    = "Biplot – PCA IDH Duty")

Interpretación: El biplot superpone variables (flechas) e individuos (puntos). Los países ubicados en la dirección de una flecha tienen valores altos en esa variable. Los países cercanos entre sí tienen perfiles similares.

6.8 Rotación Varimax

Ver código
rot_varimax <- principal(Xnum_completo, nfactors = 2, rotate = "varimax",
                         scores = TRUE)

loadings_df <- as.data.frame(unclass(rot_varimax$loadings))
loadings_df$Variable <- rownames(loadings_df)
loadings_df <- loadings_df[, c("Variable", names(loadings_df)[1:2])]
names(loadings_df)[2:3] <- c("RC1", "RC2")

apa_table(
  data.frame(
    Variable = loadings_df$Variable,
    RC1      = round(loadings_df$RC1, 3),
    RC2      = round(loadings_df$RC2, 3),
    Factor_dominante = ifelse(abs(loadings_df$RC1) > abs(loadings_df$RC2), "RC1", "RC2")
  ),
  col.names = c("Variable", "RC1", "RC2", "Factor dominante"),
  caption   = "Loadings con Rotación Varimax (2 Factores)",
  align     = c("l", "r", "r", "c"),
  nota      = "La rotación Varimax maximiza la varianza de los loadings dentro de cada factor, facilitando la interpretación."
)
Loadings con Rotación Varimax (2 Factores)
Variable RC1 RC2 Factor dominante
Escolaridad 0.903 0.159 RC1
Esperanza 0.885 0.077 RC1
PIB 0.891 -0.196 RC1
Gini -0.741 0.393 RC1
Desempleo 0.148 0.736 RC2
Cexterior 0.239 -0.784 RC2
Nota. La rotación Varimax maximiza la varianza de los loadings dentro de cada factor, facilitando la interpretación.
Ver código
vacc <- rot_varimax$Vaccounted
vacc_df <- as.data.frame(round(vacc, 3))
vacc_df <- cbind(Métrica = rownames(vacc_df), vacc_df)
apa_table(vacc_df,
          col.names = c("Métrica", "RC1", "RC2"),
          caption = "Varianza Explicada por Factor Rotado",
          align   = c("l", "r", "r"))
Varianza Explicada por Factor Rotado
Métrica RC1 RC2
SS loadings 3.021 1.381
Proportion Var 0.503 0.230
Cumulative Var 0.503 0.734
Proportion Explained 0.686 0.314
Cumulative Proportion 0.686 1.000

6.8.1 Justificación Metodológica: Filtro por Dimensiones del PCA

El análisis exploratorio de componentes principales (PCA) inicial con las seis variables ha revelado una separación empírica y conceptual contundente de la base de datos en dos dimensiones ortogonales independientes:

  1. Dimensión 1 (Desarrollo Humano Core): Caracterizada por la Escolaridad, la Esperanza de vida, el PIB per cápita y el Coeficiente de Gini (equidad distributiva), que cargan de forma masiva sobre el primer componente principal (\(CP_1\)).
  2. Dimensión 2 (Apertura y Coyuntura Laboral): Caracterizada por la Tasa de Desempleo y el Comercio Exterior, que cargan de forma dominante sobre el segundo componente principal (\(CP_2\)).

Dada esta clara estructura bidimensional, el constructo teórico de “Desarrollo Humano” se reevalúa y depura metodológicamente para concentrarse exclusivamente en el núcleo duro (Core) representado por las variables estrecha y significativamente correlacionadas con la Dimensión 1, aislando del índice final las variables de Desempleo y Comercio Exterior. Esto elimina el “ruido” estadístico de variables coyunturales y dota al índice de una validez de constructo superior, permitiendo estructurar una comparación de modelos sumamente parsimoniosa.


7 Construcción del IDH Propio

ImportantJustificación Metodológica

El primer componente principal (CP1) captura la varianza máxima de las cuatro variables fundamentales simultáneamente, asignando ponderaciones derivadas directamente de los datos (loadings empíricos) a través de un enfoque data-driven. Esto evita la subjetividad de fijar una ponderación uniforme de \(w = 1/3\) para cada dimensión básica, como hace el PNUD estándar. Además, la incorporación del Gini ajustado permite capturar la dimensión crítica de la equidad distributiva interna, superando el vacío metodológico del IDH oficial tradicional.

Fórmula de normalización min-max: \[I_k = \frac{x_k - \min(x_k)}{\max(x_k) - \min(x_k)}\]

Para la variable desfavorable o negativa (Gini): \(I_k = 1 - \frac{x_k - \min(x_k)}{\max(x_k) - \min(x_k)}\)

7.1 Índices Normalizados por Variable

Ver código
norm_pos <- function(x) (x - min(x, na.rm=TRUE)) / (max(x, na.rm=TRUE) - min(x, na.rm=TRUE))
norm_neg <- function(x) 1 - (x - min(x, na.rm=TRUE)) / (max(x, na.rm=TRUE) - min(x, na.rm=TRUE))

IDH_indices <- data.frame(
  Country    = IDH$Country,
  Agr        = IDH$Agr,
  I_Escol    = norm_pos(Xnum$Escolaridad),
  I_Esp      = norm_pos(Xnum$Esperanza),
  I_PIB      = norm_pos(log(Xnum$PIB)),
  I_Gini     = norm_neg(Xnum$Gini),
  I_Desemp   = norm_neg(Xnum$Desempleo),
  I_Cext     = norm_pos(Xnum$Cexterior),
  stringsAsFactors = FALSE
)

apa_table(
  data.frame(
    Dimensión = c("Educación", "Salud", "Ingreso", "Equidad", "Empleo", "Apertura"),
    Variable  = c("Escolaridad", "Esperanza", "PIB (log)", "Gini", "Desempleo", "Cexterior"),
    Sentido   = c("Positivo", "Positivo", "Positivo", "Negativo (invertido)",
                  "Negativo (invertido)", "Positivo"),
    Rango     = c(
      paste0("[", round(min(IDH_indices$I_Escol, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_Escol, na.rm=TRUE), 3), "]"),
      paste0("[", round(min(IDH_indices$I_Esp, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_Esp, na.rm=TRUE), 3), "]"),
      paste0("[", round(min(IDH_indices$I_PIB, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_PIB, na.rm=TRUE), 3), "]"),
      paste0("[", round(min(IDH_indices$I_Gini, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_Gini, na.rm=TRUE), 3), "]"),
      paste0("[", round(min(IDH_indices$I_Desemp, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_Desemp, na.rm=TRUE), 3), "]"),
      paste0("[", round(min(IDH_indices$I_Cext, na.rm=TRUE), 3), ", ",
             round(max(IDH_indices$I_Cext, na.rm=TRUE), 3), "]")
    )
  ),
  col.names = c("Dimensión", "Variable original", "Sentido", "Rango [0, 1]"),
  caption   = "Índices Normalizados Min-Max por Dimensión",
  align     = c("l", "l", "l", "c")
)
Índices Normalizados Min-Max por Dimensión
Dimensión Variable original Sentido Rango [0, 1]
Educación Escolaridad Positivo [0, 1]
Salud Esperanza Positivo [0, 1]
Ingreso PIB (log) Positivo [0, 1]
Equidad Gini Negativo (invertido) [0, 1]
Empleo Desempleo Negativo (invertido) [0, 1]
Apertura Cexterior Positivo [0, 1]

7.2 Ponderadores del Índice

Para la estructuración teórica y metodológica del IDH Propio, se ha procedido a una redefinición deliberada y rigurosa de las ponderaciones de las dimensiones del bienestar. En primer lugar, la arquitectura del índice mantiene como cimiento fundamental el Enfoque de Capacidades de Amartya Sen, el cual postula que el verdadero desarrollo reside en la expansión de las libertades y oportunidades reales de las personas. En consonancia con esta postura, se priorizan las capacidades cognitivas y vitales primarias, otorgando a las dimensiones de Educación (\(I_{Escol}\)) y Salud (\(I_{Esp}\)) el mayor peso relativo del modelo, asignando a cada una un \(35\%\) (\(70\%\) en su conjunto).

En segundo lugar, la dimensión material evaluada a través del ingreso per cápita (\(I_{PIB}\) bajo escala logarítmica) se pondera con un \(20\%\). Desde la perspectiva del desarrollo humano, el ingreso opera no como un fin en sí mismo, sino como una variable instrumental indispensable que brinda el soporte de recursos materiales requerido para la realización efectiva de las libertades básicas, evitando así eclipsar las dimensiones de bienestar social directo.

En tercer lugar, se integra el Coeficiente de Gini con una ponderación del \(10\%\) como un factor ético y metodológico de ajuste por desigualdad interna. Esta decisión corrige de forma directa la falacia de los “promedios nacionales” inherente al IDH tradicional del PNUD, facultando a la equidad distributiva para actuar como un factor de penalización que reajuste el ranking en presencia de asimetrías socioeconómicas extremas, pero sin desestabilizar la consistencia interna del constructo sintético.

Finalmente, la exclusión de las dimensiones de Vulnerabilidad Laboral (Desempleo) e Integración Económica (Comercio Exterior) obedece estrictamente a los criterios empíricos y de representatividad revelados por el Análisis de Componentes Principales (PCA). El diagnóstico evidenció que ambas variables aportaban escasamente a la primera dimensión del desarrollo general (\(CP_1\)) y se comportaban como elementos que agregaban ruido o pertenecían a dinámicas de desarrollo complementario secundario (\(CP_2\)), por lo cual su remoción depura formalmente el constructo del índice para dotarlo de mayor validez conceptual y parsimonia metodológica.

Ver código
w <- c(I_Escol  = 0.35,
       I_Esp    = 0.35,
       I_PIB    = 0.20,
       I_Gini   = 0.10)

apa_table(
  data.frame(
    Dimensión   = c("Educación", "Salud", "Ingreso", "Equidad", "**Total**"),
    Peso        = c(as.character(w), "**1.00**"),
    Justificación = c(
      "Capital humano — enfoque de capacidades (Sen)",
      "Longevidad — indicador básico de bienestar",
      "Nivel de vida — log-escala como PNUD",
      "Gini invertido — dimensión de equidad",
      ""
    )
  ),
  col.names = c("Dimensión", "Peso (w)", "Justificación teórica"),
  caption   = "Ponderadores del IDH Propio (Depurado)",
  align     = c("l", "c", "l")
)
Ponderadores del IDH Propio (Depurado)
Dimensión Peso (w) Justificación teórica
Educación 0.35 Capital humano — enfoque de capacidades (Sen)
Salud 0.35 Longevidad — indicador básico de bienestar
Ingreso 0.2 Nivel de vida — log-escala como PNUD
Equidad 0.1 Gini invertido — dimensión de equidad
**Total** **1.00**

7.3 Cálculo del IDH Propio

NoteFórmula del Índice Compuesto

\[IDH_{Propio} = 0.35 \cdot I_{Escol} + 0.35 \cdot I_{Esp} + 0.20 \cdot I_{PIB} + 0.10 \cdot I_{Gini}\]

Donde cada \(I_k \in [0, 1]\) y \(\sum w_k = 1\).

Ver código
IDH_indices$IDH_Propio <- with(IDH_indices,
  w["I_Escol"]  * I_Escol  +
  w["I_Esp"]    * I_Esp    +
  w["I_PIB"]    * I_PIB    +
  w["I_Gini"]   * I_Gini
)

apa_table(
  data.frame(
    Estadístico = c("Mínimo", "Q1", "Mediana", "Media", "Q3", "Máximo"),
    Valor       = round(as.numeric(summary(IDH_indices$IDH_Propio)), 3)
  ),
  col.names = c("Estadístico", "Valor"),
  caption   = "Distribución del IDH Propio",
  align     = c("l", "r"),
  nota      = "El rango debe estar contenido en [0, 1]."
)
Distribución del IDH Propio
Estadístico Valor
Mínimo 0.048
Q1 0.451
Mediana 0.661
Media 0.614
Q3 0.812
Máximo 0.953
Nota. El rango debe estar contenido en [0, 1].

8 Índice Alternativo vía PCA (Data-Driven)

Este índice es completamente data-driven: los pesos son los loadings del primer componente principal. Permite comparar con el índice ponderado manualmente.

Ver código
# ── IDH PCA 1C: PCA refinado con las 4 variables de la Dimensión 1 ───────────
Xnum_refinado <- Xnum[, c("Escolaridad", "Esperanza", "PIB", "Gini")]
pca_refinado <- PCA(Xnum_refinado, scale.unit = TRUE, graph = FALSE)

IDH_indices$CP1_ref <- pca_refinado$ind$coord[, 1]
IDH_indices$CP2_ref <- pca_refinado$ind$coord[, 2]

# Normalizar CP1 refinado a [0, 1]
min_cp1_ref <- min(IDH_indices$CP1_ref)
max_cp1_ref <- max(IDH_indices$CP1_ref)
IDH_indices$IDH_PCA_1C <- (IDH_indices$CP1_ref - min_cp1_ref) / (max_cp1_ref - min_cp1_ref)

cor_propio_pca <- cor(IDH_indices$IDH_Propio, IDH_indices$IDH_PCA_1C)

# ── IDH PCA 2C: PCA completo con las 6 variables (CP1 + CP2 ponderados) ──────
IDH_indices$CP1_full <- pca_idh$ind$coord[, 1]
IDH_indices$CP2_full <- pca_idh$ind$coord[, 2]

# Normalizar cada componente a [0, 1]
norm01 <- function(x) (x - min(x)) / (max(x) - min(x))
CP1_norm <- norm01(IDH_indices$CP1_full)
CP2_norm <- norm01(IDH_indices$CP2_full)

# Varianza explicada por cada CP (del PCA de 6 variables)
var_cp1 <- pca_idh$eig[1, 2]   # % varianza CP1
var_cp2 <- pca_idh$eig[2, 2]   # % varianza CP2
var_total <- var_cp1 + var_cp2  # varianza retenida total

IDH_indices$IDH_PCA_2C <- (var_cp1 / var_total) * CP1_norm +
                           (var_cp2 / var_total) * CP2_norm

La correlación entre el IDH Propio y el IDH PCA-1C (4 variables) es r = 0.977, lo que indica una concordancia muy alta entre ambos enfoques de ponderación.


9 Ranking y Clasificación de Países

Ver código
# Ordenar estrictamente según la línea base empírica (IDH PCA 1C)
IDH_rank <- IDH_indices[order(IDH_indices$IDH_PCA_1C, decreasing = TRUE), ]
IDH_rank$Rank <- seq_len(nrow(IDH_rank))

IDH_rank$Grupo <- cut(
  IDH_rank$IDH_PCA_1C,
  breaks         = quantile(IDH_rank$IDH_PCA_1C, probs = seq(0, 1, 0.25)),
  include.lowest = TRUE,
  labels         = c("D: Desarrollo Bajo",
                     "C: Desarrollo Medio-Bajo",
                     "B: Desarrollo Medio-Alto",
                     "A: Desarrollo Alto")
)

9.1 Ranking Absoluto de Países (Línea Base: PCA 1C)

Ver código
# Construcción de la tabla completa de ranking y dimensiones (completada con la información de la sección 12)
tabla_final <- IDH_rank[, c("Rank", "Country", "Agr", "Grupo",
                            "I_Escol", "I_Esp", "I_PIB", "I_Gini", "I_Desemp", "I_Cext",
                            "IDH_PCA_1C", "IDH_PCA_2C", "IDH_Propio")]
tabla_final[, 5:13] <- round(tabla_final[, 5:13], 3)

apa_table(tabla_final,
          col.names = c("Rank", "País", "Región", "Grupo",
                        "I_Escol", "I_Esp", "I_PIB", "I_Gini", "I_Desemp", "I_Cext",
                        "IDH PCA-1C", "IDH PCA-2C", "IDH Propio"),
          caption   = "Ranking Absoluto de Países y Dimensiones — Ordenado según IDH PCA-1C",
          align     = c("c", "l", "l", "l",
                        "r", "r", "r", "r", "r", "r", "r", "r", "r"))
Ranking Absoluto de Países y Dimensiones — Ordenado según IDH PCA-1C
Rank País Región Grupo I_Escol I_Esp I_PIB I_Gini I_Desemp I_Cext IDH PCA-1C IDH PCA-2C IDH Propio
1 Belgium Euro A: Desarrollo Alto 1.000 0.898 0.944 1.000 0.789 1.000 1.000 0.765 0.953
2 Germany Euro A: Desarrollo Alto 0.723 0.883 0.960 0.830 0.966 0.451 0.876 0.684 0.837
3 Austria Euro A: Desarrollo Alto 0.634 0.893 0.965 0.913 0.850 0.594 0.875 0.682 0.819
4 Spain Euro A: Desarrollo Alto 0.782 1.000 0.878 0.725 0.218 0.296 0.845 0.809 0.872
5 United Kingdom Euro A: Desarrollo Alto 0.772 0.883 0.910 0.721 0.905 0.277 0.823 0.681 0.833
6 France Euro A: Desarrollo Alto 0.584 0.954 0.916 0.842 0.599 0.278 0.822 0.714 0.806
7 Canada North A: Desarrollo Alto 0.644 0.939 0.924 0.758 0.789 0.282 0.821 0.690 0.815
8 Italy Euro A: Desarrollo Alto 0.634 0.995 0.889 0.679 0.497 0.246 0.792 0.726 0.816
9 Greece Euro B: Desarrollo Medio-Alto 0.812 0.929 0.793 0.736 0.000 0.351 0.784 0.799 0.841
10 United States North B: Desarrollo Medio-Alto 0.653 0.760 1.000 0.472 0.918 0.000 0.758 0.651 0.742
11 Portugal Euro B: Desarrollo Medio-Alto 0.673 0.918 0.826 0.758 0.741 0.447 0.758 0.646 0.798
12 Hungary Euro B: Desarrollo Medio-Alto 0.545 0.658 0.803 0.879 0.939 0.998 0.643 0.473 0.670
13 Uruguay South B: Desarrollo Medio-Alto 0.703 0.709 0.680 0.536 0.578 0.107 0.575 0.579 0.684
14 Chile South B: Desarrollo Medio-Alto 0.663 0.827 0.721 0.358 0.687 0.222 0.574 0.563 0.702
15 Argentina South B: Desarrollo Medio-Alto 0.792 0.648 0.695 0.472 0.503 0.044 0.572 0.599 0.690
16 Costa Rica North C: Desarrollo Medio-Bajo 0.594 0.832 0.658 0.223 0.361 0.290 0.497 0.562 0.653
17 Peru South C: Desarrollo Medio-Bajo 0.525 0.648 0.544 0.419 0.946 0.151 0.431 0.414 0.561
18 Panama North C: Desarrollo Medio-Bajo 0.317 0.740 0.787 0.177 0.905 0.460 0.413 0.386 0.545
19 Mexico North C: Desarrollo Medio-Bajo 0.505 0.561 0.668 0.321 0.939 0.378 0.400 0.377 0.539
20 Ecuador South C: Desarrollo Medio-Bajo 0.485 0.663 0.515 0.321 0.898 0.148 0.393 0.400 0.537
21 Colombia South C: Desarrollo Medio-Bajo 0.465 0.679 0.586 0.132 0.510 0.085 0.359 0.451 0.531
22 Brazil South C: Desarrollo Medio-Bajo 0.564 0.607 0.586 0.000 0.347 0.019 0.333 0.473 0.527
23 Venezuela (Bolivarian Republic of) South D: Desarrollo Bajo 0.307 0.413 0.391 0.649 0.571 0.159 0.312 0.359 0.395
24 Bolivia (Plurinational State of) South D: Desarrollo Bajo 0.446 0.383 0.445 0.442 0.932 0.219 0.301 0.307 0.423
25 El Salvador North D: Desarrollo Bajo 0.198 0.474 0.438 0.577 0.891 0.371 0.285 0.275 0.381
26 Paraguay South D: Desarrollo Bajo 0.297 0.526 0.543 0.291 0.844 0.313 0.281 0.305 0.426
27 Nicaragua North D: Desarrollo Bajo 0.257 0.536 0.312 0.291 0.707 0.502 0.240 0.284 0.369
28 Guatemala North D: Desarrollo Bajo 0.109 0.526 0.443 0.211 1.000 0.142 0.183 0.219 0.332
29 Honduras North D: Desarrollo Bajo 0.040 0.577 0.313 0.068 0.803 0.513 0.128 0.192 0.285
30 Haiti North D: Desarrollo Bajo 0.000 0.000 0.000 0.483 0.231 0.350 0.000 0.160 0.048

9.2 Distribución por Grupo de Desarrollo

Ver código
grupo_stats <- IDH_rank %>%
  group_by(Grupo) %>%
  summarise(
    N      = n(),
    Media  = round(mean(IDH_PCA_1C), 3),
    DE     = round(sd(IDH_PCA_1C), 3),
    Min    = round(min(IDH_PCA_1C), 3),
    Max    = round(max(IDH_PCA_1C), 3),
    .groups = "drop"
  )

apa_table(grupo_stats,
          col.names = c("Grupo", "N", "Media", "DE", "Mín", "Máx"),
          caption   = "Estadísticas por Grupo de Desarrollo (Basado en IDH PCA-1C)",
          align     = c("l", "c", "r", "r", "r", "r"))
Estadísticas por Grupo de Desarrollo (Basado en IDH PCA-1C)
Grupo N Media DE Mín Máx
D: Desarrollo Bajo 8 0.216 0.108 0.000 0.312
C: Desarrollo Medio-Bajo 7 0.404 0.053 0.333 0.497
B: Desarrollo Medio-Alto 7 0.666 0.098 0.572 0.784
A: Desarrollo Alto 8 0.857 0.065 0.792 1.000

9.3 Estadísticas por Región Geográfica

Ver código
region_stats <- IDH_rank %>%
  group_by(Agr) %>%
  summarise(
    N      = n(),
    Media  = round(mean(IDH_PCA_1C, na.rm = TRUE), 3),
    DE     = round(sd(IDH_PCA_1C, na.rm = TRUE), 3),
    .groups = "drop"
  ) %>%
  arrange(desc(Media))

apa_table(region_stats,
          col.names = c("Región", "N", "Media", "DE"),
          caption   = "IDH PCA-1C Promedio por Región Geográfica",
          align     = c("l", "c", "r", "r"))
IDH PCA-1C Promedio por Región Geográfica
Región N Media DE
Euro 10 0.822 0.092
South 10 0.413 0.119
North 10 0.373 0.264

10 Gráficos del Índice Construido

10.1 Ranking de Países

Ver código
ggplot(IDH_rank, aes(x = reorder(Country, IDH_PCA_1C),
                     y = IDH_PCA_1C,
                     fill = Grupo)) +
  geom_col() +
  coord_flip() +
  scale_fill_manual(values = c("A: Desarrollo Alto"       = "#1a7a4a",
                               "B: Desarrollo Medio-Alto" = "#4db87a",
                               "C: Desarrollo Medio-Bajo" = "#f0a500",
                               "D: Desarrollo Bajo"       = "#c0392b")) +
  labs(title    = "Ranking IDH basado en PCA-1C (Data-Driven, 4 Variables)",
       subtitle = "Primer componente principal de 4 variables estandarizadas, escala [0,1]",
       x = NULL, y = "IDH PCA-1C (Línea Base)",
       fill = "Grupo de desarrollo") +
  theme_minimal(base_size = 11)

10.2 Comparación IDH Propio vs IDH PCA-1C

Ver código
ggplot(IDH_indices, aes(x = IDH_PCA_1C, y = IDH_Propio, label = Country)) +
  geom_point(aes(color = Agr), size = 3) +
  geom_text(size = 2.8, hjust = -0.15, vjust = 0.5, check_overlap = TRUE) +
  geom_smooth(method = "lm", se = TRUE, color = "gray40", linetype = "dashed") +
  labs(title    = "IDH Propio vs IDH PCA-1C (4 Variables)",
       subtitle = "Cada punto es un país; color por región",
       x = "IDH vía CP1 refinado (data-driven, 4 var.)",
       y = "IDH Propio (ponderado)") +
  theme_minimal(base_size = 11)

10.3 Boxplot por Región

Ver código
ggplot(IDH_rank, aes(x = reorder(Agr, IDH_PCA_1C, median),
                     y = IDH_PCA_1C, fill = Agr)) +
  geom_boxplot(alpha = 0.7) +
  geom_jitter(width = 0.15, size = 2, alpha = 0.6) +
  labs(title = "Distribución IDH PCA-1C por región",
       x = "Región", y = "IDH PCA-1C (Línea Base)") +
  theme_minimal(base_size = 11) +
  theme(legend.position = "none")

10.4 Mapa de Calor — Perfil de Dimensiones por País

Ver código
IDH_long <- melt(
  IDH_rank[, c("Country", "IDH_PCA_1C", "I_Escol", "I_Esp", "I_PIB", "I_Gini")],
  id.vars = c("Country", "IDH_PCA_1C")
)

ggplot(IDH_long, aes(x = variable, y = reorder(Country, IDH_PCA_1C),
                     fill = value)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "#c0392b", mid = "#f0f0f0",
                       high = "#1a7a4a", midpoint = 0.5) +
  labs(title = "Perfil de dimensiones por país (Ordenado por IDH PCA-1C)",
       x = "Dimensión", y = NULL, fill = "Índice [0,1]") +
  theme_minimal(base_size = 10) +
  theme(axis.text.x = element_text(angle = 30, hjust = 1))


11 Análisis de Robustez y Comparación de Modelos

¿Qué tan robusto es el ranking y la propuesta del nuevo IDH Propio (4D) ante cambios metodológicos? En esta sección comparamos estrictamente cuatro enfoques de ponderación:

  1. IDH Propio (4D Refinado): Nuestro modelo propuesto, con ponderaciones teóricas asignadas manualmente (Educación 35%, Salud 35%, Ingreso 20%, Gini 10%).
  2. IDH PCA-1C (4D Data-Driven): El modelo empírico optimizado mediante el primer componente principal (\(CP_1\)) de una nueva estimación de PCA (pca_refinado) basada exclusivamente en las 4 variables de la Dimensión 1.
  3. IDH PCA-2C (6D Bidimensional): El modelo empírico compuesto que combina las puntuaciones normalizadas de \(CP_1\) y \(CP_2\) del PCA completo de 6 variables (pca_idh), ponderadas por su varianza explicada relativa.
  4. IDH Oficial PNUD (3D Standard): La formulación simplificada tradicional que utiliza únicamente las 3 dimensiones básicas del PNUD (Educación, Salud e Ingresos) distribuidas de forma equiponderada (\(1/3\) cada una).

11.1 Escenarios de Ponderación

Ver código
# Cálculo del IDH Oficial PNUD (media aritmética de las 3 dimensiones básicas)
IDH_indices$IDH_Oficial_PNUD <- with(IDH_indices,
  (1/3) * I_Escol + (1/3) * I_Esp + (1/3) * I_PIB
)

11.2 Correlación entre Enfoques

Ver código
cor_mat <- cor(IDH_indices[, c("IDH_Propio", "IDH_PCA_1C", "IDH_PCA_2C", "IDH_Oficial_PNUD")])
cor_mat_df <- as.data.frame(round(cor_mat, 3))
cor_mat_df <- cbind(Escenario = rownames(cor_mat_df), cor_mat_df)
apa_table(cor_mat_df,
          col.names = c("Escenario", "IDH Propio", "IDH PCA-1C", "IDH PCA-2C", "IDH Oficial PNUD"),
          caption = "Matriz de Correlaciones entre los Cuatro Enfoques de Ponderación",
          align   = c("l", rep("r", ncol(cor_mat))),
          nota    = "Correlaciones extremadamente altas (> 0.95) indican que los modelos son altamente consistentes empírica y conceptualmente. El IDH PCA-2C incorpora las 6 variables originales vía CP1 y CP2 ponderados por varianza explicada.")
Matriz de Correlaciones entre los Cuatro Enfoques de Ponderación
Escenario IDH Propio IDH PCA-1C IDH PCA-2C IDH Oficial PNUD
IDH_Propio 1.000 0.977 0.966 0.994
IDH_PCA_1C 0.977 1.000 0.958 0.957
IDH_PCA_2C 0.966 0.958 1.000 0.952
IDH_Oficial_PNUD 0.994 0.957 0.952 1.000
Nota. Correlaciones extremadamente altas (> 0.95) indican que los modelos son altamente consistentes empírica y conceptualmente. El IDH PCA-2C incorpora las 6 variables originales vía CP1 y CP2 ponderados por varianza explicada.

11.3 Comparación de Rankings

Ver código
rank_comp <- data.frame(
  Country        = IDH_indices$Country,
  Rank_PCA_1C    = rank(-IDH_indices$IDH_PCA_1C),
  Rank_PCA_2C    = rank(-IDH_indices$IDH_PCA_2C),
  Rank_Propio    = rank(-IDH_indices$IDH_Propio),
  Rank_Oficial   = rank(-IDH_indices$IDH_Oficial_PNUD)
)

apa_table(rank_comp[order(rank_comp$Rank_PCA_1C), ],
          col.names = c("País", "Rank PCA-1C (Línea Base)", "Rank PCA-2C (6 Var.)",
                        "Rank Propio (4D)", "Rank Oficial PNUD (3D)"),
          caption   = "Comparación de Rankings por Enfoque de Ponderación (Línea Base: PCA-1C)",
          align     = c("l", "c", "c", "c", "c"),
          nota      = "PCA-1C = CP1 refinado 4D; PCA-2C = CP1+CP2 completo 6D ponderado por varianza; Propio = ponderado 4D (con Gini 10%); Oficial PNUD = aritmético 3D.")
Comparación de Rankings por Enfoque de Ponderación (Línea Base: PCA-1C)
País Rank PCA-1C (Línea Base) Rank PCA-2C (6 Var.) Rank Propio (4D) Rank Oficial PNUD (3D)
Belgium 1 3 1 1
Germany 2 7 4 3
Austria 3 8 6 8
Spain 4 1 2 2
United Kingdom 5 9 5 4
France 6 5 9 9
Canada 7 6 8 7
Italy 8 4 7 6
Greece 9 2 3 5
United States 10 10 11 11
Portugal 11 11 10 10
Hungary 12 16 15 16
Uruguay 13 13 14 14
Chile 14 14 12 12
Argentina 15 12 13 13
Costa Rica 16 15 16 15
Peru 17 19 17 21
Panama 18 21 18 17
Mexico 19 22 19 19
Ecuador 20 20 20 22
Colombia 21 18 21 20
Brazil 22 17 22 18
Venezuela (Bolivarian Republic of) 23 23 25 25
Bolivia (Plurinational State of) 24 24 24 24
El Salvador 25 27 26 26
Paraguay 26 25 23 23
Nicaragua 27 26 27 27
Guatemala 28 28 28 28
Honduras 29 29 29 29
Haiti 30 30 30 30
Nota. PCA-1C = CP1 refinado 4D; PCA-2C = CP1+CP2 completo 6D ponderado por varianza; Propio = ponderado 4D (con Gini 10%); Oficial PNUD = aritmético 3D.

12 Exportar Resultados

Ver código
write.csv(tabla_final, "IDH_Propio_resultados.csv", row.names = FALSE)
write.csv(rank_comp[order(rank_comp$Rank_PCA_1C), ], "IDH_comparacion_rankings.csv", row.names = FALSE)

apa_table(
  data.frame(
    Archivo     = c("IDH_Propio_resultados.csv", "IDH_comparacion_rankings.csv"),
    Contenido   = c("Tabla resumen final con índices y ranking (incluye PCA-1C, PCA-2C y Propio)",
                    "Comparación de rankings entre los 4 escenarios de ponderación")
  ),
  col.names = c("Archivo", "Contenido"),
  caption   = "Archivos Exportados",
  align     = c("l", "l")
)
Archivos Exportados
Archivo Contenido
IDH_Propio_resultados.csv Tabla resumen final con índices y ranking (incluye PCA-1C, PCA-2C y Propio)
IDH_comparacion_rankings.csv Comparación de rankings entre los 4 escenarios de ponderación

13 Conclusiones

1. Adecuación de los datos: El test de Bartlett confirma que la matriz de correlaciones no es identidad (p < 0.05), y el KMO global indica una adecuación muestral aceptable para PCA. Los 30 países y 6 variables permiten una reducción dimensional confiable.

2. Estructura del PCA: Los dos primeros componentes principales capturan la mayoría de la variabilidad. CP1 refleja el desarrollo general (educación, salud, ingreso vs. desigualdad), mientras que CP2 captura dimensiones complementarias (desempleo, comercio exterior).

3. IDH Propio: El índice construido con media ponderada de 4 dimensiones (excluyendo Desempleo e Integración Económica por su baja representatividad empírica) produce un ranking coherente con la literatura de desarrollo. Belgium lidera el ranking y Haiti ocupa la última posición.

4. Robustez: La correlación entre el IDH Propio y el IDH PCA-1C (4 variables, 1 componente) es r = 0.977, lo que confirma que los pesos teóricos asignados son altamente consistentes con la estructura empírica de los datos. La correlación con el modelo bidimensional IDH PCA-2C (6 variables, 2 componentes) es r = 0.966, lo que indica que la inclusión de las dimensiones de Desempleo y Comercio Exterior vía \(CP_2\) añade matices sin alterar drásticamente el ordenamiento general. Asimismo, la comparación con el IDH Oficial del PNUD demuestra que la incorporación de la desigualdad de Gini refina el índice tradicional sin alterar su consistencia general.


Análisis desarrollado para la Universidad Surcolombiana (USCO) — Especialización en Estadística Informe de Construcción y Decisiones Metodológicas en RPubs: Informe de Construcción del IDH Propio Herramienta: R R version 4.5.3 (2026-03-11 ucrt)