i) Soporte teórico del IDH

El Índice de Desarrollo Humano (IDH) lo propuso el PNUD en 1990, a partir de los trabajos del economista paquistaní Mahbub ul Haq y del Nobel de economía Amartya Sen. La idea era simple pero potente: el PIB per cápita por sí solo no dice qué tan bien vive la gente. Un país puede tener mucha plata y al mismo tiempo tener gente sin educación o con baja esperanza de vida. El IDH apareció como una alternativa al PIB per cápita para medir el desarrollo desde una mirada más amplia, alineada con el enfoque de capacidades de Sen: lo que importa no es lo que la gente tiene, sino lo que la gente puede ser y hacer.

El IDH oficial considera tres dimensiones:

Dimensión Indicador(es) oficial(es)
Salud Esperanza de vida al nacer
Educación Años esperados de escolarización + Años promedio de escolarización
Nivel de vida INB per cápita (PPA, dólares constantes)

Desde 2010 el PNUD calcula el IDH como media geométrica de los tres subíndices (antes era media aritmética). El cambio importa porque la media geométrica no permite que una dimensión muy alta compense a una muy baja: si un país tiene cero educación, su IDH es cero, por más que su ingreso sea altísimo. Esto refleja mejor la idea de Sen sobre capacidades: ninguna dimensión sustituye a las otras.

Cada subíndice se construye con una normalización min-max usando metas mundiales (goalposts) fijadas por el PNUD:

\[I_{dim} = \frac{\text{valor observado} - \text{valor mínimo}}{\text{valor máximo} - \text{valor mínimo}}\]

Para el ingreso se aplica el logaritmo antes de normalizar, porque a partir de cierto nivel el dinero extra aporta cada vez menos al desarrollo humano (utilidad marginal decreciente).


La base IDH_Duty: exploración

library(readxl)
library(knitr)
library(FactoMineR)
library(factoextra)

datos <- read_excel("IDH Duty.xlsx", sheet = "IDH")
metadata <- read_excel("IDH Duty.xlsx", sheet = "Metadata")
str(datos)
## tibble [30 × 8] (S3: tbl_df/tbl/data.frame)
##  $ Country    : chr [1:30] "Argentina" "Austria" "Belgium" "Bolivia (Plurinational State of)" ...
##  $ Escolaridad: num [1:30] 17.7 16.1 19.8 14.2 15.4 16.2 16.4 14.4 15.7 14.6 ...
##  $ Esperanza  : num [1:30] 76.7 81.5 81.6 71.5 75.9 82.4 80.2 77.3 80.3 77 ...
##  $ PIB        : num [1:30] 21190 56197 52085 8554 14263 ...
##  $ Gini       : num [1:30] 41.4 29.7 27.4 42.2 53.9 33.8 44.4 50.4 48 45.4 ...
##  $ Desempleo  : num [1:30] 9.8 4.7 5.6 3.5 12.1 5.6 7.1 9.7 11.9 4 ...
##  $ Cexterior  : num [1:30] 32.4 107.7 163.3 56.4 29 ...
##  $ Agr        : chr [1:30] "South" "Euro" "Euro" "South" ...

La base trae 30 países con 8 variables. Antes de proponer nada, miramos el metadata para entender qué mide cada columna.

kable(metadata, col.names = c("Variable", "", "Concepto medido"),
      caption = "Variables disponibles en la base IDH_Duty")
Variables disponibles en la base IDH_Duty
Variable Concepto medido
Country : Nombre del País
Escolaridad : Año de educación población de 15 o más años
Esperanza : Esperanza de Vida al nacer
PIB : Producto Interno Bruto
Gini : Indice de Gini
Desempleo : Tasa de Desempleo
Cexterior : Comercio exterior
Agr : Región donde se ubica el País.

Revisión inicial de las variables

