Más ggplot <3

¡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

Gráficos de comparación cuanti y cuali

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).

Análisis descriptivo

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

Usando datos expandidos

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

Mi primera función

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

Otro paquetito

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" )