Pontificia Universidad Católica del Perú

Facultad de Ciencias Sociales - Especialidad de Socioogía

En este instructivo mostraremos cómo utilizar el R para crear tablas de frecuencias y de estadísticos descriptivos, considerando el factor de expansión de la EHANO.

Para ello, en su directorio de trabajo debe tener las siguientes bases de datos de la ENAHO 2016:

Importar Data

Vamos a trabajar con el Módulo 1 de la ENAHO, sobre características de la vivienda.

library(haven)
modulo1 <- read_sav("https://www.dropbox.com/s/merao9aqthin0wk/Enaho01-2016-100.sav?dl=1")
## `curl` package not installed, falling back to using `url()`

Ejercicio 1: Tabla de frecuencias ponderada / expandida

Tabla: Material predominante en las paredes de la vivienda según dominio geográfico, por área de residencia urbano - rural (% de hogares)

Paso 1: Recodificamos la variable ESTRATO para crear la variable Área de residencia

library(car)
modulo1$urbano <- factor(recode(modulo1$ESTRATO, "1:5 = 1; 6:8=2"), 
                             labels = c("Urbano", "Rural")) 

Paso 2: Tablas de frecuencia aplicando factor de ponderación

Para generar tablas aplicando un factor de ponderación es necesario usar el comando xtabs. En este caso la tabla generada contiene números absolutos (conteos de hogares expandidos)

tabla_matp <-xtabs(FACTOR07~P102+DOMINIO+urbano, data = modulo1)
tabla_matp
## , , urbano = Urbano
## 
##     DOMINIO
## P102            1            2            3            4            5
##    1 5.802134e+05 3.673650e+05 1.383928e+05 6.358436e+04 2.204878e+05
##    2 5.185801e+03 2.394400e+03 3.748094e+02 3.269993e+03 1.882594e+03
##    3 3.203458e+05 9.105885e+04 7.459134e+03 7.789583e+04 1.767602e+05
##    4 2.106993e+03 5.043381e+02 8.293260e+01 2.421435e+04 1.354227e+05
##    5 3.487100e+04 6.541053e+03 1.858474e+03 7.521054e+02 2.735558e+02
##    6 0.000000e+00 1.789386e+02 0.000000e+00 4.636985e+02 2.814358e+03
##    7 3.270441e+03 2.001872e+04 8.903292e+03 1.101948e+03 2.178934e+03
##    8 2.021200e+03 1.580608e+04 2.691284e+03 0.000000e+00 5.049716e+02
##    9 5.977261e+04 1.483643e+04 5.583950e+03 1.231948e+03 1.684514e+03
##     DOMINIO
## P102            6            7            8
##    1 4.186179e+05 2.797608e+05 2.185441e+06
##    2 2.633598e+04 5.142291e+03 1.967332e+04
##    3 3.029137e+05 7.520073e+04 1.238619e+05
##    4 9.783866e+02 1.408079e+04 0.000000e+00
##    5 4.234176e+02 1.668803e+04 3.172995e+04
##    6 1.106939e+03 8.034771e+02 2.868769e+03
##    7 5.874211e+03 2.024184e+05 2.555501e+05
##    8 1.046958e+03 8.940049e+02 5.028238e+03
##    9 1.403009e+04 2.248347e+04 2.964866e+04
## 
## , , urbano = Rural
## 
##     DOMINIO
## P102            1            2            3            4            5
##    1 1.057912e+04 1.813008e+04 1.289382e+04 1.491887e+04 2.464351e+04
##    2 0.000000e+00 1.636786e+02 6.280003e+01 1.515414e+03 1.604445e+03
##    3 1.087028e+05 2.794668e+04 1.214739e+03 2.097710e+05 2.344716e+05
##    4 0.000000e+00 4.499617e+01 0.000000e+00 1.257552e+05 2.729563e+05
##    5 3.522528e+03 5.028941e+03 1.472480e+03 3.410192e+03 1.801243e+03
##    6 0.000000e+00 0.000000e+00 0.000000e+00 1.487780e+04 1.153544e+04
##    7 1.489850e+02 3.753573e+03 4.534668e+03 3.421200e+03 8.163146e+03
##    8 3.933280e+02 2.313360e+03 1.624538e+03 3.158036e+02 5.886621e+02
##    9 1.245601e+04 8.523892e+02 1.079205e+03 4.436952e+03 2.872781e+03
##     DOMINIO
## P102            6            7            8
##    1 2.460767e+04 4.264212e+04 0.000000e+00
##    2 2.188277e+03 6.987865e+02 0.000000e+00
##    3 4.056672e+05 7.151361e+04 0.000000e+00
##    4 5.605571e+03 1.367105e+04 0.000000e+00
##    5 1.156628e+03 1.116518e+04 0.000000e+00
##    6 3.104768e+04 2.786140e+03 0.000000e+00
##    7 2.873440e+03 2.159145e+05 0.000000e+00
##    8 8.998301e+02 4.238127e+02 0.000000e+00
##    9 2.878701e+03 4.897937e+04 0.000000e+00