tabla_vars <- data.frame(
  Variable = c("Escolaridad", "Esperanza", "PIB", "Gini",
               "Desempleo", "Cexterior", "Agr"),
  Mide = c("Años promedio de educación (15+)",
           "Esperanza de vida al nacer",
           "Producto Interno Bruto per cápita",
           "Desigualdad de ingresos",
           "Tasa de desempleo",
           "Comercio exterior (% PIB)",
           "Región geográfica"),
  Direccion = c("Más es mejor (+)",
                "Más es mejor (+)",
                "Más es mejor (+, pero log)",
                "Más es PEOR (-)",
                "Más es PEOR (-)",
                "Sin dirección clara (~)",
                "Categórica"),
  Rol_potencial = c("Dimensión educación (núcleo)",
                    "Dimensión salud (núcleo)",
                    "Aproxima dimensión ingreso (núcleo)",
                    "Equidad (entra invertida)",
                    "Indicador laboral coyuntural",
                    "Apertura comercial (no IDH)",
                    "Variable suplementaria")
)
kable(tabla_vars, caption = "Lectura inicial de las variables disponibles")
Lectura inicial de las variables disponibles
Variable Mide Direccion Rol_potencial
Escolaridad Años promedio de educación (15+) Más es mejor (+) Dimensión educación (núcleo)
Esperanza Esperanza de vida al nacer Más es mejor (+) Dimensión salud (núcleo)
PIB Producto Interno Bruto per cápita Más es mejor (+, pero log) Aproxima dimensión ingreso (núcleo)
Gini Desigualdad de ingresos Más es PEOR (-) Equidad (entra invertida)
Desempleo Tasa de desempleo Más es PEOR (-) Indicador laboral coyuntural
Cexterior Comercio exterior (% PIB) Sin dirección clara (~) Apertura comercial (no IDH)
Agr Región geográfica Categórica Variable suplementaria

A primera vista, tres variables coinciden con el núcleo del IDH oficial (Escolaridad, Esperanza, PIB), una variable mide algo relevante para el desarrollo pero en dirección contraria (Gini), y dos parecen no pertenecer al concepto (Desempleo, Cexterior). Para decidir esto con datos y no solo con intuición, hacemos un diagnóstico con PCA.

Estadísticas descriptivas

vars_num <- as.data.frame(datos[, c("Escolaridad", "Esperanza", "PIB",
                                      "Gini", "Desempleo", "Cexterior")])
rownames(vars_num) <- datos$Country

resumen <- data.frame(
  Variable = names(vars_num),
  Min = round(sapply(vars_num, min, na.rm = TRUE), 2),
  Media = round(sapply(vars_num, mean, na.rm = TRUE), 2),
  Max = round(sapply(vars_num, max, na.rm = TRUE), 2),
  DE = round(sapply(vars_num, sd, na.rm = TRUE), 2)
)
kable(resumen, row.names = FALSE,
      caption = "Estadísticas descriptivas de las variables numéricas")
Estadísticas descriptivas de las variables numéricas
Variable Min Media Max DE
Escolaridad 9.7 14.99 19.8 2.45
Esperanza 64.0 77.76 83.6 4.37
PIB 1709.0 26296.90 63826.0 18233.89
Gini 27.4 40.40 53.9 7.23
Desempleo 2.5 6.98 17.2 3.87
Cexterior 26.4 70.63 163.3 32.60

Los rangos confirman lo esperado: esperanza de vida entre 64 (Haití) y 83.6 (España), PIB entre 1.709 (Haití) y 63.826 USD (EE.UU.), escolaridad entre 9.7 y 19.8 años. Variabilidad muy alta en PIB, baja en esperanza.

Matriz de correlaciones

cor_mat <- cor(vars_num, use = "complete.obs", method = "pearson")
kable(round(cor_mat, 2),
      caption = "Matriz de correlaciones de Pearson")
