Introducción

En este instructivo veremos cómo realizar una tablas tipo ENAHO en R. En primer lugar vamos a cargar la base de datos del módulo 1 de la ENAHO 2017 desde el SPSS, importando también las etiquetas de las categorías de las variables:

library(foreign)

enaho17_m1 <- read.spss("Enaho01-2017-100.sav", to.data.frame = T,
                        use.value.labels = T)

Tabla de Frecuencias en porcentajes:

Elaboraremos la siguiente tabla:

PERU: MATERIAL PREDOMINANTE EN LOS TECHOS DE LA VIVIENDA, POR DOMINIO GEOGRÁFICO, SEGÚN ÁREA URBANA O RURAL, 2017.

Paso 1: Crear la variable área urbana o rural:

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

table(enaho17_m1$urbano)
## 
## Urbano  Rural 
##  27288  16257

Paso 2: Generar la tabla usando el factor de expansión

tabla1 <- xtabs(FACTOR07 ~ P103A + DOMINIO + urbano, data = enaho17_m1)

tabla1
## , , urbano = Urbano
## 
##                                                     DOMINIO
## P103A                                                 Costa Norte Costa Centro
##   Concreto armado                                     425238.2196  279620.1621
##   Madera                                                 351.1201    7657.3911
##   Tejas                                                 4785.3245     219.7035
##   Planchas de calamina, fibra de cemento o similares  527255.0604   72423.3897
##   Caña o estera con torta de barro                     83900.5967  118058.7157
##   Estera                                                1270.1615   37049.9778
##   Paja, hojas de palmera                                 511.9175     346.1108
##   Otro material                                         4652.9026   14457.3283
##                                                     DOMINIO
## P103A                                                   Costa Sur Sierra Norte
##   Concreto armado                                     114696.0199   55766.6560
##   Madera                                                 884.5999    6289.2112
##   Tejas                                                  604.6462   48650.2718
##   Planchas de calamina, fibra de cemento o similares   47215.3180   74178.3397
##   Caña o estera con torta de barro                      3561.0050    2168.5562
##   Estera                                                1465.3944       0.0000
##   Paja, hojas de palmera                                   0.0000       0.0000
##   Otro material                                         1189.8423    1165.6525
##                                                     DOMINIO
## P103A                                                Sierra Centro   Sierra Sur
##   Concreto armado                                      178828.6379  398961.8488
##   Madera                                                10976.3906   20179.5371
##   Tejas                                                110894.1985  103491.1575
##   Planchas de calamina, fibra de cemento o similares   268288.8280  276924.3005
##   Caña o estera con torta de barro                        642.3023     975.7488
##   Estera                                                  193.4522     300.6601
##   Paja, hojas de palmera                                  349.1858    1408.4722
##   Otro material                                           505.6421     801.3381
##                                                     DOMINIO
## P103A                                                       Selva
##   Concreto armado                                      80379.2757
##   Madera                                                4499.0316
##   Tejas                                                 4544.2957
##   Planchas de calamina, fibra de cemento o similares  534589.5735
##   Caña o estera con torta de barro                      4042.7812
##   Estera                                                   0.0000
##   Paja, hojas de palmera                                8674.7145
##   Otro material                                         1755.1968
##                                                     DOMINIO
## P103A                                                Lima Metropolitana
##   Concreto armado                                          1864164.3362
##   Madera                                                    136575.9974
##   Tejas                                                        397.2438
##   Planchas de calamina, fibra de cemento o similares        591656.6758
##   Caña o estera con torta de barro                           40743.3140
##   Estera                                                      9649.2694
##   Paja, hojas de palmera                                       247.0168
##   Otro material                                              18193.3241
## 
## , , urbano = Rural
## 
##                                                     DOMINIO
## P103A                                                 Costa Norte Costa Centro
##   Concreto armado                                       4454.2045   10638.5498
##   Madera                                                 164.1127     227.0877
##   Tejas                                                19859.9829      39.4629
##   Planchas de calamina, fibra de cemento o similares  108485.7198    9992.2941
##   Caña o estera con torta de barro                      4032.2797   26554.8288
##   Estera                                                1928.0644    4626.9154
##   Paja, hojas de palmera                                 761.4419     195.4430
##   Otro material                                          804.3080    2383.4664
##                                                     DOMINIO
## P103A                                                   Costa Sur Sierra Norte
##   Concreto armado                                       6803.4369    8720.0004
##   Madera                                                 576.7652    1263.3159
##   Tejas                                                  545.3198  163356.1429
##   Planchas de calamina, fibra de cemento o similares   10831.1376  207813.6478
##   Caña o estera con torta de barro                      1734.4432    2400.5147
##   Estera                                                2370.4486     243.1688
##   Paja, hojas de palmera                                   0.0000    5473.5983
##   Otro material                                          229.0509     732.4200
##                                                     DOMINIO
## P103A                                                Sierra Centro   Sierra Sur
##   Concreto armado                                       14591.1610   17983.9136
##   Madera                                                10205.8858    3507.5753
##   Tejas                                                164454.0561   94249.7758
##   Planchas de calamina, fibra de cemento o similares   350498.7076  297200.3946
##   Caña o estera con torta de barro                       2499.0356    2730.2020
##   Estera                                                  983.9511     975.7449
##   Paja, hojas de palmera                                30137.4063   56959.1283
##   Otro material                                           457.2186    1841.0622
##                                                     DOMINIO
## P103A                                                       Selva
##   Concreto armado                                       5197.6651
##   Madera                                                1970.5829
##   Tejas                                                 2543.8612
##   Planchas de calamina, fibra de cemento o similares  329220.3714
##   Caña o estera con torta de barro                      1728.3467
##   Estera                                                   0.0000
##   Paja, hojas de palmera                               62268.6282
##   Otro material                                          794.2559
##                                                     DOMINIO
## P103A                                                Lima Metropolitana
##   Concreto armado                                                0.0000
##   Madera                                                         0.0000
##   Tejas                                                          0.0000
##   Planchas de calamina, fibra de cemento o similares             0.0000
##   Caña o estera con torta de barro                               0.0000
##   Estera                                                         0.0000
##   Paja, hojas de palmera                                         0.0000
##   Otro material                                                  0.0000