Paso 3: Convertimos la tabla en un data frame y utilizamos el comando dcast del paquete reshape2 para restructurar la tabla a nuestros requerimientos:

tabla2_matp <- as.data.frame(tabla_matp)
tabla2_matp
##     P102 DOMINIO urbano         Freq
## 1      1       1 Urbano 5.802134e+05
## 2      2       1 Urbano 5.185801e+03
## 3      3       1 Urbano 3.203458e+05
## 4      4       1 Urbano 2.106993e+03
## 5      5       1 Urbano 3.487100e+04
## 6      6       1 Urbano 0.000000e+00
## 7      7       1 Urbano 3.270441e+03
## 8      8       1 Urbano 2.021200e+03
## 9      9       1 Urbano 5.977261e+04
## 10     1       2 Urbano 3.673650e+05
## 11     2       2 Urbano 2.394400e+03
## 12     3       2 Urbano 9.105885e+04
## 13     4       2 Urbano 5.043381e+02
## 14     5       2 Urbano 6.541053e+03
## 15     6       2 Urbano 1.789386e+02
## 16     7       2 Urbano 2.001872e+04
## 17     8       2 Urbano 1.580608e+04
## 18     9       2 Urbano 1.483643e+04
## 19     1       3 Urbano 1.383928e+05
## 20     2       3 Urbano 3.748094e+02
## 21     3       3 Urbano 7.459134e+03
## 22     4       3 Urbano 8.293260e+01
## 23     5       3 Urbano 1.858474e+03
## 24     6       3 Urbano 0.000000e+00
## 25     7       3 Urbano 8.903292e+03
## 26     8       3 Urbano 2.691284e+03
## 27     9       3 Urbano 5.583950e+03
## 28     1       4 Urbano 6.358436e+04
## 29     2       4 Urbano 3.269993e+03
## 30     3       4 Urbano 7.789583e+04
## 31     4       4 Urbano 2.421435e+04
## 32     5       4 Urbano 7.521054e+02
## 33     6       4 Urbano 4.636985e+02
## 34     7       4 Urbano 1.101948e+03
## 35     8       4 Urbano 0.000000e+00
## 36     9       4 Urbano 1.231948e+03
## 37     1       5 Urbano 2.204878e+05
## 38     2       5 Urbano 1.882594e+03
## 39     3       5 Urbano 1.767602e+05
## 40     4       5 Urbano 1.354227e+05
## 41     5       5 Urbano 2.735558e+02
## 42     6       5 Urbano 2.814358e+03
## 43     7       5 Urbano 2.178934e+03
## 44     8       5 Urbano 5.049716e+02
## 45     9       5 Urbano 1.684514e+03
## 46     1       6 Urbano 4.186179e+05
## 47     2       6 Urbano 2.633598e+04
## 48     3       6 Urbano 3.029137e+05
## 49     4       6 Urbano 9.783866e+02
## 50     5       6 Urbano 4.234176e+02
## 51     6       6 Urbano 1.106939e+03
## 52     7       6 Urbano 5.874211e+03
## 53     8       6 Urbano 1.046958e+03
## 54     9       6 Urbano 1.403009e+04
## 55     1       7 Urbano 2.797608e+05
## 56     2       7 Urbano 5.142291e+03
## 57     3       7 Urbano 7.520073e+04
## 58     4       7 Urbano 1.408079e+04
## 59     5       7 Urbano 1.668803e+04
## 60     6       7 Urbano 8.034771e+02
## 61     7       7 Urbano 2.024184e+05
## 62     8       7 Urbano 8.940049e+02
## 63     9       7 Urbano 2.248347e+04
## 64     1       8 Urbano 2.185441e+06
## 65     2       8 Urbano 1.967332e+04
## 66     3       8 Urbano 1.238619e+05
## 67     4       8 Urbano 0.000000e+00
## 68     5       8 Urbano 3.172995e+04
## 69     6       8 Urbano 2.868769e+03
## 70     7       8 Urbano 2.555501e+05
## 71     8       8 Urbano 5.028238e+03
## 72     9       8 Urbano 2.964866e+04
## 73     1       1  Rural 1.057912e+04
## 74     2       1  Rural 0.000000e+00
## 75     3       1  Rural 1.087028e+05
## 76     4       1  Rural 0.000000e+00
## 77     5       1  Rural 3.522528e+03
## 78     6       1  Rural 0.000000e+00
## 79     7       1  Rural 1.489850e+02
## 80     8       1  Rural 3.933280e+02
## 81     9       1  Rural 1.245601e+04
## 82     1       2  Rural 1.813008e+04
## 83     2       2  Rural 1.636786e+02
## 84     3       2  Rural 2.794668e+04
## 85     4       2  Rural 4.499617e+01
## 86     5       2  Rural 5.028941e+03
## 87     6       2  Rural 0.000000e+00
## 88     7       2  Rural 3.753573e+03
## 89     8       2  Rural 2.313360e+03
## 90     9       2  Rural 8.523892e+02
## 91     1       3  Rural 1.289382e+04
## 92     2       3  Rural 6.280003e+01
## 93     3       3  Rural 1.214739e+03
## 94     4       3  Rural 0.000000e+00
## 95     5       3  Rural 1.472480e+03
## 96     6       3  Rural 0.000000e+00
## 97     7       3  Rural 4.534668e+03
## 98     8       3  Rural 1.624538e+03
## 99     9       3  Rural 1.079205e+03
## 100    1       4  Rural 1.491887e+04
## 101    2       4  Rural 1.515414e+03
## 102    3       4  Rural 2.097710e+05
## 103    4       4  Rural 1.257552e+05
## 104    5       4  Rural 3.410192e+03
## 105    6       4  Rural 1.487780e+04
## 106    7       4  Rural 3.421200e+03
## 107    8       4  Rural 3.158036e+02
## 108    9       4  Rural 4.436952e+03
## 109    1       5  Rural 2.464351e+04
## 110    2       5  Rural 1.604445e+03
## 111    3       5  Rural 2.344716e+05
## 112    4       5  Rural 2.729563e+05
## 113    5       5  Rural 1.801243e+03
## 114    6       5  Rural 1.153544e+04
## 115    7       5  Rural 8.163146e+03
## 116    8       5  Rural 5.886621e+02
## 117    9       5  Rural 2.872781e+03
## 118    1       6  Rural 2.460767e+04
## 119    2       6  Rural 2.188277e+03
## 120    3       6  Rural 4.056672e+05
## 121    4       6  Rural 5.605571e+03
## 122    5       6  Rural 1.156628e+03
## 123    6       6  Rural 3.104768e+04
## 124    7       6  Rural 2.873440e+03
## 125    8       6  Rural 8.998301e+02
## 126    9       6  Rural 2.878701e+03
## 127    1       7  Rural 4.264212e+04
## 128    2       7  Rural 6.987865e+02
## 129    3       7  Rural 7.151361e+04
## 130    4       7  Rural 1.367105e+04
## 131    5       7  Rural 1.116518e+04
## 132    6       7  Rural 2.786140e+03
## 133    7       7  Rural 2.159145e+05
## 134    8       7  Rural 4.238127e+02
## 135    9       7  Rural 4.897937e+04
## 136    1       8  Rural 0.000000e+00
## 137    2       8  Rural 0.000000e+00
## 138    3       8  Rural 0.000000e+00
## 139    4       8  Rural 0.000000e+00
## 140    5       8  Rural 0.000000e+00
## 141    6       8  Rural 0.000000e+00
## 142    7       8  Rural 0.000000e+00
## 143    8       8  Rural 0.000000e+00
## 144    9       8  Rural 0.000000e+00
library(reshape2)