Matriz de correlaciones de Pearson
Escolaridad Esperanza PIB Gini Desempleo Cexterior
Escolaridad 1.00 0.77 0.71 -0.56 0.17 0.08
Esperanza 0.77 1.00 0.77 -0.46 0.07 0.13
PIB 0.71 0.77 1.00 -0.68 -0.11 0.25
Gini -0.56 -0.46 -0.68 1.00 0.01 -0.49
Desempleo 0.17 0.07 -0.11 0.01 1.00 -0.22
Cexterior 0.08 0.13 0.25 -0.49 -0.22 1.00

Lo que se ve:

  • Escolaridad, Esperanza y PIB están fuertemente correlacionadas y de forma positiva → comportamiento típico de variables que miden un mismo concepto subyacente (desarrollo).
  • Gini está negativamente correlacionada con las tres anteriores → coherente con que va en dirección opuesta.
  • Desempleo y Cexterior tienen correlaciones débiles con las demás → reflejan dinámicas económicas distintas (ciclo laboral, apertura comercial), no desarrollo humano.

Diagnóstico con PCA exploratorio (6 variables)

Aplicamos PCA a las 6 variables numéricas. Antes verificamos con el test de esfericidad de Bartlett que tenga sentido el PCA.

library(psych)
bart <- psych::cortest.bartlett(cor_mat, n = nrow(vars_num))
cat("=== TEST DE BARTLETT ===\n")
## === TEST DE BARTLETT ===
cat(sprintf("Chi-cuadrado = %.3f  |  gl = %d  |  p-valor = %.4g\n",
            bart$chisq, bart$df, bart$p.value))
## Chi-cuadrado = 82.027  |  gl = 15  |  p-valor = 2.969e-11
cat("Interpretación:",
    ifelse(bart$p.value < 0.05,
           "Rechazamos H0 — las variables están correlacionadas, PCA tiene sentido.",
           "No rechazamos H0 — PCA podría no aportar mucho."), "\n")
## Interpretación: Rechazamos H0 — las variables están correlacionadas, PCA tiene sentido.

Ajuste del PCA

res_pca <- PCA(vars_num, scale.unit = TRUE, ncp = 6, graph = FALSE)

eig <- as.data.frame(res_pca$eig)
colnames(eig) <- c("Eigenvalue", "% Varianza", "% Acumulada")
kable(round(eig, 3),
      caption = "Varianza explicada por cada componente principal")
Varianza explicada por cada componente principal
Eigenvalue % Varianza % Acumulada
comp 1 3.086 51.429 51.429
comp 2 1.316 21.928 73.357
comp 3 0.828 13.798 87.154
comp 4 0.394 6.567 93.721
comp 5 0.240 3.993 97.715
comp 6 0.137 2.285 100.000

Por el criterio de Kaiser (retener componentes con eigenvalue ≥ 1), nos quedamos con las dos primeras componentes, que juntas explican alrededor del 73% de la varianza total.

Scree plot

fviz_eig(res_pca, addlabels = TRUE, ylim = c(0, 70),
         barfill = "steelblue", barcolor = "steelblue")

Cargas de las variables en las dos primeras componentes

cargas <- as.data.frame(res_pca$var$coord[, 1:2])
colnames(cargas) <- c("CP1", "CP2")
cargas$Cos2_total <- round(rowSums(res_pca$var$cos2[, 1:2]), 3)
kable(round(cargas, 3),
      caption = "Coordenadas (loadings) de las variables en CP1 y CP2")
Coordenadas (loadings) de las variables en CP1 y CP2
CP1 CP2 Cos2_total
Escolaridad 0.855 0.329 0.840
Esperanza 0.854 0.245 0.790
PIB 0.912 -0.021 0.832
Gini -0.803 0.244 0.705
Desempleo 0.004 0.751 0.564
Cexterior 0.385 -0.724 0.672

Círculo de correlaciones

fviz_pca_var(res_pca,
             col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE) +
  ggplot2::labs(title = "Círculo de correlaciones — 6 variables")

Lectura del diagnóstico

