¡Recuerda, poner el directorio!
setwd("/Users/anaescoto/Dropbox/DGAPA/EjercicioR")
En esta práctica vamos a volver a la base de la ENIGH. Con nuestro paquete foreign
install.packages("foreign", repos = "http://cran.us.r-project.org", dependencies = TRUE)
##
## The downloaded binary packages are in
## /var/folders/fr/mw1x21js54367mjdhqsjfwqm0000gn/T//RtmpQo85N7/downloaded_packages
library(foreign)
## Warning: package 'foreign' was built under R version 3.3.2
Llamamos nuestra base
enigh_concentrado <- read.dbf("ncv_concentrado_2014_concil_2010_dbf.dbf")
Vamos a trabajar con la variable “Clase de hogar”
table(enigh_concentrado$clase_hog)
##
## 1 2 3 4 5
## 1949 12632 4692 129 77
Etiquetamos la variable
enigh_concentrado$clase_hog<- factor(enigh_concentrado$clase_hog,label= c("Unipersonal", "Nuclear", "Extenso", "Compuesto","Corresidentes"))
table(enigh_concentrado$clase_hog)
##
## Unipersonal Nuclear Extenso Compuesto Corresidentes
## 1949 12632 4692 129 77
Hacemos mismo para el sexo del jefe
enigh_concentrado$sexo_jefe<- factor(enigh_concentrado$sexo_jefe,label= c("Hombre", "Mujer"))
table(enigh_concentrado$sexo_jefe)
##
## Hombre Mujer
## 14518 4961
Los gráficos de comparaciones de cajas y distribuciones son muy útiles. Nos permiten ver cómo una variable cuantitativa se comporta entre la población dividida entre los grupos.
Vamos a volver a usar nuestro paquete ggplot2
install.packages("ggplot2", repos = "http://cran.us.r-project.org", dependencies = TRUE)
##
## The downloaded binary packages are in
## /var/folders/fr/mw1x21js54367mjdhqsjfwqm0000gn/T//RtmpQo85N7/downloaded_packages
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.3.2
Vamos a usar la función qplot, otra vez.
Vamos a ver cómo se distribuyen los ingresos
Univariado
qplot(ing_cor, data=enigh_concentrado, geom="density", alpha=I(.5),
main="Distribución de los ingresos corrientes", xlab="Pesos mexicanos",
ylab="Density")
Si transformamos a logaritmo, tenemos una distribución más parecida a una norma
qplot(log(ing_cor), data=enigh_concentrado, geom="density", alpha=I(.5),
main="Distribución de los ingresos corrientes", xlab="Logaritmo",
ylab="Density")
## Warning: Removed 2 rows containing non-finite values (stat_density).
Bivariado
Podemos comparar la distribución incluyendo en la opción “fill=VARGROUP”
qplot(log(ing_cor), data=enigh_concentrado, geom="density", fill=factor(sexo_jefe), alpha=I(.5),
main="Distribución de los ingresos corrientes", xlab="Logaritmo",
ylab="Density")
## Warning: Removed 2 rows containing non-finite values (stat_density).
Podemos comparar la distribución incluyendo en la opción “fill=VARGROUP”
qplot(log(ing_cor), data=enigh_concentrado, geom="histogram", fill=factor(sexo_jefe), alpha=I(.5),
main="Distribución de los ingresos corrientes", xlab="Logaritmo",
ylab="Frecuencia")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing non-finite values (stat_bin).
Un truco para hacer el análisis descriptivo es generar una subbase con las variables que vamos analizar
mydata<- enigh_concentrado[, c("ing_cor", "tot_integ","ocupados", "sexo_jefe", "clase_hog")]
tail(mydata)
## ing_cor tot_integ ocupados sexo_jefe clase_hog
## 19474 6764.09 2 1 Hombre Nuclear
## 19475 17729.84 2 1 Hombre Nuclear
## 19476 17272.74 2 1 Hombre Nuclear
## 19477 11140.16 2 0 Mujer Nuclear
## 19478 15976.96 1 0 Mujer Unipersonal
## 19479 12688.35 5 2 Mujer Extenso
Si queremos obtener las medias de estas tres variables Excluyendo missing values
sapply(mydata, mean, na.rm=TRUE)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
## ing_cor tot_integ ocupados sexo_jefe clase_hog
## 37262.844500 3.773705 1.665897 NA NA
Además de media (mean) tenemos las siguientes opciones: mean, sd, var, min, max, median, range, and quantile.
Para obtener de una sola vez las funciones mean,median,25th and 75th quartiles,min,max, usamos la función “summary”
summary(mydata)
## ing_cor tot_integ ocupados sexo_jefe
## Min. : 0 Min. : 1.000 Min. :0.000 Hombre:14518
## 1st Qu.: 15496 1st Qu.: 2.000 1st Qu.:1.000 Mujer : 4961
## Median : 26055 Median : 4.000 Median :2.000
## Mean : 37263 Mean : 3.774 Mean :1.666
## 3rd Qu.: 43929 3rd Qu.: 5.000 3rd Qu.:2.000
## Max. :4155295 Max. :17.000 Max. :9.000
## clase_hog
## Unipersonal : 1949
## Nuclear :12632
## Extenso : 4692
## Compuesto : 129
## Corresidentes: 77
##
summary(mydata[mydata$sexo_jefe=="Hombre",])
## ing_cor tot_integ ocupados sexo_jefe
## Min. : 0 Min. : 1.000 Min. :0.000 Hombre:14518
## 1st Qu.: 16117 1st Qu.: 3.000 1st Qu.:1.000 Mujer : 0
## Median : 26825 Median : 4.000 Median :2.000
## Mean : 38793 Mean : 3.943 Mean :1.747
## 3rd Qu.: 45414 3rd Qu.: 5.000 3rd Qu.:2.000
## Max. :4155295 Max. :17.000 Max. :9.000
## clase_hog
## Unipersonal : 1068
## Nuclear :10318
## Extenso : 2995
## Compuesto : 87
## Corresidentes: 50
##
summary(mydata[mydata$sexo_jefe=="Mujer",])
## ing_cor tot_integ ocupados sexo_jefe
## Min. : 0 Min. : 1.000 Min. :0.000 Hombre: 0
## 1st Qu.: 13942 1st Qu.: 2.000 1st Qu.:1.000 Mujer :4961
## Median : 23990 Median : 3.000 Median :1.000
## Mean : 32786 Mean : 3.278 Mean :1.427
## 3rd Qu.: 39901 3rd Qu.: 4.000 3rd Qu.:2.000
## Max. :792076 Max. :17.000 Max. :9.000
## clase_hog
## Unipersonal : 881
## Nuclear :2314
## Extenso :1697
## Compuesto : 42
## Corresidentes: 27
##
tapply(enigh_concentrado$ing_cor, enigh_concentrado$clase_hog, summary)
## $Unipersonal
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 990.3 9614.0 15490.0 24780.0 28070.0 792100.0
##
## $Nuclear
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 15610 25580 37850 43170 4155000
##
## $Extenso
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 978.3 19680.0 31770.0 40120.0 49670.0 329200.0
##
## $Compuesto
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7078 20010 35450 45190 52820 232700
##
## $Corresidentes
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7294 23610 41410 68930 79940 350500
tapply(enigh_concentrado$ing_cor, enigh_concentrado$sexo_jefe, summary)
## $Hombre
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 16120 26820 38790 45410 4155000
##
## $Mujer
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 13940 23990 32790 39900 792100
Un elemento importante, sobre todo cuando estamos usando una encuesta con representatividad nacional como la ENIGH, es que podemo establecer los valores poblacionales. Para ello, los descriptivos se presentan con los datos de la población y no de la muestra. Esto se hace expandiendo los datos muestrales según el factor.
En el caso de la enigh este es factor “fac”
Para esto usaremos la librería “questionr”
install.packages("questionr", repos = "http://cran.us.r-project.org", dependencies = TRUE)
## also installing the dependency 'memisc'
##
## There is a binary version available but the source version is
## later:
## binary source needs_compilation
## memisc 0.99.8 0.99.13 TRUE
##
##
## The downloaded binary packages are in
## /var/folders/fr/mw1x21js54367mjdhqsjfwqm0000gn/T//RtmpQo85N7/downloaded_packages
## installing the source package 'memisc'
## Warning in install.packages("questionr", repos = "http://cran.us.r-
## project.org", : installation of package 'memisc' had non-zero exit status
library(questionr)
## Warning: package 'questionr' was built under R version 3.3.2
Este paquete tiene la función wdt.mean, calcula las medias tomando en cuenta los pesos
wtd.mean(enigh_concentrado$ing_cor, weights = enigh_concentrado$factor_hog)
## [1] 39742.4
#También podemos usar el valor con el comando weighted mean
weighted.mean(x = enigh_concentrado$ing_cor, w = enigh_concentrado$factor_hog)
## [1] 39742.4
Para variables cualitativas podemos hacer tablas con los factores de expansión
wtd.table(enigh_concentrado$sexo_jefe, weights = enigh_concentrado$factor_hog)
## Hombre Mujer
## 23535763 8135239
Para una tabla cruzada
wtd.table(enigh_concentrado$sexo_jefe,enigh_concentrado$clase_hog, weights = enigh_concentrado$factor_hog)
## Unipersonal Nuclear Extenso Compuesto Corresidentes
## Hombre 1611109 16794749 4951877 112414 65614
## Mujer 1510522 3740811 2774457 64531 44918
Unos de los elementos más poderosos de R es hacer nuestra propias funciones.
Para ello haremos una función sencilla. Para sumarle un valor un 1
mi_funcion<-function(x) {
x<-x+1
x
}
mi_funcion(5)
## [1] 6
Qué tal hoy una una función donde podamos establecer qué valor sumamos
mi_funcion<-function(x,a) {
x<-x+a
x
}
mi_funcion(5,2)
## [1] 7
Mi función para expandir medias
expandir<- function(x){
weighted.mean(x, w = enigh_concentrado$factor_hog)
}
Entonces puedo ya sólo poner la variable
expandir(enigh_concentrado$edad_jefe)
## [1] 48.8299
expandir(enigh_concentrado$ing_cor)
## [1] 39742.4
Vamos a instalar el paquete “plyr”
install.packages("plyr", repos = "http://cran.us.r-project.org", dependencies = TRUE)
##
## The downloaded binary packages are in
## /var/folders/fr/mw1x21js54367mjdhqsjfwqm0000gn/T//RtmpQo85N7/downloaded_packages
library(plyr)
ddply(enigh_concentrado,.(clase_hog),summarise, wm = weighted.mean(ing_cor,factor_hog))
## clase_hog wm
## 1 Unipersonal 26922.63
## 2 Nuclear 40982.41
## 3 Extenso 40697.71
## 4 Compuesto 47460.38
## 5 Corresidentes 92284.46
Finalmente, si quisiéramos guardar la base de datos en un su formato. Como hemos colocado el directorio, podemos sólo poner el nombre entre comillas
write.dbf(enigh_concentrado, "enigh_concentrado_mod.dbf" )