matp <- dcast(tabla2_matp, urbano + P102 ~ DOMINIO)
## Using Freq as value column: use value.var to override.
matp
##    urbano P102          1            2            3           4
## 1  Urbano    1 580213.421 367364.95140 138392.78665  63584.3569
## 2  Urbano    2   5185.801   2394.39981    374.80940   3269.9927
## 3  Urbano    3 320345.813  91058.85410   7459.13434  77895.8298
## 4  Urbano    4   2106.993    504.33810     82.93260  24214.3492
## 5  Urbano    5  34870.999   6541.05307   1858.47424    752.1054
## 6  Urbano    6      0.000    178.93864      0.00000    463.6985
## 7  Urbano    7   3270.441  20018.72320   8903.29185   1101.9481
## 8  Urbano    8   2021.200  15806.07994   2691.28389      0.0000
## 9  Urbano    9  59772.609  14836.42879   5583.95000   1231.9482
## 10  Rural    1  10579.121  18130.08453  12893.82483  14918.8655
## 11  Rural    2      0.000    163.67859     62.80003   1515.4137
## 12  Rural    3 108702.848  27946.68203   1214.73930 209771.0408
## 13  Rural    4      0.000     44.99617      0.00000 125755.1799
## 14  Rural    5   3522.528   5028.94078   1472.48023   3410.1919
## 15  Rural    6      0.000      0.00000      0.00000  14877.7981
## 16  Rural    7    148.985   3753.57313   4534.66753   3421.1999
## 17  Rural    8    393.328   2313.36003   1624.53823    315.8036
## 18  Rural    9  12456.010    852.38918   1079.20472   4436.9520
##              5           6           7           8
## 1  220487.8180 418617.9216 279760.8166 2185440.693
## 2    1882.5937  26335.9764   5142.2908   19673.322
## 3  176760.1520 302913.7030  75200.7330  123861.937
## 4  135422.7352    978.3866  14080.7894       0.000
## 5     273.5558    423.4176  16688.0281   31729.950
## 6    2814.3578   1106.9386    803.4771    2868.769
## 7    2178.9337   5874.2106 202418.4188  255550.133
## 8     504.9716   1046.9585    894.0049    5028.238
## 9    1684.5141  14030.0862  22483.4740   29648.656
## 10  24643.5085  24607.6742  42642.1221       0.000
## 11   1604.4453   2188.2773    698.7865       0.000
## 12 234471.5568 405667.2039  71513.6092       0.000
## 13 272956.2920   5605.5715  13671.0549       0.000
## 14   1801.2434   1156.6285  11165.1791       0.000
## 15  11535.4403  31047.6812   2786.1401       0.000
## 16   8163.1463   2873.4402 215914.4627       0.000
## 17    588.6621    899.8301    423.8127       0.000
## 18   2872.7813   2878.7013  48979.3730       0.000