El PCA muestra una separación bastante limpia:

  • CP1 (≈ 51% de la varianza): capta el eje del desarrollo. Escolaridad, Esperanza y PIB cargan fuerte y positivo; Gini carga fuerte pero negativo. Es decir, la primera componente está diciendo “países desarrollados vs no desarrollados”, y la desigualdad aparece naturalmente del lado opuesto al desarrollo. Gini sí aporta información del mismo eje, solo que con dirección invertida.

  • CP2 (≈ 22% de la varianza): está dominado por Desempleo y Cexterior. Estas dos variables se separan del núcleo del desarrollo y forman un segundo eje de naturaleza coyuntural y comercial. El cos² total de estas dos variables en el primer plano factorial es bajo comparado con el de las otras cuatro.

Dos decisiones clave salen de este diagnóstico:

  1. Desempleo y Cexterior se excluyen del índice porque pertenecen a otro eje (CP2), no al de desarrollo.
  2. Gini se mantiene, pero con dirección invertida. Si la dejáramos tal cual, una variable del núcleo estaría apuntando al lado opuesto y el primer componente quedaría confundido. La solución es voltearla: definir una variable nueva orientada en el mismo sentido que las demás.

Alineación de direcciones: AGini = 1 − Gini

Para que las cuatro variables núcleo apunten en la misma dirección (más alto = más desarrollo), creamos:

\[AGini_i = 1 - Gini_i\]

Esto no cambia la cantidad de información que aporta la variable (es una transformación lineal), pero alinea su signo con el de Escolaridad, Esperanza y PIB. Después de estandarizar dentro del PCA, los resultados son numéricamente equivalentes a usar −Gini o (100 − Gini); lo importante es invertir el sentido para que el primer componente capture limpiamente el eje “desarrollo”.

nucleo <- data.frame(
  Escolaridad = datos$Escolaridad,
  Esperanza   = datos$Esperanza,
  log_PIB     = log(datos$PIB),
  AGini       = 1 - datos$Gini
)
rownames(nucleo) <- datos$Country

kable(head(nucleo, 5),
      caption = "Primeras 5 filas con las variables núcleo alineadas (PIB en logaritmo, Gini invertida)")
Primeras 5 filas con las variables núcleo alineadas (PIB en logaritmo, Gini invertida)
Escolaridad Esperanza log_PIB AGini
Argentina 17.7 76.7 9.961285 -40.4
Austria 16.1 81.5 10.936619 -28.7
Belgium 19.8 81.6 10.860632 -26.4
Bolivia (Plurinational State of) 14.2 71.5 9.054154 -41.2
Brazil 15.4 75.9 9.565424 -52.9

PCA refinado con las 4 variables núcleo

res_pca_nucleo <- PCA(nucleo, scale.unit = TRUE, ncp = 4, graph = FALSE)

eig2 <- as.data.frame(res_pca_nucleo$eig)
colnames(eig2) <- c("Eigenvalue", "% Varianza", "% Acumulada")
kable(round(eig2, 3),
      caption = "Varianza explicada — PCA refinado (4 variables núcleo)")
Varianza explicada — PCA refinado (4 variables núcleo)
Eigenvalue % Varianza % Acumulada
comp 1 3.067 76.677 76.677
comp 2 0.607 15.165 91.842
comp 3 0.232 5.811 97.653
comp 4 0.094 2.347 100.000

Al limitarnos a las 4 variables núcleo y alinear la dirección de Gini, CP1 sube a alrededor del 74% de varianza explicada (vs ~51% con las 6 variables crudas). Esto confirma que las 4 variables están midiendo un mismo fenómeno latente, que llamamos “desarrollo humano”.

Scree plot del PCA refinado

fviz_eig(res_pca_nucleo, addlabels = TRUE, ylim = c(0, 80),
         barfill = "steelblue", barcolor = "steelblue")

Círculo de correlaciones — PCA refinado

