El objetivo general consiste en estimar la distribución del ingreso en México utilizando la encuesta Nacional de Ingreso y Gasto de los Hogares (ENIGH), la cuál nos propociona el ingreso corriente de los hogares. Buscamos la compatibilidad de la ENIGH con dos fuentes de información adicionales: el Sistema de Cuentas Nacionales de México (SCNM) y el Servicio de Administración Tributaria (SAT).
El procedimiento se basa en realizar una modelación paramétrica a la variable ingreso corriente de la ENIGH suponiendo que es una variable aleatoria con una forma funcional intrínseca, denotada f(y|θ). Los parametros de esta función que denotamos por θ, resumirán la información clave de la muestra, permitiendonos reconstruir la distribución del ingreso.
La propuesta no es solo ajustar los datos que nos da la encuesta, sino en integrar y conciliar la información complementaria de dichas fuentes por medio de un ajuste con restrucciones.
Se explica, las fuentes de información utilizadas, en enfoque teorico que guia esta metodología y la implementación en R y los resultados de un ejercicio numérico.
Las fuentes de información utilizadas y los detalles importantes que hay que saber de ellas
La encuesta es biaunal, por lo tanto, el proceso de ajuste de la distribución se ha implementado cada dos años a partir de 2004, abarcando tanto el ámbito nacional como el de entidad federativa.
Para la estimación a nivel entidad se toma en cuenta la fuente: Módulo de Condiciones Socioeconómicas (MSC), dada su capacitad de desagregación.
Estas encuestas presentan su información trimestralmente, por lo que consideramos los resultados de cada ejercicio que hacemos ya sea a nivel nacional o por entidad, también sean trimestralizados.
Se consideró excluir del análisis los hogares que registran un ingreso corriente trimestral igual o inferior a $2000 pesos. Esta decisión implica un ajuste en los factores de expansión para asegurar que la población total representada se mantenga constante.La reasignación del peso de los hogares eliminados se llevó a cabo de manera uniforme entre los hogares restantes, distribuyendo su representatividad proporcionalmente.
El siguiente código en R demuestra cómo descargar un archivo CSV directamente desde el sitio web del INEGI. Utilizaremos los datos de 2012 como ejemplo práctico.
url.zip<-"https://www.inegi.org.mx/contenidos/programas/enigh/tradicional/2012/microdatos/Tra_Concentrado_2012_concil_2010_csv.zip"
## para el caso de archivos más recientes por ejemplo, 2022 usar la siguiente ruta ## url.zip<-"https://www.inegi.org.mx/contenidos/programas/enigh/nc/2022/microdatos/enigh2022_ns_concentradohogar_csv.zip"
nombre_zip<-"Tra_Concentrado_2012_concil_2010_csv.zip"
# para el caso 2022 el nombre del archivo es concentradohogar.csv
# crea un directorio "enigh_2012_datos" en la ruta actual de trabajo para que se #pueda guardar los datos.
dir_unzip <- "enigh_2012_datos"
if (!dir.exists(dir_unzip)) {
dir.create(dir_unzip)
}
#descarga y descomprime el archivo zip
download.file(url.zip, destfile = nombre_zip, mode = "wb")
unzip(nombre_zip, exdir = dir_unzip)
#guarda la ruta donde se encuentra el archivo para despues leerlo
ruta_csv <- file.path(dir_unzip, "tra_concentrado_2012_concil_2010.csv")
# caso 2022 concentradohogar.csv
#los datos con los que se trabajaran
data12<- read.csv(ruta_csv, encoding = "Latin-1", na.strings = c("", " "))
names(data12) # todas las variables que contiene el archivo
file.remove(nombre_zip)
#los datos con los que se trabajaran
dir_unzip <- "enigh_2012_datos"
ruta_csv <- file.path(dir_unzip, "tra_concentrado_2012_concil_2010.csv")
data12<- read.csv(ruta_csv, encoding = "Latin-1", na.strings = c("", " "))
names(data12) # todas las variables que contiene el archivo
## [1] "folioviv" "foliohog" "ubica_geo" "ageb" "tam_loc"
## [6] "est_socio" "est_dis" "upm" "factor_hog" "clase_hog"
## [11] "sexo_jefe" "edad_jefe" "educa_jefe" "tot_integ" "hombres"
## [16] "mujeres" "mayores" "menores" "p12_64" "p65mas"
## [21] "ocupados" "percep_ing" "perc_ocupa" "ing_total" "ing_cor"
## [26] "ing_mon" "trabajo" "sueldos" "horas_extr" "comisiones"
## [31] "otra_rem" "negocio" "noagrop" "industria" "comercio"
## [36] "servicios" "agrope" "agricolas" "pecuarios" "reproducc"
## [41] "pesca" "otros_trab" "rentas" "utilidad" "arrenda"
## [46] "transfer" "jubilacion" "becas" "donativos" "remesas"
## [51] "bene_gob" "otros_ing" "gasto_nom" "autoconsum" "remu_espec"
## [56] "transf_esp" "transf_hog" "trans_inst" "estim_alqu" "percep_tot"
## [61] "percep_mon" "retiro_inv" "prestamos" "otras_perc" "erogac_nom"
## [66] "gasto_tot" "gasto_cor" "gasto_mon" "alimentos" "ali_dentro"
## [71] "cereales" "carnes" "pescado" "leche" "huevo"
## [76] "aceites" "tuberculo" "verduras" "frutas" "azucar"
## [81] "cafe" "especias" "otros_alim" "bebidas" "ali_fuera"
## [86] "tabaco" "vesti_calz" "vestido" "calzado" "vivienda"
## [91] "alquiler" "pred_cons" "agua" "energia" "limpieza"
## [96] "cuidados" "utensilios" "enseres" "salud" "atenc_ambu"
## [101] "hospital" "medicinas" "transporte" "publico" "foraneo"
## [106] "adqui_vehi" "mantenim" "refaccion" "combus" "comunica"
## [111] "educa_espa" "educacion" "esparci" "paq_turist" "personales"
## [116] "cuida_pers" "acces_pers" "otros_gas" "transf_gas" "erogac_tot"
## [121] "erogac_mon" "cuota_viv" "mater_serv" "material" "servicio"
## [126] "deposito" "prest_terc" "pago_tarje" "deudas" "balance"
## [131] "otras_erog" "smg"
#file.remove(nombre_zip)
El siguiente código es para obtener el vector de valores de ingresos y factores de expansión
muestra<-data12$ing_cor
fac<-data12$factor # aveces el factor de expansión tiene el nombre "factor_hog"
total_ingreso <-sum(muestra*fac) #
tot_hog<-sum(fac)
print(paste("total del ingreso de la muestra: ",total_ingreso,sep=""))
## [1] "total del ingreso de la muestra: 1203202597623.71"
print(paste("total de hogares en la población: ",tot_hog,sep=""))
## [1] "total de hogares en la población: 31559379"
Se quitan los valores menores a 2000 y se redistribuye la población
w<-c()
w<-which(muestra<2000)
if(length(w)==0)
{muestra<-muestra} else
{muestra<-muestra[-w]
fac<-fac[-w]
}
fquitados<-tot_hog-sum(fac) ## re-austar los valores de expansión
coci<-fquitados/length(fac)
nfac<-(fac+coci)
fac<-nfac ## nuevos factores ajustados
El sistema de Cuentas Nacionales aporta distintos tipos de ingresos anuales en hogares. Constantemente actualizan sus valores debido algunos cambios necesarios ya sea de carácter metodológico o de cambios de años base, por ejemplo el cambio de base de 2003 a 2008 y el reciente cambio de 2008 a 2013. El ingreso que se usa en este proyecto es el numerado por B.7n Ingreso Disponible Ajustado Neto (IDAN), ya que este ingreso no incluye la depreciación de activos y sí contempla las transferencias en especie, ingreso reportado por ENIGH.
\[mean_{SCNM} = \frac{\frac{IDAN}{4}}{Thogares}\]
\[mean_{SCNM_{entidad}}= \frac{\frac{PP*IDAN}{4}}{Thogares_{entidad}}\]
Para obtener el promedio de cuentas nacionales
idan<- 11635413 # valor de IDAN del 2012
tot_cn<-idan *1000000 # se multiplica por 1 millón
ci<-c(tot_cn/4/tot_hog) # trimestralizado
print(paste("media de cuentas nacionales_2012= ",ci,sep=""))
## [1] "media de cuentas nacionales_2012= 92170.8012695687"
print(ci)
## [1] 92170.8
Los datos proporcionados por SAT son declaraciones por contribuyentes anualizados. Cada registro de los archivos están identificados de manera única por un número consecutivo RFC_ID. Se indican en la mayoría de los casos, su entidad de procedencia.
El archivo de datos usados para nuestros ajustes son las declaraciones didácticas donde se proporciona el total de ingresos acumulables denotado como i_dec_tiaonct1.
Nos interesa el ingreso declarado de los más ricos.
Como la información del contribuyente es anual, entonces el ingreso de los más ricos tendrá que ser dividido por 4 para obtener datos trimestralizados.
Para el caso del ajuste a nivel nacional para algún año de interés nos interesa: el promedio de ingresos declarado al SAT por el millonesimo percentil(.999999) que corresponde los 32 más ricos, y el ingreso del treintaidosavo más rico.
Para el caso de entidades la referencia es a partir de los 20 más ricos.
p<-0.999999
mean_Sat_anual<- 1624174001.00 # promedio del ingreso de los 32 más ricos anual 2012
mean_sat<-mean_Sat_anual/4 # trimestralizado 2012
qi<-177965502 # ingreso del 32 del top-32 más ricos ya trimestralizado
print(mean_sat)
## [1] 406043500
Se probaron varias funciones de densidad paramétricas para el ajuste de los datos de ingreso. Entre ellas Gamma Generalizada (GG) con 3 parámetros dada por:
\[f_{y}(y|\mu,\sigma, \nu)=\frac{|\nu|\theta^{\theta}z^{\theta}exp(-\theta z)}{\Gamma(\theta)y}\] Donde \[ z = (y / \mu)^{\nu}\]
y \[ \theta = 1 / \sigma^{2} \nu^{2}\].
La esperanza de Y es:
\[ E(Y,\mu,\sigma,\nu) = \mu\Gamma(\theta + \frac{1}{\nu})/[\theta^{1 / \nu} \Gamma(\theta)]\] El proceso se reduce a encontrar la estimación de los párametros de la función Gamma Generaliza por medio de log-verosimilitud sujeta a:
\[E(Y,\mu,\sigma,\nu)=mean_{SCNM}\]
\[ (\int_{q_{i}}^{Inf} yf(y)dy)/q = mean_{32másricos} \]
Donde \({\bf q}\) es la proporción de hogares que tienen ingresos igual o menor que \({\bf q_{i}}\).
LAs librerías en R necesarias para el ajuste
#install.packages("gamlss")
#install.packages("alabama")
library(gamlss)
library(alabama)
La siguiente función que llamamos fgamG es la de densidad Gama Generalizada (GG) con pesos que se ajusta en este análisis
fgamG<-function(x,m=muestra,w=fac) ## funcion de verosimilitud
{
fi<-c()
fi<- -1*w*dGG(m, x[1], x[2],x[3],log=TRUE)
sumaf<-sum(fi)
return(sumaf)
}
La función hin implementa las restricciones de desigualdad: \(\mu\),\(\sigma\) > 0
hin<-function(x)
{
h <- rep(NA, 2)
h[1]<-x[1]
h[2]<-x[2]
h
}
La función heq implementa las restricciones de igualdad:
# esta función cambia de acuerdo a la función de densidad de ajuste
heq<- function(x)
{
#print(x)
p=p
par<-x
t<-1/(x[2]^2*x[3]^2)
h <- rep(NA, 2)
inte<-c()
inte <-try(integrate(function(y) y*(dGG(y, mu=par[1],sigma=par[2],nu=par[3])), lower=qi, upper=1000000000000,stop.on.error = FALSE)$v,silent=TRUE)
if (is.character(inte))
inte<-1000
h[1]<-inte-prom
h[2]<-ci-(x[1]*gamma(t+(1/x[3]))/(t^(1/x[3])*gamma(t)))
h
# print(h)
}
El siguiente paso, es el de obtener una estimación preliminar de los parámetros de la función GG a través de la función gmag, posteriormente se utiliza la función constrOptim de la librería Alabama para que se finalice el proceso de estimación, el vector xGGsin es el que se obtiene como estimación final.
gammues<-gamlss(muestra~1, family=GG,weights=fac)
## GAMLSS-RS iteration 1: Global Deviance = 723264570
## GAMLSS-RS iteration 2: Global Deviance = 720775085
## GAMLSS-RS iteration 3: Global Deviance = 719896509
## GAMLSS-RS iteration 4: Global Deviance = 719606898
## GAMLSS-RS iteration 5: Global Deviance = 719511905
## GAMLSS-RS iteration 6: Global Deviance = 719480407
## GAMLSS-RS iteration 7: Global Deviance = 719469851
## GAMLSS-RS iteration 8: Global Deviance = 719466285
## GAMLSS-RS iteration 9: Global Deviance = 719465075
## GAMLSS-RS iteration 10: Global Deviance = 719464663
## GAMLSS-RS iteration 11: Global Deviance = 719464523
## GAMLSS-RS iteration 12: Global Deviance = 719464475
## GAMLSS-RS iteration 13: Global Deviance = 719464459
## GAMLSS-RS iteration 14: Global Deviance = 719464453
## GAMLSS-RS iteration 15: Global Deviance = 719464451
## GAMLSS-RS iteration 16: Global Deviance = 719464450
## GAMLSS-RS iteration 17: Global Deviance = 719464450
## GAMLSS-RS iteration 18: Global Deviance = 719464450
## GAMLSS-RS iteration 19: Global Deviance = 719464450
## GAMLSS-RS iteration 20: Global Deviance = 719464450
## Warning in RS(): Algorithm RS has not yet converged
gmag<-refit(gammues) # repetir el proceso en caso de no convergencia
## GAMLSS-RS iteration 21: Global Deviance = 719464450
## GAMLSS-RS iteration 22: Global Deviance = 719464450
## GAMLSS-RS iteration 23: Global Deviance = 719464450
mu<-fitted(gmag,"mu")[1]
sigma<-fitted(gmag,"sigma")[1]
nu<-fitted(gmag,"nu")[1]
theta<-c(mu=mu,sigma=sigma,nu=nu) # estimación inicial
# ajuste con alabama sin restricciones, notar que theta se usa como valor inicial # en el ajuste
gammues<-c()
x<-c()
gammues<-constrOptim.nl(par=theta, fn=fgamG, hin=hin)
## Min(hin): 0.7990935
## par: 24787.32 0.7990935 -0.2469241
## fval: 359732225
## Min(hin): 0.7990934
## par: 24787.32 0.7990934 -0.2469241
## fval: 359732225
## Min(hin): 0.7990934
## par: 24787.32 0.7990934 -0.2469241
## fval: 359732225
## Min(hin): 0.7990934
## par: 24787.32 0.7990934 -0.2469241
## fval: 359732225
xGGsin<-gammues$par
cat("vector estimado del parámetro de la función GG sin restricciones =\n")
## vector estimado del parámetro de la función GG sin restricciones =
print(xGGsin)
## mu.1 sigma.1 nu.1
## 24787.3206428 0.7990934 -0.2469241
Es importante tomar en cuenta que la calidad de las estimaciones depende significativamente de los valores iniciales que se proporcionen. Para asegurar que obtenemos la mejor solución posible, es necesario ejecutar el proceso de estimación con múltiples conjuntos de valores iniciales y, posteriormente, seleccionar aquella que maximice la verosimilitud.
Para obtener estadísticos de la función no restringida se tiene las siguientes instrucciones
x<-xGGsin
t<-1/(x[2]^2*x[3]^2)
ExGGsin<-(x[1]*gamma(t+(1/x[3])))/(t^(1/x[3])*gamma(t)) # Esperanza de GG no restringida
vGGsin<-gammues$value # valor de la verosimilitud
# quantiles
# vector probabilidades para quantiles
probs = c(0.1, 0.5, 1, 2, 5, 10,20,30,40, 50,60,70,80,90,95,98,99,99.5,99.9)/100
par<-xGGsin
qGGsin<-qGG(probs, mu=par[1],sigma=par[2], nu=par[3],lower.tail = TRUE,
log.p = FALSE)
cat("Quantiles para distintas probabilidades de GG sin restricciones =\n")
## Quantiles para distintas probabilidades de GG sin restricciones =
print(cbind(probs,quantiles=qGGsin))
## probs quantiles
## [1,] 0.001 2744.726
## [2,] 0.005 3878.791
## [3,] 0.010 4605.042
## [4,] 0.020 5571.655
## [5,] 0.050 7460.109
## [6,] 0.100 9730.087
## [7,] 0.200 13533.767
## [8,] 0.300 17269.693
## [9,] 0.400 21354.214
## [10,] 0.500 26130.664
## [11,] 0.600 32084.474
## [12,] 0.700 40118.826
## [13,] 0.800 52383.905
## [14,] 0.900 76567.617
## [15,] 0.950 105677.408
## [16,] 0.980 153378.206
## [17,] 0.990 197800.189
## [18,] 0.995 250730.447
## [19,] 0.999 414404.476
La función encargada de encontrar la solución al sistema no lineal con restricciones es constOptim.nl de la librería Alabama.
par<-xGGsin
q<-1-p # porcentaje de hogares con ingreso menor a qi
prom<-mean_sat*q # proporción de hogares que tienen ingresos igual o menor que qi
ansgam<- constrOptim.nl(par=par, fn=fgamG,heq=heq,hin=hin)
## Min(hin): 0.7990934 Max(abs(heq)): 54297.3
## Outer iteration: 1
## Min(hin): 0.7990934 Max(abs(heq)): 54297.3
## par: 24787.3 0.799093 -0.246924
## fval = 359700000
##
## Outer iteration: 2
## Min(hin): 0.8031024 Max(abs(heq)): 54297.3
## par: 24887.4 0.803102 -0.258712
## fval = 359700000
##
## Outer iteration: 3
## Min(hin): 0.8608035 Max(abs(heq)): 10889.48
## par: 20307.8 0.860804 -1.01438
## fval = 361300000
##
## Outer iteration: 4
## Min(hin): 0.8680892 Max(abs(heq)): 10889.48
## par: 20278.2 0.868089 -1.03739
## fval = 361500000
##
## Outer iteration: 5
## Min(hin): 0.9059414 Max(abs(heq)): 10889.48
## par: 21994.8 0.905941 -0.910707
## fval = 361600000
##
## Outer iteration: 6
## Min(hin): 0.985292 Max(abs(heq)): 1692.016
## par: 25619.9 0.985292 -0.686764
## fval = 362300000
##
## Outer iteration: 7
## Min(hin): 1.013595 Max(abs(heq)): 1692.016
## par: 27027.6 1.01359 -0.612439
## fval = 362600000
##
## Outer iteration: 8
## Min(hin): 1.043101 Max(abs(heq)): 274.0612
## par: 28623.5 1.0431 -0.53475
## fval = 3.63e+08
##
## Outer iteration: 9
## Min(hin): 1.053588 Max(abs(heq)): 274.0612
## par: 29218.7 1.05359 -0.507248
## fval = 363100000
##
## Outer iteration: 10
## Min(hin): 1.060648 Max(abs(heq)): 21.15123
## par: 29635.2 1.06065 -0.488604
## fval = 363200000
##
## Outer iteration: 11
## Min(hin): 1.060647 Max(abs(heq)): 21.15123
## par: 29635.2 1.06065 -0.488603
## fval = 363200000
##
## Outer iteration: 12
## Min(hin): 1.062819 Max(abs(heq)): 0.2946807
## par: 29726.8 1.06282 -0.483538
## fval = 363300000
##
## Outer iteration: 13
## Min(hin): 1.062819 Max(abs(heq)): 0.2946807
## par: 29726.8 1.06282 -0.483538
## fval = 363300000
##
## Outer iteration: 14
## Min(hin): 1.062819 Max(abs(heq)): 0.2946807
## par: 29726.8 1.06282 -0.483538
## fval = 363300000
##
## Outer iteration: 15
## Min(hin): 1.062819 Max(abs(heq)): 0.2946807
## par: 29726.8 1.06282 -0.483538
## fval = 363300000
##
## Outer iteration: 16
## Min(hin): 1.062586 Max(abs(heq)): 0.0005080144
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 17
## Min(hin): 1.062586 Max(abs(heq)): 4.18819e-05
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 18
## Min(hin): 1.062586 Max(abs(heq)): 4.18819e-05
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 19
## Min(hin): 1.062586 Max(abs(heq)): 4.18819e-05
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 20
## Min(hin): 1.062586 Max(abs(heq)): 4.18819e-05
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 21
## Min(hin): 1.062586 Max(abs(heq)): 6.611343e-06
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 22
## Min(hin): 1.062586 Max(abs(heq)): 6.611343e-06
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
## Outer iteration: 23
## Min(hin): 1.062586 Max(abs(heq)): 6.611343e-06
## par: 29735.5 1.06259 -0.483755
## fval = 363300000
##
xGGcon<-ansgam$par
Para asegurar la convergencia del ajuste, es importante verificar los resultados de la función constrOptim.nl. Por un lado, el valor de Max(abs(heq)) debe ser muy pequeño, cercano a cero. Esto garantiza que las restricciones impuestas por heq (h[1] y h[2]) se cumplan de manera efectiva, ie, que sus valores tiendan a cero. Por otro lado, el valor de fval debe ser monotónomente creciente en cada iteración, esto demuestra que el algoritmo está encontrando una mejor solución en cada paso.
cat("vector estimado del parámetro de la función GG con restricciones =\n")
## vector estimado del parámetro de la función GG con restricciones =
print(xGGcon)
## mu.1 sigma.1 nu.1
## 29735.4923450 1.0625863 -0.4837548
Para obtener estadisticos necesarios de esta función restringida, simplemente guardamos la salida xGGcon que contiene la estimación de los parámetros de la función GG bajo restricciones aplicadas.
x<-xGGcon
t<-1/(x[2]^2*x[3]^2)
ExGGcon<-x[1]*gamma(t+(1/x[3]))/(t^(1/x[3])*gamma(t))
cat("Esperanza de la función GG=\n")
## Esperanza de la función GG=
print(ExGGcon)
## mu.1
## 92170.8
vGGcon<-ansgam$value ## verosimilitud
par<-xGGcon
qGGcon<-qGG(probs, mu=par[1],sigma=par[2], nu=par[3],lower.tail = TRUE, log.p = FALSE)
cat("Quantiles para distintas probabilidades de GG con restricciones =\n")
## Quantiles para distintas probabilidades de GG con restricciones =
print(cbind(probs,quantiles=qGGcon))
## probs quantiles
## [1,] 0.001 3597.322
## [2,] 0.005 4552.048
## [3,] 0.010 5152.217
## [4,] 0.020 5947.668
## [5,] 0.050 7512.977
## [6,] 0.100 9444.735
## [7,] 0.200 12862.841
## [8,] 0.300 16486.242
## [9,] 0.400 20785.789
## [10,] 0.500 26297.458
## [11,] 0.600 33948.842
## [12,] 0.700 45747.276
## [13,] 0.800 67307.652
## [14,] 0.900 124046.755
## [15,] 0.950 221737.401
## [16,] 0.980 467740.997
## [17,] 0.990 816251.786
## [18,] 0.995 1419688.270
## [19,] 0.999 5103330.179
Cociente entre el decil más bajo con el decil más alto
q10<-qGG(p=c(.10),mu=par[1],sigma=par[2],nu=par[3])
q90<-qGG(p=c(.90),mu=par[1],sigma=par[2],nu=par[3])
i0_10<-integrate(function(x) x*dGG(x=x, mu=par[1], sigma=par[2],nu=par[3]),
lower= 0, upper=q10)
i0_90<-integrate(function(x) x*dGG(x=x, mu=par[1], sigma=par[2],nu=par[3]),
lower= 0, upper=q90 )
num<-ExGGcon-i0_90$v
numGG<-num # valor promedio de ingreso para el ultimo decil (90-10)
denGG<-i0_10$v # valor promedio de ingreso para el primer decil
resGG<-num/denGG # cociente entre primer decil y ultimo decil
mGG<-max(muestra) # máximo de la muestra
i<-integrate(function(x) x*dGG(x=x, mu=par[1], sigma=par[2],nu=par[3]),
lower= 0, upper=mGG )
cocGG<-ExGGcon-i$v ## ingreso promedio mayor al máximo observado en muestra
cocienteMax <- cocGG/ExGGcon #Relación ingreso del máximo observado a ingresos totales
Promedios de ingreso para distintos quantiles
par<-xGGcon
pes<-c( 0, 0.1,.2,.3,.4,.5,.6,.7,.8,.9,.99,.999999)
qq<-c()
ii<-c()
qq[1]<-0
for ( i in 2:12)
qq[i]<-qGG(p=pes[i],mu=par[1],sigma=par[2],nu=par[3])
for ( i in 2:12)
ii[i]<-integrate(function(x) x*dGG(x=x, mu=par[1],sigma=par[2],nu=par[3]),
lower= qq[i-1], upper=qq[i])$v
ii[i+1]<- ii[i+1]<-integrate(function(x) x*dGG(x=x, mu=par[1],sigma=par[2],nu=par[3]), lower= qq[12], upper=100000000000)$v
ii<-ii[-1]
ii[13]<-sum(ii)
if (ii[13]==ExGGcon)
ii[13]<-ii[13] else
{ii[12]<-ExGGcon-sum(ii[-c(12,13)])
ii[13]<-ExGGcon}
iiGG<-ii
deciles<-c(
"0---10",
"10---20",
"20---30",
"30---40",
"40---50",
"50---60",
"60---70",
"70---80",
"80---90",
"90---99",
"99---999999",
"999999--Inf","suma")
perGG<-qq[12] ## percentil .9999999
promedios<-cbind(deciles,iiGG)
print(promedios)
## deciles iiGG
## [1,] "0---10" "709.316787243632"
## [2,] "10---20" "1257.75040111376"
## [3,] "20---30" "1779.83314814099"
## [4,] "30---40" "2383.20292240231"
## [5,] "40---50" "3136.47613665463"
## [6,] "50---60" "4142.5868820134"
## [7,] "60---70" "5600.67705316391"
## [8,] "70---80" "7989.02273584048"
## [9,] "80---90" "12938.4872162444"
## [10,] "90---99" "30129.0863057142"
## [11,] "99---999999" "21702.8185972577"
## [12,] "999999--Inf" "401.543088942926"
## [13,] "suma" "92170.8012747323"
Si se desea obtener el gini se puede utilizar la siguiente función. Como entrada necesita un vector de ingresos y de salida se obtiene el gini de esos ingresos
gini2<- function(x, unbiased = TRUE, na.rm = FALSE){
if (na.rm)
x <- x[!na.ind]
n <- length(x)
mu <- mean(x)
N <- if (unbiased) n * (n - 1) else n * n
ox <- x[order(x)] ## quitar la informacion irrelevante DROP
## la funci?n crossprod = productos cruzados
dsum <- drop(crossprod(2 * 1:n - n - 1, ox))
dsum / (mu * N)
}
set.seed(10)
x<-xGGcon
ma<- rGG(1000, x[1], x[2],x[3])
giniGG<-gini2(ma)
print(giniGG)
## [1] 0.73443
Tambien puede usarse la función ya declarada “gini” de la librería laeken
#install.packages("laeken")
library(laeken)
gini(ma)
## Value:
## [1] 73.36956