Finalmente exportamos la tabla ya sea como archivo cvs o como html para abrirla en Excel y desde ahi calcular los totales y los porcentajes, y formatearla de acuerdo con el estilo del INEI:

write.csv(matp, file = "matp.csv")

library(xtable)
print(xtable(matp), type = "html", file = "matp.html")

Ejercicio 2: Tablas de estadisticos descriptivos con factor de ponderación / expansión

Tabla: Monto mensual pagado como alquiler o préstamo de la vivienda, según área de residencia y dominio geográfico (media, mediana y desviación estándar)

Para calcular los estadísticos descriptivos ponderados utilizamos el paquete “Hmisc” que contiene los comandos:

  • “wtd.mean” para la media
  • “wtd.var” para la varianza
  • “wtd.quantile” para los cuantiles, en este caso indicamos que requerimos la mediana (probs = 0.5)

Nóteses que no tenemos un comando para calcular directamente la desviación estándar ponderada. Se calcula la varianza usando el método “ML” (maximum likelihood estimate, o estimado de máxima verosimilitud para una distribución normal) que es el que emplea el SPSS para calcular la varianza con datos ponderados. La desviación estándar se obtiene sacando la raiz cuadrada de la varianza.

El comando “ddply” del paquete “plyr” nos sirve para crear la tabla por grupo.