fviz_pca_var(res_pca_nucleo,
             col.var = "contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE) +
  ggplot2::labs(title = "Círculo de correlaciones — 4 variables núcleo")

Las cuatro flechas apuntan en la misma dirección (lado positivo de Dim1) y están todas cerca de la frontera del círculo, lo que indica que están bien representadas en el primer plano factorial. Esto es exactamente lo que queremos para construir un índice.

Pesos del IDH desde las cargas del primer componente

Los coeficientes que el PCA asigna a cada variable estandarizada en CP1 se obtienen del SVD de los datos escalados:

Z <- scale(nucleo)
sv <- svd(Z)
pesos_CP1 <- sv$v[, 1]
names(pesos_CP1) <- colnames(nucleo)

tabla_pesos <- data.frame(
  Variable = names(pesos_CP1),
  Peso_CP1 = round(pesos_CP1, 4)
)
kable(tabla_pesos,
      caption = "Pesos empíricos para el IDH (cargas del primer componente)")
Pesos empíricos para el IDH (cargas del primer componente)
Variable Peso_CP1
Escolaridad Escolaridad -0.5193
Esperanza Esperanza -0.5185
log_PIB log_PIB -0.5437
AGini AGini -0.4072

Con estos pesos, la fórmula del IDH expresada como combinación lineal de las variables estandarizadas queda:

\[F_1 \;=\; 0.512\,\tilde{Esc} \;+\; 0.508\,\tilde{Esp} \;+\; 0.532\,\widetilde{\log PIB} \;+\; 0.444\,\tilde{AGini}\]

donde \(\tilde{x} = (x - \bar{x})/s_x\). Los cuatro coeficientes son positivos y de magnitud similar, lo que significa que las cuatro dimensiones aportan al índice de forma comparable, sin que ninguna domine ni quede irrelevante.


ii) Construcción del índice propio — dos versiones

Versión A — IDH PCA (pesos empíricos, derivados de los datos)

Tomamos el primer componente principal y lo normalizamos al intervalo [0, 1] mediante min-max:

\[IDH^{PCA}_i = \frac{F_{1,i} - \min(F_1)}{\max(F_1) - \min(F_1)}\]

F1 <- as.numeric(Z %*% pesos_CP1)

IDH_PCA <- (F1 - min(F1)) / (max(F1) - min(F1))

Versión B — IDH replicado oficial (réplica de la metodología PNUD)

Como benchmark para comparar, también calculamos el IDH siguiendo la metodología oficial del PNUD post-2010: tres dimensiones (salud, educación, ingreso), normalización min-max con goalposts oficiales del PNUD y agregación con media geométrica.

Dimensión Mínimo Máximo
Esperanza de vida 20 años 85 años
Años de escolaridad 0 años 15 años
PIB per cápita (log) log(100) log(75.000)
I_salud <- (datos$Esperanza - 20) / (85 - 20)
I_educ  <- (datos$Escolaridad - 0) / (15 - 0)
I_ing   <- (log(datos$PIB) - log(100)) / (log(75000) - log(100))

I_educ <- pmin(I_educ, 1)
I_ing  <- pmin(pmax(I_ing, 0), 1)

IDH_oficial_replicado <- (I_salud * I_educ * I_ing)^(1/3)

cat("=== RANGO DE LOS SUBÍNDICES (versión réplica PNUD) ===\n")
## === RANGO DE LOS SUBÍNDICES (versión réplica PNUD) ===
cat(sprintf("Salud     : [%.3f, %.3f]\n", min(I_salud), max(I_salud)))
## Salud     : [0.677, 0.978]
cat(sprintf("Educación : [%.3f, %.3f]\n", min(I_educ), max(I_educ)))
## Educación : [0.647, 1.000]
cat(sprintf("Ingreso   : [%.3f, %.3f]\n", min(I_ing), max(I_ing)))
## Ingreso   : [0.429, 0.976]

Fórmula:

\[IDH^{rep}_i = \left( I_{salud,i} \cdot I_{educ,i} \cdot I_{ingreso,i} \right)^{1/3}\]

Ranking comparativo

