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)
Elaboraremos la siguiente tabla:
PERU: MATERIAL PREDOMINANTE EN LOS TECHOS DE LA VIVIENDA, POR DOMINIO GEOGRÁFICO, SEGÚN ÁREA URBANA O RURAL, 2017.
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
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
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
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
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
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
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
write.csv(tabla1.f.pct, file = "tabla_pgta103A.csv")
PERU: MONTO PROMEDIO ESPERADO POR ALQUILER DE LA VIVIENDA, POR ÁREA URBANO 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
tabla2.t <- wtd.mean(enaho17_m1$P106, enaho17_m1$FACTOR07, na.rm=T)
tabla2.t
## [1] 322.1513
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
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
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