# install.packages("haven") # si no lo tienes aún
# install.packages("dplyr") # para manipulación
# install.packages("janitor") # opcional, limpiar nombres de variables
# install.packages("stringr")
# install.packages("convey")
# install.packages("survey", dependencies = TRUE)
# install.packages("ggplot2")
# install.packages("scales")
library(stringr)
## Warning: package 'stringr' was built under R version 4.4.3
## Warning: package 'haven' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Warning: package 'janitor' was built under R version 4.4.3
##
## Adjuntando el paquete: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
## Warning: package 'convey' was built under R version 4.4.3
## Warning: package 'survey' was built under R version 4.4.3
## Cargando paquete requerido: grid
## Cargando paquete requerido: Matrix
## Cargando paquete requerido: survival
##
## Adjuntando el paquete: 'survey'
## The following object is masked from 'package:graphics':
##
## dotchart
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'scales' was built under R version 4.4.3
# # Ruta al archivo .sav
# ruta <- "Base de datos Casen 2022 SPSS_18 marzo 2024.sav"
#
# # Lectura con haven
# casen2022 <- read_sav(ruta) |>
# janitor::clean_names() # opcional: convierte a snake_case los nombres
Guardar en formato más liviano
# saveRDS(casen2022, "casen2022_raw.rds")
# Para reabrirlo después:
casen2022 <- readRDS("casen2022_raw.rds")
Inspección inicial
## [1] 202231 918
## [1] "id_vivienda" "folio" "id_persona"
## [4] "region" "area" "cod_upm"
## [7] "nse" "estrato" "hogar"
## [10] "expr" "expr_osig" "varstrat"
## [13] "varunit" "fecha_entrev" "p1"
## [16] "p2" "p3" "p4"
## [19] "p9" "p10" "p11"
## [22] "tot_per_h" "h1" "edad"
## [25] "mes_nac_nna" "ano_nac_nna" "sexo"
## [28] "pco1_a" "pco1_b" "pco1"
## [31] "h5_cp" "h5_sp" "h5_b1_1"
## [34] "h5_b1_2" "h5a_2" "h5_b2_1"
## [37] "h5_b2_2" "h5a_3" "h5_b3_1"
## [40] "h5_b3_2" "h5a_4" "h5b"
## [43] "ecivil" "h5_10" "h5_1a"
## [46] "h5_1b" "h5_20" "h5_2"
## [49] "n_nucleos" "nucleo" "pco2_a"
## [52] "pco2_b" "pco2" "h7a"
## [55] "h7b" "h7c" "h7d"
## [58] "h7e" "h7f" "informante"
## [61] "e1" "e3" "e4a"
## [64] "e4a_esp" "e5a" "e5a_esp"
## [67] "e5b" "e6a_asiste" "e6a_no_asiste"
## [70] "e6a" "e6b_asiste" "e6b_no_asiste"
## [73] "e6b" "e6c_completo" "e6d_preg"
## [76] "e6d_postg" "e7" "cinef13_area"
## [79] "cinef13_subarea" "e8" "e9nom"
## [82] "e9dir" "e9com_cod" "e9pais_cod"
## [85] "e9rbd" "e9rbd_sup" "e9dv"
## [88] "e9depen" "e10" "e11"
## [91] "e12a" "e12b" "e12c"
## [94] "e12d" "e12e" "e13a"
## [97] "e13b_1" "e13b_2" "e13b_3"
## [100] "e13b_4" "e13b_5" "e13b_6"
## [103] "e13b_7" "e13b_8" "e13b_9"
## [106] "e13b_10" "e13b_11" "e13b1"
## [109] "e13b2" "e13b_esp1" "e13b_esp2"
## [112] "e14a" "e14b" "e14c"
## [115] "e14d" "e14e" "e16"
## [118] "e18" "o1" "o2"
## [121] "o3" "o4" "o5"
## [124] "o6" "o7" "o7_esp"
## [127] "o8" "o9a" "o9b"
## [130] "oficio1_08" "oficio4_08" "o10"
## [133] "o11" "o12" "o14"
## [136] "o15" "o16" "o19"
## [139] "o18" "o20" "o21"
## [142] "o22" "o23" "o24"
## [145] "rama1_sub" "rama4_sub" "rama1"
## [148] "rama4" "o25" "o26a"
## [151] "o26b" "o26c" "o26d"
## [154] "o28a_hr" "o28a_min" "o28b"
## [157] "o28c" "o28c_esp" "o28d"
## [160] "o28e" "o29" "o30"
## [163] "o31" "o32" "o32_esp"
## [166] "o32b" "y1" "y2_dias"
## [169] "y2_hrs" "y3a_preg" "y3b_preg"
## [172] "y3c_preg" "y3d_preg" "y3e_preg"
## [175] "y3f_preg" "y3a" "y3ap"
## [178] "y3b" "y3bp" "y3c"
## [181] "y3cp" "y3d" "y3dp"
## [184] "y3e" "y3ep" "y3f_esp"
## [187] "y3f" "y3fp" "y4a_preg"
## [190] "y4b_preg" "y4c_preg" "y4d_preg"
## [193] "y4a" "y4b" "y4c"
## [196] "y4d_esp" "y4d" "y5a_preg"
## [199] "y5b_preg" "y5c_preg" "y5d_preg"
## [202] "y5e_preg" "y5f_preg" "y5g_preg"
## [205] "y5h_preg" "y5i_preg" "y5j_preg"
## [208] "y5k_preg" "y5l_preg" "y5a"
## [211] "y5b" "y5c" "y5d"
## [214] "y5e" "y5f" "y5g"
## [217] "y5h" "y5i" "y5j"
## [220] "y5k" "y5l" "y6"
## [223] "y7" "y8" "y9"
## [226] "y10" "y11_preg" "y11"
## [229] "y12a_preg" "y12a" "y12b_preg"
## [232] "y12b" "y13a_preg" "y13a"
## [235] "y13b_preg" "y13b" "y13c_preg"
## [238] "y13c" "y14a_preg" "y14a"
## [241] "y14b_preg" "y14b" "y14c_preg"
## [244] "y14c" "y15a_preg" "y15a"
## [247] "y15b_preg" "y15b" "y15c_preg"
## [250] "y15c" "y16a_preg" "y16a"
## [253] "y16b_preg" "y16b" "y17_preg"
## [256] "y17" "y18a_preg" "y18a"
## [259] "y18b_preg" "y18b" "y18c_preg"
## [262] "y18c" "y18d_preg" "y18d_esp"
## [265] "y18d" "y19" "y19t"
## [268] "y19n" "y20a" "y20b"
## [271] "y20c" "y20d" "y20e"
## [274] "y20amonto" "y20bmonto" "y20cmonto"
## [277] "y20dmonto" "y20emonto" "y21_canasta"
## [280] "y22_preg" "y22" "y22amonto"
## [283] "y22bmonto" "y22cmonto" "y22dmonto"
## [286] "y23a_preg" "y23a" "y23b"
## [289] "y23c" "y23bmonto" "y23cmonto"
## [292] "y24_preg" "y24" "y25a_preg"
## [295] "y25a" "y25amonto" "y25b_preg"
## [298] "y25b" "y25bmonto" "y25c"
## [301] "y25cmonto" "y25d" "y25dmonto"
## [304] "y25ep" "y25e" "y25fp"
## [307] "y25f" "y25g_preg" "y25g"
## [310] "y25h_preg" "y25hp" "y25h"
## [313] "y25i_preg" "y25imonto" "y25ip"
## [316] "y25j_preg" "y25j" "y25jmonto"
## [319] "y26d_hog" "y26d_preg" "y26d_integrantes"
## [322] "y26d_monto" "y27_preg" "y27_esp"
## [325] "y27" "y28_1b" "y28_1c"
## [328] "y28_1d" "y28_1dmonto" "y28_1e"
## [331] "y28_1f" "y28_1g" "y28_1h"
## [334] "y28_1i" "y28_1j" "y28j_esp"
## [337] "y28_2b1" "y28_2b2" "y28_3b"
## [340] "y28_4b" "y28_1c1" "y28_1c2"
## [343] "y28_1c2monto" "y28_2c1" "y28_2c2"
## [346] "y28_2c" "y28_3c" "y28_4c"
## [349] "y28_2e1" "y28_2e2" "y28_3e"
## [352] "y28_4e" "y28_2f" "y28_3f"
## [355] "y28_4f" "y28_1g1" "y28_2g1"
## [358] "y28_2g2" "y28_2g" "y28_3g"
## [361] "y28_4g" "y28_2h" "y28_3h"
## [364] "y28_4h" "y28_1i1" "y28_2i1"
## [367] "y28_2i2" "y28_2i" "y28_2j"
## [370] "y28_3j" "y28_4j" "s2"
## [373] "s2c" "s3_1" "s3_2"
## [376] "s3_3" "s3_4" "s3_5"
## [379] "s3_6" "s3_7" "s3_8"
## [382] "s3_88" "s3a1" "s3a2"
## [385] "s4" "s5" "s6"
## [388] "s7" "s7_meses" "s8"
## [391] "s9a" "s9b" "s10"
## [394] "s11a" "s11b" "s12"
## [397] "s13" "s13_fonasa" "s15"
## [400] "s16" "s17" "s17b"
## [403] "s18" "s18_esp" "s19a"
## [406] "s19b" "s19c" "s19d"
## [409] "s19e" "s20a_preg" "s20a"
## [412] "s20b" "s21a_preg" "s21a"
## [415] "s21b" "s22a_preg" "s22a"
## [418] "s22b" "s23a_preg" "s23a"
## [421] "s23b" "s24a_preg" "s24a"
## [424] "s24b" "s25a1_preg" "s25b1"
## [427] "s25a2_preg" "s25b2" "s26a"
## [430] "s26b_1" "s26b_2" "s26b_3"
## [433] "s26b_4" "s26b_5" "s26b_6"
## [436] "s26b_7" "s26b_8" "s26b_88"
## [439] "s26b_esp" "s26u" "s26c"
## [442] "s27a" "s27b" "s27c"
## [445] "s28" "s28_esp" "s29"
## [448] "s30" "s30_esp" "s31_1"
## [451] "s31_2" "s31_3" "s31_4"
## [454] "s31_5" "s31_6" "s31_7"
## [457] "s32a" "s32b" "s32c"
## [460] "s32d" "s32e" "s32f"
## [463] "s32g" "s32h" "s32i"
## [466] "s32j" "s33a" "s33b"
## [469] "s33c" "s33d" "s33e"
## [472] "s33f" "s33g" "s33h"
## [475] "s33i" "s33j" "s34a"
## [478] "s34b" "s34c" "r1a"
## [481] "r1a_esp" "r1a_esp_cod" "r1b"
## [484] "r1b_comuna_esp" "r1b_comuna_esp_cod" "r1b_pais_esp"
## [487] "r1b_pais_esp_cod" "r1c" "r1cp"
## [490] "r2" "r2_comuna_esp" "r2_comuna_esp_cod"
## [493] "r2_pais_esp" "r2_pais_esp_cod" "r3"
## [496] "r4" "r5" "r6"
## [499] "r7a" "r7b" "r7c"
## [502] "r7d" "r7e" "r7f"
## [505] "r7g" "r7h" "r7i"
## [508] "r7j" "r7k" "r8a"
## [511] "r8b" "r8c" "r8d"
## [514] "r8e" "r8f" "r8g"
## [517] "r8h" "r9a" "r9b"
## [520] "r9c" "r9d" "r9e"
## [523] "r9f" "r9g" "r9h"
## [526] "r9i" "r9j" "r9k"
## [529] "r9l" "r9m" "r9n"
## [532] "r9o" "r9p" "r9q"
## [535] "r9r" "r9s" "r9t"
## [538] "r9_esp" "r11" "r12a"
## [541] "r12b" "r13a" "r13b"
## [544] "r14" "r15" "r17a"
## [547] "r17b" "r17c" "r17d"
## [550] "r17e" "r18" "v1"
## [553] "v2" "v3" "v4"
## [556] "v5" "v6" "v7"
## [559] "v9" "v10" "v11_o1"
## [562] "v11_o2" "v12" "v12mt"
## [565] "v13" "v13_propia" "v13_arrendada"
## [568] "v13_cedida" "v13b_1" "v13b_2"
## [571] "v13b_3" "v13b_4" "v13b_5"
## [574] "v13b_6" "v13b_7" "v14"
## [577] "v15" "v16" "v17"
## [580] "v18" "v19" "v20"
## [583] "v20_esp" "v20_red" "v21"
## [586] "v22" "v23" "v23_sistema"
## [589] "v23_cajon" "v24" "v25"
## [592] "v26" "v27a" "v27b"
## [595] "v28" "v29a" "v29b"
## [598] "v30" "v31" "v32"
## [601] "v33" "v34a" "v34b"
## [604] "v34c" "v35a" "v35b"
## [607] "v35c" "v35d" "v35e"
## [610] "v35f" "v35g" "v35h"
## [613] "v35i" "v36a" "v36b"
## [616] "v36c" "v36d" "v36e"
## [619] "v37a" "v37b" "v37c"
## [622] "v37d" "v37e" "v37f"
## [625] "v37g" "v38" "os_presente"
## [628] "os1" "os1_esp" "genero"
## [631] "genero_esp" "trans" "y0101"
## [634] "y0301" "y0302" "y0303"
## [637] "y0304" "y0305" "y0306"
## [640] "y0401" "y0402" "y0403"
## [643] "y0404" "y0501" "y0502"
## [646] "y0503" "y0504" "y0505"
## [649] "y0506" "y0507" "y0508"
## [652] "y0509" "y0510" "y0511"
## [655] "y0512" "yosa" "y0701"
## [658] "y0801" "y0901" "yosi"
## [661] "y1101" "yre1" "yama"
## [664] "ymes" "yfa1" "yfa2"
## [667] "ytro" "yta1" "yta2"
## [670] "ydes" "yah1" "yah2"
## [673] "yrut" "yre2" "yre3"
## [676] "yac2" "yids" "ydon"
## [679] "ydim" "yotr" "yfam"
## [682] "y2001" "y2002" "y2003"
## [685] "y2004" "y2005" "y2101"
## [688] "y2201" "y2202" "y2203"
## [691] "y2204" "y2301" "y2302"
## [694] "y2303" "y2401" "y2501"
## [697] "y2502" "y2503" "y2504"
## [700] "y2505" "y2506" "y2507"
## [703] "y2508p" "y2508" "y2509"
## [706] "y2510" "y2604" "y2701"
## [709] "y2804" "y280201" "y280202"
## [712] "y280101" "y280301" "y280302"
## [715] "y2803" "yinv0101" "yinv0102"
## [718] "yinv02" "ymon0101" "ymon0102"
## [721] "ymon02" "yorf" "yesp0101"
## [724] "yesp0102" "yesp" "yotp"
## [727] "yaut" "ysub1" "ysub2"
## [730] "ysub" "ytot" "y0101h"
## [733] "y0301h" "y0302h" "y0303h"
## [736] "y0304h" "y0305h" "y0306h"
## [739] "y0401h" "y0402h" "y0403h"
## [742] "y0404h" "y0501h" "y0502h"
## [745] "y0503h" "y0504h" "y0505h"
## [748] "y0506h" "y0507h" "y0508h"
## [751] "y0509h" "y0510h" "y0511h"
## [754] "y0512h" "yosah" "y0701h"
## [757] "y0801h" "y0901h" "yosih"
## [760] "y1101h" "yre1h" "yamah"
## [763] "ymesh" "yfa1h" "yfa2h"
## [766] "ytroh" "yta1h" "yta2h"
## [769] "ydesh" "yah1h" "yah2h"
## [772] "yruth" "yre2h" "yre3h"
## [775] "yac2h" "yidsh" "ydonh"
## [778] "ydimh" "yotrh" "yfamh"
## [781] "y2001h" "y2002h" "y2003h"
## [784] "y2004h" "y2005h" "y2101h"
## [787] "y2201h" "y2202h" "y2203h"
## [790] "y2204h" "y2301h" "y2302h"
## [793] "y2303h" "y2401h" "y2501h"
## [796] "y2502h" "y2503h" "y2504h"
## [799] "y2505h" "y2506h" "y2507h"
## [802] "y2508h" "y2509h" "y2510h"
## [805] "y2604h" "y2701h" "y2804h"
## [808] "y280201h" "y280202h" "y280101h"
## [811] "y280301h" "y280302h" "y2803h"
## [814] "yinv0101h" "yinv0102h" "yinv02h"
## [817] "ymon0101h" "ymon0102h" "ymon02h"
## [820] "yorfh" "yesp0101h" "yesp0102h"
## [823] "yesph" "yotph" "yauth"
## [826] "ysub1h" "ysub2h" "ysubh"
## [829] "yaimh" "ytoth" "ypch"
## [832] "y0101c" "y0701c" "y280201c"
## [835] "y280301c" "y2803c" "yautcor"
## [838] "ytotcor" "y0101ch" "y0701ch"
## [841] "y280201ch" "y280301ch" "y2803ch"
## [844] "yautcorh" "yaimcorh" "ytotcorh"
## [847] "ypc" "li" "lp"
## [850] "nae" "yae" "pobreza"
## [853] "yoprcor" "yoprcorh" "ytrabajocor"
## [856] "ytrabajocorh" "ymonecorh" "ypchtrabcor"
## [859] "ypchautcor" "dau" "qaut"
## [862] "dautr" "qautr" "hh_d_asis"
## [865] "hh_d_rez" "hh_d_esc" "hh_d_mal"
## [868] "hh_d_prevs" "hh_d_acc" "hh_d_act"
## [871] "hh_d_cot" "hh_d_jub" "hh_d_hacina"
## [874] "hh_d_estado" "hh_d_habitab" "hh_d_servbas"
## [877] "hh_d_medio" "hh_d_equipo" "hh_d_tiempo"
## [880] "hh_d_accesi" "hh_d_entorno" "hh_d_hapoyo"
## [883] "hh_d_part" "hh_d_tsocial" "hh_d_seg"
## [886] "hh_d_appart" "pobreza_multi_5d" "pobreza_multi_4d"
## [889] "disc_wg" "depen_grado" "esc"
## [892] "desercion" "rezago" "asiste"
## [895] "educ" "depen" "activ"
## [898] "asal" "contrato" "cotiza"
## [901] "lugar_nac" "pueblos_indigenas" "n_ocupados"
## [904] "n_desocupados" "n_inactivos" "conyuge_jh"
## [907] "numper" "numnuc" "men18c"
## [910] "may60c" "tipohogar" "tot_hog"
## [913] "ind_hacina" "indsan" "ten_viv"
## [916] "ten_viv_f" "allega_ext" "allega_int"
## # A tibble: 6 × 918
## id_vivienda folio id_persona region area cod_upm nse estrato hogar
## <dbl> <dbl> <dbl> <dbl+lb> <dbl+l> <dbl> <dbl+l> <dbl> <dbl>
## 1 1000901 1.00e8 1 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## 2 1000901 1.00e8 2 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## 3 1000901 1.00e8 3 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## 4 1000902 1.00e8 1 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## 5 1000902 1.00e8 2 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## 6 1000902 1.00e8 3 16 [Reg… 2 [Rur… 10009 4 [Baj… 1630324 1
## # ℹ 909 more variables: expr <dbl>, expr_osig <dbl>, varstrat <dbl>,
## # varunit <dbl>, fecha_entrev <date>, p1 <dbl+lbl>, p2 <dbl+lbl>,
## # p3 <dbl+lbl>, p4 <dbl+lbl>, p9 <dbl>, p10 <dbl+lbl>, p11 <dbl>,
## # tot_per_h <dbl>, h1 <dbl+lbl>, edad <dbl>, mes_nac_nna <dbl+lbl>,
## # ano_nac_nna <dbl+lbl>, sexo <dbl+lbl>, pco1_a <dbl+lbl>, pco1_b <dbl+lbl>,
## # pco1 <dbl+lbl>, h5_cp <dbl+lbl>, h5_sp <dbl+lbl>, h5_b1_1 <dbl>,
## # h5_b1_2 <dbl>, h5a_2 <dbl+lbl>, h5_b2_1 <dbl>, h5_b2_2 <dbl>, …
## Warning: Unknown or uninitialised column: `ingreso`.
## Length Class Mode
## 0 NULL NULL
## [1] FALSE TRUE
# 1) Cargar archivo SPSS
casen2022 <- casen2022 |>
janitor::clean_names()
# 2) Lista de nombres de todas las variables
vars <- names(casen2022)
# 3) Buscar candidatos a variables de diseño
peso_vars <- vars[str_detect(vars, regex("factor|expan|peso", ignore_case = TRUE))]
estrato_vars <- vars[str_detect(vars, regex("estrat", ignore_case = TRUE))]
upm_vars <- vars[str_detect(vars, regex("upm|psu|conglo", ignore_case = TRUE))]
# 4) Buscar candidatos a variables de ingreso
ingreso_vars <- vars[str_detect(vars, regex("ingreso|autonom|trabaj|monet", ignore_case = TRUE))]
# 5) Mostrar resultados
list(
posibles_pesos = peso_vars,
posibles_estrato = estrato_vars,
posibles_upm = upm_vars,
posibles_ingresos = ingreso_vars
)
## $posibles_pesos
## character(0)
##
## $posibles_estrato
## [1] "estrato"
##
## $posibles_upm
## [1] "cod_upm"
##
## $posibles_ingresos
## [1] "ytrabajocor" "ytrabajocorh"
## [1] "expr" "expr_osig"
Note that the echo = FALSE
parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
# 2) Variables clave
# Estrato: estrato
# UPM: cod_upm
# Peso: expr
# Ingreso principal: ytrabajocor (persona), ytrabajocorh (hogar)
# 3) Crear diseño muestral
options(survey.lonely.psu = "adjust")
diseño_casen <- svydesign(
ids = ~cod_upm,
strata = ~estrato,
weights = ~expr,
data = casen2022
)
diseño_casen <- convey_prep(diseño_casen)
# 4) Estadísticas básicas
media_ingreso <- svymean(~ytrabajocor, diseño_casen, na.rm = TRUE)
mediana_ingreso <- svyquantile(~ytrabajocor, diseño_casen, 0.5, na.rm = TRUE)
# 5) Desigualdad
gini_ingreso <- svygini(~ytrabajocor, diseño_casen, na.rm = TRUE)
theil_ingreso <- svygei(~ytrabajocor, diseño_casen, epsilon = 1, na.rm = TRUE)
mld_ingreso <- svygei(~ytrabajocor, diseño_casen, epsilon = 0, na.rm = TRUE)
# 6) Quantile ratios / S80/S20
p10 <- svyquantile(~ytrabajocor, diseño_casen, 0.10, na.rm = TRUE)
p90 <- svyquantile(~ytrabajocor, diseño_casen, 0.90, na.rm = TRUE)
s20 <- svyquantile(~ytrabajocor, diseño_casen, 0.20, na.rm = TRUE)
s80 <- svyquantile(~ytrabajocor, diseño_casen, 0.80, na.rm = TRUE)
p90_p10_ratio <- coef(p90)/coef(p10)
s80_s20_ratio <- coef(s80)/coef(s20)
# 7) Resultados finales
resultados <- list(
media = media_ingreso,
mediana = mediana_ingreso,
gini = gini_ingreso,
theil = theil_ingreso,
mld = mld_ingreso,
p90_p10_ratio = p90_p10_ratio,
s80_s20_ratio = s80_s20_ratio
)
# 8) Mostrar resultados
resultados
## $media
## mean SE
## ytrabajocor 794509 8093.8
##
## $mediana
## $ytrabajocor
## quantile ci.2.5 ci.97.5 se
## 0.5 506667 503333 514167 2763.538
##
## attr(,"hasci")
## [1] TRUE
## attr(,"class")
## [1] "newsvyquantile"
##
## $gini
## gini SE
## ytrabajocor 0.46195 0.0037
##
## $theil
## gei SE
## ytrabajocor 0.41664 0.01
##
## $mld
## gei SE
## ytrabajocor 0.42112 0.0063
##
## $p90_p10_ratio
## ytrabajocor
## 8
##
## $s80_s20_ratio
## ytrabajocor
## 3.10559
# Suponiendo que ya tienes diseño preparado
# diseño_casen <- svydesign(...) %>% convey_prep()
# Preparar datos para ggplot
casen_plot <- na.omit(casen2022[, c("ytrabajocor", "expr")])
# Calcular percentiles y media
p10 <- coef(svyquantile(~ytrabajocor, diseño_casen, 0.10))
p90 <- coef(svyquantile(~ytrabajocor, diseño_casen, 0.90))
p50 <- coef(svyquantile(~ytrabajocor, diseño_casen, 0.50))
media <- coef(svymean(~ytrabajocor, diseño_casen))
s20 <- coef(svyquantile(~ytrabajocor, diseño_casen, 0.20))
s80 <- coef(svyquantile(~ytrabajocor, diseño_casen, 0.80))
# Filtrar solo valores positivos para escala log
vline_values <- c(media, p50, p10, p90)
vline_values <- vline_values[vline_values > 0]
# Crear gráfico con densidad ponderada y log X
ggplot(casen_plot, aes(x = ytrabajocor)) +
geom_density(aes(weight = expr), fill = "steelblue", alpha = 0.5) +
geom_vline(xintercept = media, color = "green", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = p50, color = "red", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = p10, color = "orange", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = p90, color = "purple", linetype = "dashed", linewidth = 1) +
scale_x_log10(labels = comma) +
labs(title = "Distribución de Ingresos CASEN 2022 (log) con densidad ponderada",
subtitle = "Media (verde), Mediana (roja), P10 (naranja), P90 (morado)",
x = "Ingreso individual (CLP, escala log)",
y = "Densidad ponderada") +
theme_minimal()
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_vline()`).
## Removed 1 row containing missing values or values outside the scale range
## (`geom_vline()`).
## Removed 1 row containing missing values or values outside the scale range
## (`geom_vline()`).
# Suponiendo que ya tienes diseño preparado
# diseño_casen <- svydesign(...) %>% convey_prep()
# Calcular estadísticas básicas
media <- svymean(~ytrabajocor, diseño_casen, na.rm = TRUE)
p50 <- svyquantile(~ytrabajocor, diseño_casen, 0.5, na.rm = TRUE)
gini <- svygini(~ytrabajocor, diseño_casen, na.rm = TRUE)
theil <- svygei(~ytrabajocor, diseño_casen, epsilon = 1, na.rm = TRUE)
mld <- svygei(~ytrabajocor, diseño_casen, epsilon = 0, na.rm = TRUE)
p10 <- svyquantile(~ytrabajocor, diseño_casen, 0.10, na.rm = TRUE)
p90 <- svyquantile(~ytrabajocor, diseño_casen, 0.90, na.rm = TRUE)
s20 <- svyquantile(~ytrabajocor, diseño_casen, 0.20, na.rm = TRUE)
s80 <- svyquantile(~ytrabajocor, diseño_casen, 0.80, na.rm = TRUE)
# Ratios
p90_p10_ratio <- coef(p90)/coef(p10)
s80_s20_ratio <- coef(s80)/coef(s20)
# Generar informe automático
cat("============================================\n")
## ============================================
## Informe de Desigualdad CASEN 2022
## ============================================
## Media de ingreso: 794509 CLP
## Mediana de ingreso: 506667 CLP
## Índice de Gini: 0.462
## Theil (GEI, epsilon=1): 0.417
## MLD (GEI, epsilon=0): 0.421
## P90/P10: 8.00
## S80/S20: 3.11
##
## Interpretación:
cat("- La media es mayor que la mediana, indicando que la distribución está sesgada a la derecha (unos pocos ingresos muy altos elevan la media).\n")
## - La media es mayor que la mediana, indicando que la distribución está sesgada a la derecha (unos pocos ingresos muy altos elevan la media).
## - El Gini de ~0.46 refleja desigualdad moderada-alta.
cat("- Theil y MLD muestran que la desigualdad está relativamente equilibrada entre cola alta y baja.\n")
## - Theil y MLD muestran que la desigualdad está relativamente equilibrada entre cola alta y baja.
cat("- P90/P10 = ", round(p90_p10_ratio,2), " indica que los ingresos del 10% más ricos son 8 veces mayores que los del 10% más pobres.\n")
## - P90/P10 = 8 indica que los ingresos del 10% más ricos son 8 veces mayores que los del 10% más pobres.
cat("- S80/S20 = ", round(s80_s20_ratio,2), " muestra que el 20% más rico concentra 3 veces más ingreso que el 20% más pobre.\n")
## - S80/S20 = 3.11 muestra que el 20% más rico concentra 3 veces más ingreso que el 20% más pobre.
Al calcular media, mediana, Gini, Theil, MLD, P90/P10 y S80/S20 sobre la CASEN completa, estás midiendo la desigualdad de ingresos a nivel nacional, o sea, de toda la población encuestada, ponderando por los factores de expansión. Esto sí tiene valor, pero también tiene limitaciones:
Lo que este análisis refleja
Desigualdad promedio nacional: cómo se distribuyen los ingresos de todas las personas encuestadas en Chile.
Es útil para:
Comparaciones históricas entre años de CASEN.
Comparar regiones si se desagrega por estrato.
Entender la concentración de ingresos a nivel país.
Limitaciones
No analiza subgrupos específicos:
Por ejemplo: desigualdad por región, género, grupo etario, sector urbano/rural, educación, etnia, etc.
La desigualdad puede ser muy diferente dentro de estos subgrupos.
Promedios y Gini nacionales esconden heterogeneidad:
Una región con bajos ingresos puede tener desigualdad diferente a otra más rica.
Al mirar solo el total, se pierde esta información.
Diseño muestral complejo:
Aunque tu análisis pondera correctamente, las estimaciones son promedios ponderados de la encuesta, no censos exactos.
# Preparar diseño
# diseño_casen <- svydesign(...) %>% convey_prep()
subgrupo <- "region"
niveles <- unique(casen2022[[subgrupo]])
resultados <- list()
for (nivel in niveles) {
sub <- subset(diseño_casen, get(subgrupo) == nivel)
# Calcular medidas
media <- coef(svymean(~ytrabajocor, sub, na.rm=TRUE))
mediana <- coef(svyquantile(~ytrabajocor, sub, 0.5, na.rm=TRUE))
gini <- coef(svygini(~ytrabajocor, sub, na.rm=TRUE))
theil <- coef(svygei(~ytrabajocor, sub, epsilon=1, na.rm=TRUE))
mld <- coef(svygei(~ytrabajocor, sub, epsilon=0, na.rm=TRUE))
p10 <- coef(svyquantile(~ytrabajocor, sub, 0.10, na.rm=TRUE))
p90 <- coef(svyquantile(~ytrabajocor, sub, 0.90, na.rm=TRUE))
s20 <- coef(svyquantile(~ytrabajocor, sub, 0.20, na.rm=TRUE))
s80 <- coef(svyquantile(~ytrabajocor, sub, 0.80, na.rm=TRUE))
# Ratios
p90_p10 <- p90/p10
s80_s20 <- s80/s20
resultados[[nivel]] <- data.frame(
subgrupo = nivel,
media, mediana, gini, theil, mld,
p90_p10_ratio = p90_p10,
s80_s20_ratio = s80_s20
)
}
# Combinar resultados
final <- do.call(rbind, resultados)
final
## subgrupo media mediana gini theil mld
## ytrabajocor 1 710380.5 500000 0.4069538 0.3004204 0.3051094
## ytrabajocor1 2 889103.4 600000 0.4336315 0.3427765 0.3469849
## ytrabajocor2 3 740888.1 550000 0.4052503 0.2930585 0.3250187
## ytrabajocor3 4 748913.5 500000 0.4485198 0.3956392 0.3786897
## ytrabajocor4 5 674815.2 474124 0.4381554 0.3729286 0.3849467
## ytrabajocor5 6 671555.5 500000 0.4011255 0.3214568 0.3279941
## ytrabajocor6 7 561819.4 435000 0.3692668 0.2627670 0.2851171
## ytrabajocor7 8 683578.9 500000 0.4364093 0.3563079 0.4135248
## ytrabajocor8 9 555523.4 430000 0.4307298 0.3537203 0.4337678
## ytrabajocor9 10 642825.8 484167 0.4303801 0.3532582 0.4091999
## ytrabajocor10 11 813253.1 590000 0.4468383 0.3637776 0.4240311
## ytrabajocor11 12 850964.6 604167 0.3998389 0.2973919 0.2996280
## ytrabajocor12 13 941873.3 600000 0.4801698 0.4451981 0.4394862
## ytrabajocor13 14 642750.1 454167 0.4611304 0.4393904 0.4733391
## ytrabajocor14 15 671324.4 500000 0.4143719 0.3149843 0.3213363
## ytrabajocor15 16 552665.0 420000 0.3958328 0.2921798 0.3477129
## p90_p10_ratio s80_s20_ratio
## ytrabajocor 7.000000 3.083853
## ytrabajocor1 7.678100 3.010835
## ytrabajocor2 7.165835 2.857143
## ytrabajocor3 7.500000 3.333333
## ytrabajocor4 8.635693 3.000000
## ytrabajocor5 6.000000 2.383811
## ytrabajocor6 5.263158 2.358333
## ytrabajocor7 8.711113 3.127777
## ytrabajocor8 10.456670 3.750000
## ytrabajocor9 10.072575 3.035714
## ytrabajocor10 9.236111 3.822719
## ytrabajocor11 5.416667 2.762500
## ytrabajocor12 10.000000 3.201755
## ytrabajocor13 12.750000 3.924241
## ytrabajocor14 6.500000 3.128333
## ytrabajocor15 6.666667 2.946664
library(dplyr)
library(ggplot2)
library(scales)
# 1. Definir subgrupos disponibles en tu dataset
subgrupos <- c("region", "sexo") # eliminar variables vacías como "educacion"
# 2. Filtrar datos válidos para log-scale
casen2022_plot <- casen2022 %>%
filter(!is.na(ytrabajocor) & ytrabajocor > 0)
# 3. Generar gráficos de densidad ponderada por subgrupo
for (sg in subgrupos) {
p <- ggplot(casen2022_plot, aes(x = !!sym("ytrabajocor"), weight = !!sym("expr"))) +
geom_density(fill = "steelblue", alpha = 0.5) +
scale_x_log10(labels = comma) +
facet_wrap(as.formula(paste("~", sg))) +
labs(
title = paste("Distribución de ingresos por", sg),
x = "Ingreso individual (CLP, escala log)",
y = "Densidad ponderada"
) +
theme_minimal()
print(p)
}
##
## Adjuntando el paquete: 'Hmisc'
## The following object is masked from 'package:survey':
##
## deff
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
# ---------------------------
# 1. Filtrar datos válidos
# ---------------------------
casen2022_plot <- casen2022 %>%
filter(!is.na(ytrabajocor) & ytrabajocor > 0)
# ---------------------------
# 2. Subgrupos válidos
# ---------------------------
subgrupos <- c("region", "sexo") # elimina variables vacías como "educacion"
# ---------------------------
# 3. Crear gráficos avanzados
# ---------------------------
for (sg in subgrupos) {
# Calcular estadísticas ponderadas por subgrupo
stats <- casen2022_plot %>%
group_by(!!sym(sg)) %>%
summarise(
media = weighted.mean(ytrabajocor, expr, na.rm = TRUE),
mediana = Hmisc::wtd.quantile(ytrabajocor, weights = expr, probs = 0.5),
p10 = Hmisc::wtd.quantile(ytrabajocor, weights = expr, probs = 0.1),
p90 = Hmisc::wtd.quantile(ytrabajocor, weights = expr, probs = 0.9),
.groups = "drop"
)
# Generar gráfico
p <- ggplot(casen2022_plot, aes(x = !!sym("ytrabajocor"), weight = !!sym("expr"))) +
# Densidad ponderada
geom_density(fill = "steelblue", alpha = 0.4) +
# Líneas de colas P10 y P90
geom_vline(data = stats, aes(xintercept = p10), color = "red", linetype = "dashed") +
geom_vline(data = stats, aes(xintercept = p90), color = "red", linetype = "dashed") +
# Línea de media y mediana
geom_vline(data = stats, aes(xintercept = media), color = "orange", size = 1) +
geom_vline(data = stats, aes(xintercept = mediana), color = "green", size = 1) +
# Escala logarítmica
scale_x_log10(labels = comma) +
# Facetas por subgrupo
facet_wrap(as.formula(paste("~", sg))) +
# Etiquetas y tema
labs(
title = paste("Distribución de ingresos ponderada por", sg),
x = "Ingreso individual (CLP, escala log)",
y = "Densidad ponderada",
caption = "Líneas: naranja = media, verde = mediana, rojo = P10/P90"
) +
theme_minimal()
print(p)
}
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
1️⃣ Descomposición multinivel de desigualdad
Qué es: Descomponer la desigualdad no solo entre individuos, sino entre niveles jerárquicos: regiones, comunas, sexo, educación.
Cómo aporta: Permite responder preguntas como: “¿Cuánto de la desigualdad se explica por diferencias regionales vs diferencias individuales?”.
Herramientas en R:
svygei para GEI por subgrupos
decomp o convey para descomposición de Theil y MLD
Valor añadido: Detecta fuentes estructurales de desigualdad que los análisis simples no muestran.
2️⃣ Análisis de colas extremas con percentiles dinámicos
En lugar de solo P90/P10 o S80/S20, puedes calcular ratios P95/P5, P99/P1, Q-top/bottom ratios.
Visualizar cómo la cola superior concentra riqueza frente a la inferior.
Ejemplo gráfico: Curvas de densidad logarítmica + sombreado de percentiles extremos.
3️⃣ Índices generalizados de entropía con ε adaptativo
GEI con varios valores de ε (0, 1, 2, 3…) permite ver qué tan sensible es la desigualdad a los ricos vs los pobres.
Combinar esto con gráficos de calor por subgrupo da un panorama ultradetallado de concentración.
4️⃣ Desigualdad relativa vs desigualdad absoluta
Calcular diferencia absoluta de ingresos entre percentiles (P90-P10) y compararla con ratio relativo.
Permite detectar si la desigualdad crece porque los ricos suben más o porque los pobres caen más.
5️⃣ Desigualdad multidimensional
Combinar ingreso con educación, salud, vivienda: generar un índice compuesto de desigualdad usando PCA o ponderación.
Herramientas: FactoMineR, survey + convey para ponderar cada dimensión.
Esto le da un valor mucho más completo al análisis que mirar solo ingresos.
6️⃣ Visualizaciones innovadoras
Curvas de Lorenz por subgrupo y por región, todas en un mismo gráfico con colores y transparencias.
Boxplots ponderados en escala logarítmica, con mediana y P90/P10 destacados.
Mapas de calor de desigualdad: cada comuna coloreada según Gini, Theil o ratio P90/P10.
Densidad ponderada logarítmica por subgrupo, con sombreado de cola extrema y líneas de mediana.
7️⃣ Análisis de volatilidad de desigualdad
Estimar intervalos de confianza robustos usando bootstrap ponderado con survey para Gini, Theil y Atkinson.
Permite decir no solo “el Gini es 0.46”, sino “con 95% de confianza, Gini está entre 0.45 y 0.47”.
8️⃣ Curvas de concentración cruzadas
Analizar cómo se concentra el ingreso entre subgrupos cruzados: ej. mujeres vs hombres por nivel educativo y región.
Esto permite ver interacciones complejas de desigualdad que rara vez se muestran en Chile.
9️⃣ Medidas de movilidad intergeneracional (si hay información)
Si la CASEN incluye educación de los padres o trayectoria laboral, puedes calcular la probabilidad de que alguien salga de su decil de ingreso.
Con esto, la desigualdad deja de ser estática y se vuelve dinámica.
🔟 Índice de vulnerabilidad al extremo
Definir un índice que combine:
Pobreza relativa (p10 o p20)
Riesgo de caer en pobreza extrema por shocks
Útil para políticas públicas y análisis predictivo de desigualdad futura.
💡 Resumen del enfoque ultracompleto:
No solo medir desigualdad global.
Descomponerla por niveles y subgrupos.
Analizar colas extremas y relaciones absolutas vs relativas.
Visualizar con mapas, curvas y densidades logarítmicas.
Incluir desigualdad multidimensional y movilidad intergeneracional si es posible.
Estimar intervalos de confianza robustos para todas las medidas.
Si quieres, puedo hacer un prototipo de código R que combine todas estas ideas para la CASEN 2022, generando:
Tabla de desigualdad por subgrupo y por comuna
Curvas de Lorenz y densidades logarítmicas ponderadas
Mapas de calor de Gini y Theil
Ratios de colas extremas y bootstrap de intervalos de confianza
Esto sería un análisis único y profesional que nadie más ha hecho en Chile.
## Warning: package 'sf' was built under R version 4.4.3
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
# Ruta al archivo shapefile descomprimido
shp_path <- "microdatos_manzana/Microdatos_Manzana.shp"
# Cargar el shapefile
manzanas <- st_read(shp_path)
## Reading layer `Microdatos_Manzana' from data source
## `C:\Users\chris\OneDrive\Escritorio\Casen 2022\casen 2022\microdatos_manzana\Microdatos_Manzana.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 151545 features and 55 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -12183260 ymin: -7350097 xmax: -7523825 ymax: -2060205
## Projected CRS: WGS 84 / Pseudo-Mercator
## Simple feature collection with 151545 features and 55 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -12183260 ymin: -7350097 xmax: -7523825 ymax: -2060205
## Projected CRS: WGS 84 / Pseudo-Mercator
## First 10 features:
## CUT REGION PROVINCIA COMUNA NOMBRE_DIS
## 1 13101 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO SANTIAGO MATADERO
## 2 13102 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO CERRILLOS DIVINO MAESTRO
## 3 13102 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO CERRILLOS DIVINO MAESTRO
## 4 13101 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO SANTIAGO MATADERO
## 5 13102 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO CERRILLOS VILLA MÉXICO
## 6 13101 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO SANTIAGO FRANKLIN
## 7 13102 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO CERRILLOS DIVINO MAESTRO
## 8 13101 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO SANTIAGO SAN EUGENIO
## 9 13102 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO CERRILLOS LO ERRÁZURIZ
## 10 13101 REGIÓN METROPOLITANA DE SANTIAGO SANTIAGO SANTIAGO MATADERO
## CODIGO_DIS MANZENT ZONA_CENSA MANZANA TOTAL_PERS TOTAL_HOMB
## 1 21 13101211002011 2 11 189 90
## 2 3 13102031005035 5 35 80 39
## 3 3 13102031003007 3 7 29 13
## 4 21 13101211002010 2 10 146 78
## 5 2 13102021003001 3 1 74 35
## 6 20 13101201002025 2 25 61 31
## 7 3 13102031003017 3 17 59 27
## 8 24 13101241001026 1 26 205 100
## 9 4 13102041001038 1 38 47 20
## 10 21 13101211002006 2 6 116 52
## TOTAL_MUJE PERSONAS_0 PERSONAS_6 PERSONAS_1 PERSONAS_M
## 1 99 9 14 142 24
## 2 41 8 7 51 14
## 3 16 Indeterminado Indeterminado 17 8
## 4 68 8 14 100 24
## 5 39 8 5 40 21
## 6 30 Indeterminado Indeterminado 43 11
## 7 32 6 Indeterminado 41 Indeterminado
## 8 105 22 23 128 32
## 9 27 Indeterminado Indeterminado 38 4
## 10 64 9 10 70 27
## PERSONAS_E PUEBLOS_IN TOTAL_VIV_ TOTAL_VIV1 VIV_OCUPA_ TOTAL_VIVI
## 1 15 14 100 0 83 100
## 2 Indeterminado 5 20 0 20 20
## 3 0 Indeterminado 9 0 9 9
## 4 11 5 49 0 49 49
## 5 0 Indeterminado 27 0 27 27
## 6 0 20 22 0 19 22
## 7 Indeterminado Indeterminado 20 0 20 20
## 8 21 25 47 1 46 48
## 9 Indeterminado 9 16 0 15 16
## 10 12 7 46 0 41 46
## CANTIDAD_H VIV_TIPO_C VIV_TIPO_D VIV_TIPO_T VIV_TIPO_P VIV_TIPO_M VIV_TIPO_1
## 1 83 4 89 0 7 0 0
## 2 23 20 0 0 0 0 0
## 3 11 9 0 0 0 0 0
## 4 50 0 49 0 0 0 0
## 5 27 27 0 0 0 0 0
## 6 19 21 0 0 0 0 0
## 7 20 18 0 0 2 0 0
## 8 51 44 0 0 3 0 0
## 9 16 16 0 0 0 0 0
## 10 41 1 45 0 0 0 0
## VIV_TIPO_O VIV_PARED_ VIV_PARED1 VIV_PARE_1 VIV_PARE_2 VIV_PARE_3 VIV_PARE_4
## 1 0 74 9 0 0 0 0
## 2 0 2 12 4 2 0 0
## 3 0 0 9 0 0 0 0
## 4 0 41 8 0 0 0 0
## 5 0 11 16 0 0 0 0
## 6 1 4 12 0 3 0 0
## 7 0 2 9 8 1 0 0
## 8 0 7 27 2 1 9 0
## 9 0 0 15 0 0 0 0
## 10 0 17 24 0 0 0 0
## VIV_TECHO_ VIV_TECHO1 VIV_TECH_1 VIV_TECH_2 VIV_TECH_3 VIV_TECH_4 VIV_TECH_5
## 1 34 38 11 0 0 0 0
## 2 5 0 14 1 0 0 0
## 3 0 0 9 0 0 0 0
## 4 22 1 26 0 0 0 0
## 5 24 0 2 1 0 0 0
## 6 8 0 10 1 0 0 0
## 7 2 0 16 1 0 0 0
## 8 5 0 41 0 0 0 0
## 9 1 0 13 1 0 0 0
## 10 3 3 35 0 0 0 0
## VIV_PISO_P VIV_PISO_R VIV_PISO_B VIV_PISO_C VIV_PISO_T VIV_MATERI VIV_MATE_1
## 1 83 0 0 0 0 83 0
## 2 14 0 6 0 0 12 8
## 3 9 0 0 0 0 9 0
## 4 46 0 0 0 0 46 0
## 5 27 0 0 0 0 26 1
## 6 19 0 0 0 0 15 4
## 7 19 0 1 0 0 16 3
## 8 44 1 1 0 0 34 12
## 9 11 0 4 0 0 11 4
## 10 41 0 0 0 0 41 0
## VIV_MATE_2 VIV_AGUA_R VIV_AGUA_P VIV_AGUA_C VIV_AGUA_1
## 1 0 82 0 0 0
## 2 0 20 0 0 0
## 3 0 9 0 0 0
## 4 0 49 0 0 0
## 5 0 27 0 0 0
## 6 0 19 0 0 0
## 7 0 20 0 0 0
## 8 0 46 0 0 0
## 9 0 15 0 0 0
## 10 0 41 0 0 0
## geometry
## 1 MULTIPOLYGON (((-7864556 -3...
## 2 MULTIPOLYGON (((-7874018 -3...
## 3 MULTIPOLYGON (((-7872556 -3...
## 4 MULTIPOLYGON (((-7864679 -3...
## 5 MULTIPOLYGON (((-7871985 -3...
## 6 MULTIPOLYGON (((-7863425 -3...
## 7 MULTIPOLYGON (((-7872608 -3...
## 8 MULTIPOLYGON (((-7866881 -3...
## 9 MULTIPOLYGON (((-7871868 -3...
## 10 MULTIPOLYGON (((-7864734 -3...
# 2. Seleccionar solo columna COMUNA y geometry
manzanas_simple <- manzanas %>% select(COMUNA, geometry)
# 3. Filtrar solo Macul
macul <- manzanas_simple %>% filter(COMUNA == "MACUL")
# 4. Graficar
ggplot(macul) +
geom_sf(fill = "lightblue", color = "white") +
labs(title = "Comuna de Macul: Manzanas Censales",
subtitle = "Fuente: INE Chile, Microdatos Manzana") +
theme_minimal()