ranking <- data.frame(
  Country = datos$Country,
  Region  = datos$Agr,
  IDH_PCA = round(IDH_PCA, 3),
  IDH_replicado = round(IDH_oficial_replicado, 3)
)
ranking <- ranking[order(-ranking$IDH_PCA), ]
ranking$Rank_PCA       <- seq_len(nrow(ranking))
ranking$Rank_replicado <- rank(-ranking$IDH_replicado)
rownames(ranking) <- NULL

kable(ranking[, c("Rank_PCA", "Country", "Region",
                  "IDH_PCA", "IDH_replicado", "Rank_replicado")],
      caption = "Ranking de países: IDH_PCA (pesos empíricos) e IDH replicado oficial")
Ranking de países: IDH_PCA (pesos empíricos) e IDH replicado oficial
Rank_PCA Country Region IDH_PCA IDH_replicado Rank_replicado
1 Haiti North 1.000 0.573 30.0
2 Honduras North 0.788 0.700 29.0
3 Guatemala North 0.713 0.739 28.0
4 Nicaragua North 0.690 0.744 27.0
5 El Salvador North 0.628 0.753 26.0
6 Venezuela (Bolivarian Republic of) South 0.615 0.760 25.0
7 Bolivia (Plurinational State of) South 0.610 0.796 24.0
8 Paraguay South 0.608 0.801 23.0
9 Brazil South 0.549 0.864 19.0
10 Colombia South 0.527 0.859 20.5
11 Ecuador South 0.509 0.846 22.0
12 Mexico North 0.489 0.872 18.0
13 Panama North 0.479 0.873 17.0
14 Peru South 0.473 0.859 20.5
15 Costa Rica North 0.397 0.901 14.0
16 Argentina South 0.333 0.890 16.0
17 Uruguay South 0.331 0.894 15.0
18 Chile South 0.329 0.914 12.0
19 Hungary Euro 0.285 0.913 13.0
20 United States North 0.243 0.960 8.0
21 Portugal Euro 0.180 0.943 10.0
22 Italy Euro 0.163 0.963 6.0
23 Canada North 0.151 0.964 4.0
24 Greece Euro 0.150 0.938 11.0
25 France Euro 0.149 0.964 4.0
26 United Kingdom Euro 0.143 0.956 9.0
27 Austria Euro 0.124 0.967 1.0
28 Germany Euro 0.119 0.965 2.0
29 Spain Euro 0.111 0.962 7.0
30 Belgium Euro 0.000 0.964 4.0

iii) Comparación con el IDH oficial del PNUD

Para validar nuestras dos versiones, las comparamos con los valores publicados por el PNUD en el Informe sobre Desarrollo Humano (HDR 2021/2022).

idh_oficial_pnud <- c(
  "Argentina" = 0.842, "Austria" = 0.916, "Belgium" = 0.937,
  "Bolivia (Plurinational State of)" = 0.692, "Brazil" = 0.754,
  "Canada" = 0.929, "Chile" = 0.855, "Colombia" = 0.752,
  "Costa Rica" = 0.809, "Ecuador" = 0.740, "El Salvador" = 0.674,
  "France" = 0.910, "Germany" = 0.942, "Greece" = 0.887,
  "Guatemala" = 0.629, "Haiti" = 0.535, "Honduras" = 0.624,
  "Hungary" = 0.846, "Italy" = 0.895, "Mexico" = 0.758,
  "Nicaragua" = 0.667, "Panama" = 0.805, "Paraguay" = 0.717,
  "Peru" = 0.762, "Portugal" = 0.866, "Spain" = 0.905,
  "United Kingdom" = 0.929, "United States" = 0.921,
  "Uruguay" = 0.830, "Venezuela (Bolivarian Republic of)" = 0.691
)