library(Hmisc)
library(plyr) 

tab.descr <- ddply(modulo1,~urbano+DOMINIO,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T),
      Desv=sqrt(wtd.var(P106,FACTOR07, method = "ML", na.rm=T)),
      md = wtd.quantile(P106,FACTOR07, probs = 0.5, na.rm=T))
tab.descr
##    urbano DOMINIO     Media      Desv  md
## 1  Urbano       1 297.61062 292.57509 200
## 2  Urbano       2 276.71868 236.89611 200
## 3  Urbano       3 299.26220 268.42477 200
## 4  Urbano       4 258.29019 298.40765 150
## 5  Urbano       5 195.17442 227.50459 100
## 6  Urbano       6 273.68768 320.96795 160
## 7  Urbano       7 234.76938 226.27853 150
## 8  Urbano       8 610.70737 548.65485 450
## 9   Rural       1  98.80198 108.94361  50
## 10  Rural       2 131.51036 108.15995 100
## 11  Rural       3 145.04920 163.55935  90
## 12  Rural       4  49.19414  59.43278  30
## 13  Rural       5  55.10202  65.69439  30
## 14  Rural       6  47.07092  70.07223  30
## 15  Rural       7  61.94014  69.52710  50

Exportamos la tabla al formato CSV para trabajarlos en Excel:

write.csv(tab.descr, file = "tab_descr.csv")

Para los totales por dominio, por área de residencia y nacional, procedemos de la siguiente manera:

# Por dominio

tab.descr.dom <- ddply(modulo1,~DOMINIO,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T),
      Desv=sqrt(wtd.var(P106,FACTOR07, method = "ML", na.rm=T)),
      md = wtd.quantile(P106,FACTOR07, probs = 0.5, na.rm=T))

tab.descr.dom
##   DOMINIO    Media     Desv  md
## 1       1 272.6218 284.0356 200
## 2       2 261.8545 231.3224 200
## 3       3 279.2802 262.4201 200
## 4       4 108.2792 191.2065  50
## 5       5 121.0916 177.6377  50
## 6       6 182.2426 275.3024  80
## 7       7 162.3699 197.6086 100
## 8       8 610.7074 548.6549 450
# Por área urbana o rural

tab.descr.res <- ddply(modulo1,~urbano,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T),
      Desv=sqrt(wtd.var(P106,FACTOR07, method = "ML", na.rm=T)),
      md = wtd.quantile(P106,FACTOR07, probs = 0.5, na.rm=T))

tab.descr.res
##   urbano     Media      Desv  md
## 1 Urbano 400.29792 439.16995 250
## 2  Rural  59.65054  75.77429  40
# Nacional

wtd.mean(modulo1$P106, modulo1$FACTOR07, na.rm=T)
## [1] 311.8306
wtd.var(modulo1$P106, modulo1$FACTOR07, method = "ML", na.rm=T)
## [1] 166582
wtd.quantile(modulo1$P106, modulo1$FACTOR07, probs = 0.5, na.rm=T)
## 50% 
## 180

Como se hizo previamente, podemos exportar esos resultados al Excel para elaborar la versión final de la tabla.