Paso 3: Convertir la tabla en un data frame

Vamos a convertir la tabla en un data frame que luegos vamos a restructurar para que las categorías de dominio estén en las columnas:

tabla1 <- as.data.frame(tabla1)

head(tabla1)
##                                                P103A     DOMINIO urbano
## 1                                    Concreto armado Costa Norte Urbano
## 2                                             Madera Costa Norte Urbano
## 3                                              Tejas Costa Norte Urbano
## 4 Planchas de calamina, fibra de cemento o similares Costa Norte Urbano
## 5                   Caña o estera con torta de barro Costa Norte Urbano
## 6                                             Estera Costa Norte Urbano
##          Freq
## 1 425238.2196
## 2    351.1201
## 3   4785.3245
## 4 527255.0604
## 5  83900.5967
## 6   1270.1615
library(reshape2)

tabla1 <- dcast(tabla1, urbano + P103A ~ DOMINIO)

head(tabla1)
##   urbano                                              P103A Costa Norte
## 1 Urbano                                    Concreto armado 425238.2196
## 2 Urbano                                             Madera    351.1201
## 3 Urbano                                              Tejas   4785.3245
## 4 Urbano Planchas de calamina, fibra de cemento o similares 527255.0604
## 5 Urbano                   Caña o estera con torta de barro  83900.5967
## 6 Urbano                                             Estera   1270.1615
##   Costa Centro   Costa Sur Sierra Norte Sierra Centro  Sierra Sur      Selva
## 1  279620.1621 114696.0199    55766.656   178828.6379 398961.8488  80379.276
## 2    7657.3911    884.5999     6289.211    10976.3906  20179.5371   4499.032
## 3     219.7035    604.6462    48650.272   110894.1985 103491.1575   4544.296
## 4   72423.3897  47215.3180    74178.340   268288.8280 276924.3005 534589.574
## 5  118058.7157   3561.0050     2168.556      642.3023    975.7488   4042.781
## 6   37049.9778   1465.3944        0.000      193.4522    300.6601      0.000
##   Lima Metropolitana
## 1       1864164.3362
## 2        136575.9974
## 3           397.2438
## 4        591656.6758
## 5         40743.3140
## 6          9649.2694