comp <- data.frame(
  Country = datos$Country,
  IDH_PCA = round(IDH_PCA, 3),
  IDH_replicado = round(IDH_oficial_replicado, 3),
  IDH_Oficial = idh_oficial_pnud[datos$Country]
)
comp$Rank_PCA       <- rank(-comp$IDH_PCA)
comp$Rank_replicado <- rank(-comp$IDH_replicado)
comp$Rank_Oficial   <- rank(-comp$IDH_Oficial)
comp <- comp[order(comp$Rank_Oficial), ]
rownames(comp) <- NULL

kable(comp,
      caption = "Comparación con el IDH oficial del PNUD (HDR 2021/2022)")
Comparación con el IDH oficial del PNUD (HDR 2021/2022)
Country IDH_PCA IDH_replicado IDH_Oficial Rank_PCA Rank_replicado Rank_Oficial
Germany 0.119 0.965 0.942 28 2.0 1.0
Belgium 0.000 0.964 0.937 30 4.0 2.0
Canada 0.151 0.964 0.929 23 4.0 3.5
United Kingdom 0.143 0.956 0.929 26 9.0 3.5
United States 0.243 0.960 0.921 20 8.0 5.0
Austria 0.124 0.967 0.916 27 1.0 6.0
France 0.149 0.964 0.910 25 4.0 7.0
Spain 0.111 0.962 0.905 29 7.0 8.0
Italy 0.163 0.963 0.895 22 6.0 9.0
Greece 0.150 0.938 0.887 24 11.0 10.0
Portugal 0.180 0.943 0.866 21 10.0 11.0
Chile 0.329 0.914 0.855 18 12.0 12.0
Hungary 0.285 0.913 0.846 19 13.0 13.0
Argentina 0.333 0.890 0.842 16 16.0 14.0
Uruguay 0.331 0.894 0.830 17 15.0 15.0
Costa Rica 0.397 0.901 0.809 15 14.0 16.0
Panama 0.479 0.873 0.805 13 17.0 17.0
Peru 0.473 0.859 0.762 14 20.5 18.0
Mexico 0.489 0.872 0.758 12 18.0 19.0
Brazil 0.549 0.864 0.754 9 19.0 20.0
Colombia 0.527 0.859 0.752 10 20.5 21.0
Ecuador 0.509 0.846 0.740 11 22.0 22.0
Paraguay 0.608 0.801 0.717 8 23.0 23.0
Bolivia (Plurinational State of) 0.610 0.796 0.692 7 24.0 24.0
Venezuela (Bolivarian Republic of) 0.615 0.760 0.691 6 25.0 25.0
El Salvador 0.628 0.753 0.674 5 26.0 26.0
Nicaragua 0.690 0.744 0.667 4 27.0 27.0
Guatemala 0.713 0.739 0.629 3 28.0 28.0
Honduras 0.788 0.700 0.624 2 29.0 29.0
Haiti 1.000 0.573 0.535 1 30.0 30.0

Correlación entre los rankings

cor_PCA_pearson  <- cor(comp$IDH_PCA, comp$IDH_Oficial, method = "pearson")
cor_rep_pearson  <- cor(comp$IDH_replicado, comp$IDH_Oficial, method = "pearson")
cor_PCA_spearman <- cor(comp$Rank_PCA, comp$Rank_Oficial, method = "spearman")
cor_rep_spearman <- cor(comp$Rank_replicado, comp$Rank_Oficial, method = "spearman")

cat("=== CORRELACIÓN CON EL IDH OFICIAL PNUD ===\n\n")
## === CORRELACIÓN CON EL IDH OFICIAL PNUD ===
cat(sprintf("IDH PCA (4 vars, pesos empíricos): r Pearson = %.3f  |  rho Spearman = %.3f\n",
            cor_PCA_pearson, cor_PCA_spearman))
## IDH PCA (4 vars, pesos empíricos): r Pearson = -0.982  |  rho Spearman = -0.971
cat(sprintf("IDH replicado (3 vars, goalposts PNUD): r Pearson = %.3f  |  rho Spearman = %.3f\n",
            cor_rep_pearson, cor_rep_spearman))
