Librerías

# CARGAR LIBRERiAS NECESARIAS
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ineq)

Coeficiente de Gini

calcular_gini <- function(ingresos) {
  return(ineq::Gini(ingresos))
}

Desviación estándar de logaritmos

calcular_sd_log <- function(ingresos) {
  # Agregar 1 para evitar problemas con log(0) y luego ajustar
  ingresos_ajustados <- ingresos + 1
  return(sd(log(ingresos_ajustados)))
}

Ratio P90/10

calcular_ratio_p90_p10 <- function(ingresos) {
  p90 <- quantile(ingresos, 0.9)
  p10 <- quantile(ingresos, 0.1)
  return(as.numeric(p90 / p10))
}

Índice de Theil

calcular_theil <- function(ingresos) {
  n <- length(ingresos)
  ingreso_promedio <- mean(ingresos)
  # F?rmula: Theil = (1/n) * ?? (x_i/??) * log(x_i/??)
  theil <- (1/n) * sum((ingresos/ingreso_promedio) * log(ingresos/ingreso_promedio))
  return(theil)
}

Índice de Atkinson con diferentes epsilons

calcular_atkinson <- function(ingresos, epsilon = 0.5) {
  n <- length(ingresos)
  ingreso_promedio <- mean(ingresos)
  
  if (epsilon == 1) {
    # Caso especial cuando epsilon = 1
    atkinson <- 1 - (prod(ingresos)^(1/n)) / ingreso_promedio
  } else {
    # Caso general para epsilon ??? 1
    atkinson <- 1 - (mean((ingresos/ingreso_promedio)^(1-epsilon))^(1/(1-epsilon)))
  }
  return(atkinson)
}

Vector 1: Distribución base desigual

ingresos_base <- c(10, 15, 20, 25, 30, 35, 40, 60, 100, 200)

Vector 2: misma distibución pero con incremento constante

# Esto deber?a mantener la desigualdad relativa (axioma de independencia de escala)
ingresos_incremento <- ingresos_base + 50

Vector 3: Transferencia del percentil 90 más pobre

# Vamos a hacer una transferencia progresiva: del m?s rico al m?s pobre dentro del 90%
ingresos_transferencia <- c(10, 15, 20, 25, 35, 35, 35, 70, 90, 200)

Resultados

calcular_todas_medidas <- function(ingresos, nombre) {
  data.frame(
    Poblacion = nombre,
    Gini = round(calcular_gini(ingresos), 4),
    SD_Log = round(calcular_sd_log(ingresos), 4),
    Ratio_P90_P10 = round(calcular_ratio_p90_p10(ingresos), 2),
    Theil = round(calcular_theil(ingresos), 4),
    Atkinson_05 = round(calcular_atkinson(ingresos, 0.5), 4),
    Atkinson_10 = round(calcular_atkinson(ingresos, 1.0), 4),
    Atkinson_15 = round(calcular_atkinson(ingresos, 1.5), 4),
    Media = round(mean(ingresos), 2),
    Mediana = round(median(ingresos), 2)
  )
}

Medias

resultados <- rbind(
  calcular_todas_medidas(ingresos_base, "Base (desigual)"),
  calcular_todas_medidas(ingresos_incremento, "Con incremento constante"),
  calcular_todas_medidas(ingresos_transferencia, "Con transferencia progresiva")
)

2do escenario: Transferencia universal

Vector 1: Distribución base desigual + transferencia universal

ingresos_base_cambio_2 <- c(12, 17, 22, 27, 32, 37, 42, 62, 102, 202)

3er escenario: Transferencia de tipo Pigou Dalton, del más rico al más pobre

Vector 1: Distribución base desigual + transferencia de 5 pesos del más rico al más pobre

ingresos_base_cambio_3 <- c(15, 15, 20, 25, 30, 35, 40, 60, 100, 195)

4to escenario: Reordenar el vector

Vector 1: Distribución base desigual + aleatoriedad

ingresos_base_cambio_4 <- c(200, 25, 60, 10, 100, 35, 15, 40, 30, 20)

Resultados

calcular_todas_medidas <- function(ingresos, nombre) {
  data.frame(
    Poblacion = nombre,
    Gini = round(calcular_gini(ingresos), 4),
    SD_Log = round(calcular_sd_log(ingresos), 4),
    Ratio_P90_P10 = round(calcular_ratio_p90_p10(ingresos), 2),
    Theil = round(calcular_theil(ingresos), 4),
    Atkinson_05 = round(calcular_atkinson(ingresos, 0.5), 4),
    Atkinson_10 = round(calcular_atkinson(ingresos, 1.0), 4),
    Atkinson_15 = round(calcular_atkinson(ingresos, 1.5), 4),
    Media = round(mean(ingresos), 2),
    Mediana = round(median(ingresos), 2)
  )
}

Medias

resultados <- rbind(
  calcular_todas_medidas(ingresos_base, "Base (desigual)"),
  calcular_todas_medidas(ingresos_base_cambio_1, "Aumento pob"),
  calcular_todas_medidas(ingresos_base_cambio_2, "T universal"),
  calcular_todas_medidas(ingresos_base_cambio_3, "T Pigou-Dalton"),
  calcular_todas_medidas(ingresos_base_cambio_4, "Reordenar")
)