Paso 4: Sumar los totales nacionales

La tabla de frecuencias cruzadas sólo tiene las frecuencias para los estratos urbano y rural. Vamos calcular la distribución nacional de la variable de análisis usando el comando aggregate:

tabla1.total <- aggregate(tabla1[, -c(1,2)], by = list(tabla1$P103A), FUN = sum)

head(tabla1.total)
##                                              Group.1 Costa Norte Costa Centro
## 1                                    Concreto armado 429692.4241  290258.7119
## 2                                             Madera    515.2328    7884.4788
## 3                                              Tejas  24645.3074     259.1664
## 4 Planchas de calamina, fibra de cemento o similares 635740.7802   82415.6839
## 5                   Caña o estera con torta de barro  87932.8764  144613.5445
## 6                                             Estera   3198.2259   41676.8932
##    Costa Sur Sierra Norte Sierra Centro Sierra Sur      Selva
## 1 121499.457   64486.6564    193419.799 416945.762  85576.941
## 2   1461.365    7552.5271     21182.276  23687.112   6469.614
## 3   1149.966  212006.4148    275348.255 197740.933   7088.157
## 4  58046.456  281991.9875    618787.536 574124.695 863809.945
## 5   5295.448    4569.0709      3141.338   3705.951   5771.128
## 6   3835.843     243.1688      1177.403   1276.405      0.000
##   Lima Metropolitana
## 1       1864164.3362
## 2        136575.9974
## 3           397.2438
## 4        591656.6758
## 5         40743.3140
## 6          9649.2694

Paso 5: Juntar las tablas

Vamos a juntar la tabla de totales nacionales con la tabla que contiene las frecuencias por estrato urbano y rural. Para ello ambos data frames debes tener las mismas variables:

names(tabla1.total)
## [1] "Group.1"            "Costa Norte"        "Costa Centro"      
## [4] "Costa Sur"          "Sierra Norte"       "Sierra Centro"     
## [7] "Sierra Sur"         "Selva"              "Lima Metropolitana"
names(tabla1)
##  [1] "urbano"             "P103A"              "Costa Norte"       
##  [4] "Costa Centro"       "Costa Sur"          "Sierra Norte"      
##  [7] "Sierra Centro"      "Sierra Sur"         "Selva"             
## [10] "Lima Metropolitana"

A la tabla del total nacional (tabla1.total) tenemos que añadir la variable “urbano” haciendo que contenga la categoría “Total”. Hay que cambiar el nombre de la variable “Group.1” (que está en la 2da columna) por el de nuestra variable de análisis “P103A”:

urbano <- "Total"

tabla1.total <- cbind(urbano, tabla1.total)

colnames(tabla1.total)[2] <- "P103A"

names(tabla1.total)
##  [1] "urbano"             "P103A"              "Costa Norte"       
##  [4] "Costa Centro"       "Costa Sur"          "Sierra Norte"      
##  [7] "Sierra Centro"      "Sierra Sur"         "Selva"             
## [10] "Lima Metropolitana"

Ahora que las dos tablas tienen la misma estructura las podemos unir:

tabla1.f <- rbind(tabla1.total, tabla1)

#Mostramos sólo las tres primeras columnas del data frame:

tabla1.f[, c(1,2,3)]
##    urbano                                              P103A Costa Norte
## 1   Total                                    Concreto armado 429692.4241
## 2   Total                                             Madera    515.2328
## 3   Total                                              Tejas  24645.3074
## 4   Total Planchas de calamina, fibra de cemento o similares 635740.7802
## 5   Total                   Caña o estera con torta de barro  87932.8764
## 6   Total                                             Estera   3198.2259
## 7   Total                             Paja, hojas de palmera   1273.3594
## 8   Total                                      Otro material   5457.2106
## 9  Urbano                                    Concreto armado 425238.2196
## 10 Urbano                                             Madera    351.1201
## 11 Urbano                                              Tejas   4785.3245
## 12 Urbano Planchas de calamina, fibra de cemento o similares 527255.0604
## 13 Urbano                   Caña o estera con torta de barro  83900.5967
## 14 Urbano                                             Estera   1270.1615
## 15 Urbano                             Paja, hojas de palmera    511.9175
## 16 Urbano                                      Otro material   4652.9026
## 17  Rural                                    Concreto armado   4454.2045
## 18  Rural                                             Madera    164.1127
## 19  Rural                                              Tejas  19859.9829
## 20  Rural Planchas de calamina, fibra de cemento o similares 108485.7198
## 21  Rural                   Caña o estera con torta de barro   4032.2797
## 22  Rural                                             Estera   1928.0644
## 23  Rural                             Paja, hojas de palmera    761.4419
## 24  Rural                                      Otro material    804.3080

Paso 6: Calcular una columna con totales (ya falta poco…):

Se suman las columnas de cada fila con las frecuencias, columnas de la 3 a la 10

tabla1.f$total <- rowSums(tabla1.f[, c(3:10)])

## Se muestra las dos primeras y la última columna con los totales

tabla1.f[, c(1,2,11)]
##    urbano                                              P103A       total
## 1   Total                                    Concreto armado 3466044.088
## 2   Total                                             Madera  205328.605
## 3   Total                                              Tejas  718635.443
## 4   Total Planchas de calamina, fibra de cemento o similares 3706573.759
## 5   Total                   Caña o estera con torta de barro  295772.671
## 6   Total                                             Estera   61057.209
## 7   Total                             Paja, hojas de palmera  167333.064
## 8   Total                                      Otro material   49963.009
## 9  Urbano                                    Concreto armado 3397655.156
## 10 Urbano                                             Madera  187413.279
## 11 Urbano                                              Tejas  273586.842
## 12 Urbano Planchas de calamina, fibra de cemento o similares 2392531.486
## 13 Urbano                   Caña o estera con torta de barro  254093.020
## 14 Urbano                                             Estera   49928.915
## 15 Urbano                             Paja, hojas de palmera   11537.418
## 16 Urbano                                      Otro material   42721.227
## 17  Rural                                    Concreto armado   68388.931
## 18  Rural                                             Madera   17915.326
## 19  Rural                                              Tejas  445048.602
## 20  Rural Planchas de calamina, fibra de cemento o similares 1314042.273
## 21  Rural                   Caña o estera con torta de barro   41679.651
## 22  Rural                                             Estera   11128.293
## 23  Rural                             Paja, hojas de palmera  155795.646
## 24  Rural                                      Otro material    7241.782

Paso 7: Calculamos los porcentajes para cada ámbito (total, urbano y rural)

library(dplyr)

tabla1.f.pct <- tabla1.f %>%
  select(-2) %>%
  group_by(urbano) %>%
  mutate_all(funs(./sum(.)*100))

tabla1.f.pct <- cbind(tabla1.f[, c(1,2)], tabla1.f.pct[, -1])

tabla1.f.pct[, c(1,2,11)]
##    urbano                                              P103A      total
## 1   Total                                    Concreto armado 39.9741768
## 2   Total                                             Madera  2.3680720
## 3   Total                                              Tejas  8.2880828
## 4   Total Planchas de calamina, fibra de cemento o similares 42.7482257
## 5   Total                   Caña o estera con torta de barro  3.4111710
## 6   Total                                             Estera  0.7041779
## 7   Total                             Paja, hojas de palmera  1.9298662
## 8   Total                                      Otro material  0.5762276
## 9  Urbano                                    Concreto armado 51.4058846
## 10 Urbano                                             Madera  2.8355277
## 11 Urbano                                              Tejas  4.1393175
## 12 Urbano Planchas de calamina, fibra de cemento o similares 36.1985522
## 13 Urbano                   Caña o estera con torta de barro  3.8443797
## 14 Urbano                                             Estera  0.7554151
## 15 Urbano                             Paja, hojas de palmera  0.1745590
## 16 Urbano                                      Otro material  0.6463641
## 17  Rural                                    Concreto armado  3.3178531
## 18  Rural                                             Madera  0.8691526
## 19  Rural                                              Tejas 21.5912991
## 20  Rural Planchas de calamina, fibra de cemento o similares 63.7500704
## 21  Rural                   Caña o estera con torta de barro  2.0220664
## 22  Rural                                             Estera  0.5398833
## 23  Rural                             Paja, hojas de palmera  7.5583439
## 24  Rural                                      Otro material  0.3513313