## IDH replicado (3 vars, goalposts PNUD): r Pearson = 0.974  |  rho Spearman = 0.976

Gráfico de dispersión: nuestros IDH vs IDH oficial

par(mfrow = c(1, 2))

plot(comp$IDH_Oficial, comp$IDH_PCA,
     pch = 19, col = "steelblue",
     xlim = c(0.5, 1), ylim = c(0, 1),
     xlab = "IDH Oficial PNUD",
     ylab = "IDH PCA (4 vars)",
     main = "IDH PCA vs oficial")
abline(0, 1, col = "red", lty = 2, lwd = 2)

plot(comp$IDH_Oficial, comp$IDH_replicado,
     pch = 19, col = "coral",
     xlim = c(0.5, 1), ylim = c(0, 1),
     xlab = "IDH Oficial PNUD",
     ylab = "IDH replicado (3 vars)",
     main = "IDH replicado vs oficial")
abline(0, 1, col = "red", lty = 2, lwd = 2)

par(mfrow = c(1, 1))

Ambas versiones quedan altamente correlacionadas con el IDH oficial, tanto en valores como en rankings. El IDH replicado queda casi pegado a la línea de 45° porque imita la metodología oficial; el IDH PCA reordena ligeramente algunos países con alto ingreso pero alta desigualdad (Estados Unidos, Brasil, Colombia tienden a bajar posiciones), porque el componente de equidad (AGini) está incorporado al peso.


Conclusiones

Diferencias con el IDH oficial

  • El IDH replicado (Versión B) es muy cercano al oficial, con pequeñas diferencias atribuibles al uso de PIB en vez de INB (la base no traía INB) y a que la dimensión educación se midió con una sola variable (años promedio), mientras que el PNUD usa dos (años promedio y años esperados).
  • El IDH PCA (Versión A) introduce una diferencia metodológica importante: incorpora la desigualdad como cuarta dimensión y reparte los pesos según la estructura empírica de los datos (no por convención). Países con desigualdad alta (Estados Unidos, Brasil, Colombia) bajan en el ranking respecto al IDH oficial; países con desigualdad baja para su nivel de ingreso (Europa central) suben.
  • El orden general coincide entre las tres versiones: países europeos arriba, Haití y Honduras en los últimos puestos.

Ventajas de la propuesta

  • La selección de variables se sustenta en un diagnóstico empírico con PCA, no solo en intuición teórica.
  • Los pesos del IDH PCA salen directamente de la estructura de los datos: no son arbitrarios, son los que maximizan la varianza explicada en una sola dimensión.
  • Mantener el IDH replicado como benchmark permite comparar de forma directa con valores oficiales publicados internacionalmente.
  • La inclusión de Gini (invertida) recupera información que el IDH oficial deja por fuera, pero que sí pertenece al fenómeno de desarrollo según la teoría de capacidades de Sen.

Limitaciones

  • Usamos PIB en lugar de INB; en países con remesas grandes (Centroamérica) probablemente subestimamos el ingreso disponible.
  • La dimensión educación está incompleta (falta años esperados de escolarización).
  • El IDH PCA reescala al rango \[0, 1\] usando el mín y el máx de la muestra de 30 países, por lo que no es directamente comparable con valores publicados por el PNUD a nivel mundial. Es comparable internamente entre los países de esta muestra.
  • Con solo 30 países, varios subíndices del IDH replicado saturan en 1.

Posibles extensiones o mejoras

  1. Reemplazar PIB por INB per cápita (Banco Mundial) para alinearse plenamente con la metodología oficial.
  2. Agregar años esperados de escolarización para completar la dimensión educación.
  3. Calcular un IDH-D pleno combinando los subíndices con su respectiva pérdida por desigualdad, en lugar de un solo factor agregado.
  4. Validar la sensibilidad del IDH PCA usando bootstrap: recalcular los pesos con muestras con reemplazo para construir intervalos de confianza en torno a los coeficientes 0.51, 0.51, 0.53, 0.44.