Paso 8: Exportamos la tabla en formato csv… ¡al fin!

write.csv(tabla1.f.pct, file = "tabla_pgta103A.csv")

Tabla de estadísticos descriptivos

PERU: MONTO PROMEDIO ESPERADO POR ALQUILER DE LA VIVIENDA, POR ÁREA URBANO RURAL, SEGÚN DOMINIO

Por área urbana o rural, según dominio:

library(Hmisc)
library(plyr) 


tabla2.1 <- ddply(enaho17_m1,~urbano+DOMINIO,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T))

tabla2.1 <- dcast(tabla2.1, DOMINIO ~ urbano)
tabla2.1
##              DOMINIO   Urbano     Rural
## 1        Costa Norte 300.5465 102.57180
## 2       Costa Centro 270.6992 146.93856
## 3          Costa Sur 318.7063 151.60638
## 4       Sierra Norte 235.2339  52.01883
## 5      Sierra Centro 187.3864  60.90453
## 6         Sierra Sur 278.4009  48.82339
## 7              Selva 238.1291  63.03211
## 8 Lima Metropolitana 642.8499        NA

Total nacional:

tabla2.t <- wtd.mean(enaho17_m1$P106, enaho17_m1$FACTOR07, na.rm=T)
tabla2.t
## [1] 322.1513

Por cada dominio:

tabla2.2 <- ddply(enaho17_m1,~DOMINIO,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T))
tabla2.2
##              DOMINIO    Media
## 1        Costa Norte 276.3696
## 2       Costa Centro 258.7626
## 3          Costa Sur 298.2543
## 4       Sierra Norte 105.3642
## 5      Sierra Centro 120.4455
## 6         Sierra Sur 188.3954
## 7              Selva 166.3839
## 8 Lima Metropolitana 642.8499

Por cada área de residencia:

tabla2.3 <- ddply(enaho17_m1,~urbano,summarise,  
              Media=wtd.mean(P106,FACTOR07, na.rm=T))
tabla2.3
##   urbano     Media
## 1 Urbano 411.47156
## 2  Rural  63.04894

Podemos juntar la primera con la última tabla y exportar el resultado:

Vamos a exportar el objeto creado como una lista:

tabla.P106 <- cbind(tabla2.2, tabla2.1[, -1])
tabla.P106
##              DOMINIO    Media   Urbano     Rural
## 1        Costa Norte 276.3696 300.5465 102.57180
## 2       Costa Centro 258.7626 270.6992 146.93856
## 3          Costa Sur 298.2543 318.7063 151.60638
## 4       Sierra Norte 105.3642 235.2339  52.01883
## 5      Sierra Centro 120.4455 187.3864  60.90453
## 6         Sierra Sur 188.3954 278.4009  48.82339
## 7              Selva 166.3839 238.1291  63.03211
## 8 Lima Metropolitana 642.8499 642.8499        NA
tablaP106_c <- list(tabla.P106, tabla2.t, tabla2.3)



write.csv(tablaP106_c, file = "lista1.csv")

tablaP106_c
## [[1]]
##              DOMINIO    Media   Urbano     Rural
## 1        Costa Norte 276.3696 300.5465 102.57180
## 2       Costa Centro 258.7626 270.6992 146.93856
## 3          Costa Sur 298.2543 318.7063 151.60638
## 4       Sierra Norte 105.3642 235.2339  52.01883
## 5      Sierra Centro 120.4455 187.3864  60.90453
## 6         Sierra Sur 188.3954 278.4009  48.82339
## 7              Selva 166.3839 238.1291  63.03211
## 8 Lima Metropolitana 642.8499 642.8499        NA
## 
## [[2]]
## [1] 322.1513
## 
## [[3]]
##   urbano     Media
## 1 Urbano 411.47156
## 2  Rural  63.04894