Previo

Paquetería

if (!require("pacman")) install.packages("pacman") # instala pacman si se requiere
## Loading required package: pacman
pacman::p_load(tidyverse, 
               readxl,writexl,googlesheets4, # importar hojas de cálculo
               haven, foreign, # importación de dta y sav
               sjlabelled, # etiquetas
               janitor, skimr) #limpieza y verificación

Directorio

En caso que no tengas un proyecto,establecer el diretorio puede ayudar

¡Recuerda establecer tu directorio!

setwd("/Users/anaescoto/Dropbox/2020/2021-1 R para Demográfos/repo/R_Demo")

Bases

Base de competitividad estatal - IMCO

ICE_2018 <- read_excel("./datos/ICE_2018.xlsx", sheet = "para_importar")
## New names:
## * `` -> ...102
## * `` -> ...105
#View(ICI_2018)

Y limpiamos los nombres:

ICE_2018<-clean_names(ICE_2018)

Base de ECOVID - ML

ecovid0420 <- read_dta("./datos/ecovid0420.dta")

Formatos y un poco más

Existen operaciones que cambian las propiedades de nuestras bases de datos.

class(ICE_2018$region)
## [1] "character"

Existen varios “as”

class(as.numeric(ICE_2018$region))
## [1] "numeric"

Con esto podemos verificar el tipo de variable, es de especial utilidad para los gráficos que veremos más adelante.

Veamos un caso contrario

class(ICE_2018$matrimonio_igualitario)
## [1] "numeric"

En realidad, de acuerdo a la documentación:

  • 0=No se considera el matrimonio igualitario

  • 1=Sí se considera el matrimonio igualitario

as_factor(ICE_2018$matrimonio_igualitario)  # checa también as.factor
##  [1] 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0
## Levels: 0 1

También existen otra serie de comandos que se llaman “is.na”, arrojan resultados de falso y verdadero

is.na(ICE_2018$region)
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
table(is.na(ICE_2018$region))
## 
## FALSE 
##    32

Todos dicen Falso, ninguno es missing

mean(is.na(ICE_2018$region))
## [1] 0

Proporcion de 0 de valores missing.

Botando missing de un dataframe

prueba<-na.omit(ICE_2018)

Más vale ver las variables

prueba2<-ICE_2018 %>% 
  select(region:pobreza) %>% 
  na.omit()

Etiquetando

Vimos en la clase pasada cómo usar las etiquetas, pero… queremos hacer nuestras propias etiquetas.

Como siempre es útil tener a la mano nuestro “codebook” o descriptor de archivos. Usaremos la variable clase2 de la ECOVID - ML

ecovid0420$clase2 <- set_labels(ecovid0420$clase2, labels = c("Ocupado(a)",
                                                              "Desocupado(a)", "Disponible", "No disponible"))

OJO: las etiquetas sólo se pueden aplicar a una variable numérica. Si la variable está declarada como factor o caracter no se puede etiquear.

Veamos cómo se ve nuestra etiqueta:

table(as_label(ecovid0420$clase2))
## 
##    Ocupado(a) Desocupado(a)    Disponible No disponible 
##          2893           202          1080          1418

Con “tabyl”

ecovid0420 %>% 
  mutate(clase2=as_label(clase2)) %>% # mutate para cambiar los valores
  tabyl(clase2)
##         clase2    n    percent
##     Ocupado(a) 2893 0.51725371
##  Desocupado(a)  202 0.03611657
##     Disponible 1080 0.19309852
##  No disponible 1418 0.25353120

Para establecer la etiqueta de la variable tenemos:

ecovid0420$clase2 <- set_label(ecovid0420$clase2, label = "Condición de Actividad")

Cuando hemos etiquetado también las variables puede automatizar algunos títulos, porque podemos “pegar” este atributo

titulo<-paste(get_label(ecovid0420$clase2))
titulo
## [1] "Condición de Actividad"

Duplicados con janitor

Verificar el id, es una actividad esencial para el manejo de las bases de datos. Identificar qué significa nuestro renglón nos da mucha tranquilidad

ICE_2018 %>% 
  get_dupes(region)
## No duplicate combinations found of: region
## # A tibble: 0 x 110
## # … with 110 variables: region <chr>, dupe_count <int>, edo <chr>, edo2 <chr>,
## #   region2 <chr>, homicidios <dbl>, secuestros <dbl>, robo_de_vehiculos <dbl>,
## #   costos_del_delito <dbl>, incidencia_delictiva <dbl>,
## #   delitos_denunciados <dbl>, percepcion_de_seguridad <dbl>,
## #   competencia_en_servicios_notariales <dbl>, cumplimiento_de_contratos <dbl>,
## #   caudal_tratado_de_aguas_residuales <dbl>,
## #   eficiencia_economica_del_agua_en_la_agricultura <dbl>,
## #   morbilidad_por_enfermedades_respiratorias <dbl>,
## #   perdida_de_superficie_cubierta_por_arboles <dbl>,
## #   areas_naturales_protegidas <dbl>,
## #   volumen_de_residuos_solidos_generados <dbl>,
## #   disposicion_adecuada_de_residuos_solidos <dbl>,
## #   intensidad_energetica_de_la_economia <dbl>,
## #   certificados_industria_limpia_emitidos <dbl>,
## #   gastos_autorizados_al_fonden <dbl>, pobreza <dbl>, acceso_a_drenaje <dbl>,
## #   acceso_a_instituciones_de_salud <dbl>,
## #   mujeres_economicamente_activas <dbl>, equidad_salarial <dbl>,
## #   indice_de_informalidad_laboral_entre_mujeres_y_hombres <dbl>,
## #   analfabetismo <dbl>, escolaridad <dbl>, escuelas_de_calidad <dbl>,
## #   rendimiento_academico <dbl>, esperanza_de_vida <dbl>,
## #   mortalidad_infantil <dbl>,
## #   mortalidad_por_diabetes_y_enfermedades_hipertensivas <dbl>,
## #   suicidios <dbl>, embarazos_adolescentes <dbl>, camas_de_hospital <dbl>,
## #   medicos_y_enfermeras <dbl>, medicos_con_especialidad <dbl>,
## #   unidades_medicas_certificadas <dbl>, migracion_neta <dbl>,
## #   incidencia_de_corrupcion <dbl>, percepcion_de_corrupcion_estatal <dbl>,
## #   percepcion_de_corrupcion_en_partidos_politicos <dbl>,
## #   consulta_de_informacion_de_finanzas_publicas <dbl>,
## #   participacion_ciudadana <dbl>, competencia_electoral <dbl>,
## #   barreras_a_candidatos_independientes <dbl>, equidad_en_el_congreso <dbl>,
## #   matrimonio_igualitario <dbl>, agresiones_a_periodistas <dbl>,
## #   interaccion_con_el_gobierno_por_medios_electronicos <dbl>,
## #   indice_de_informacion_presupuestal_estatal <dbl>, ingresos_propios <dbl>,
## #   registro_de_la_propiedad <dbl>, apertura_de_una_empresa <dbl>,
## #   indicador_subnacional_de_mejora_regulatoria <dbl>,
## #   hogares_que_se_surten_de_agua_por_pipa <dbl>,
## #   accesibilidad_para_silla_de_ruedas <dbl>, informalidad_laboral <dbl>,
## #   ingreso_promedio_de_trabajadores_de_tiempo_completo <dbl>,
## #   desigualdad_salarial <dbl>,
## #   personas_con_ingresos_por_debajo_de_la_linea_de_bienestar <dbl>,
## #   eficiencia_terminal_en_secundaria <dbl>,
## #   eficiencia_terminal_en_preparatoria <dbl>,
## #   absorcion_en_educacion_superior <dbl>,
## #   poblacion_foranea_con_educacion_superior <dbl>, capacitacion_laboral <dbl>,
## #   pib_per_capita <dbl>, pib_en_sectores_de_alto_crecimiento <dbl>,
## #   crecimiento_del_pib <dbl>,
## #   deuda_estatal_y_de_organismos_estatales_pib <dbl>,
## #   deuda_estatal_y_de_organismos_estatales_participaciones_federales <dbl>,
## #   plazo_promedio_de_vencimiento_de_la_deuda <dbl>,
## #   costo_promedio_de_la_deuda <dbl>,
## #   personas_con_ingresos_mayores_al_promedio_estatal <dbl>,
## #   participacion_laboral <dbl>, dependencia_economica <dbl>,
## #   diversificacion_economica <dbl>, telefonia_movil <dbl>,
## #   acceso_a_internet <dbl>, terminales_punto_de_venta <dbl>,
## #   cajeros_automaticos <dbl>, uso_de_banca_movil <dbl>,
## #   captacion_de_ahorro <dbl>, penetracion_del_seguro_en_la_economia <dbl>,
## #   heridos_en_accidentes_de_transito_terrestre <dbl>,
## #   accidentes_por_malas_condiciones_del_camino <dbl>,
## #   flujo_de_pasajeros_aereos <dbl>, carga_aerea <dbl>,
## #   flujo_de_pasajeros_aereos_internacionales <dbl>, pib_turistico <dbl>,
## #   inversion_extranjera_directa <dbl>, exportacion_de_mercancias <dbl>,
## #   complejidad_economica_en_sectores_de_innovacion <dbl>,
## #   productividad_total_de_los_factores <dbl>, investigadores <dbl>, …

Esto es lo que queremos, que no hayan duplicados. Eso significa que es un identificador único.

ecovid0420 %>% 
  get_dupes(per, ent, con)
## No duplicate combinations found of: per, ent, con
## # A tibble: 0 x 164
## # … with 164 variables: per <dbl+lbl>, ent <dbl+lbl>, con <chr>,
## #   dupe_count <int>, r_pre <dbl+lbl>, r_pre_dia <dbl>, r_pre_mes <dbl>,
## #   r_def <dbl+lbl>, r_def_dia <dbl>, r_def_mes <dbl>, r_def_anio <dbl>,
## #   pa1 <dbl>, pa2_1 <dbl>, pa2_1_1 <dbl>, pa2_h_1 <dbl>, pa2_h_2 <dbl>,
## #   pa2_h_3 <dbl>, pa2_h_4 <dbl>, pa2_h_5 <dbl>, pa2_h_6 <dbl>, pa2_h_7 <dbl>,
## #   pa2_h_8 <dbl>, pa2_h_9 <dbl>, pa2_2 <dbl>, pa2_2_1 <dbl>, pa2_m_1 <dbl>,
## #   pa2_m_2 <dbl>, pa2_m_3 <dbl>, pa2_m_4 <dbl>, pa2_m_5 <dbl>, pa2_m_6 <dbl>,
## #   pa2_m_7 <dbl>, pa2_m_8 <dbl>, pa2_m_9 <dbl>, pa3_1 <dbl>, pa3_1_1 <dbl>,
## #   pa3_2 <dbl>, pa3_2_1 <dbl>, pa3_3 <dbl>, pa3_3_1 <dbl>, pa4_1 <dbl>,
## #   pa4_2 <dbl>, pa4_3 <dbl>, pa4_4 <dbl>, pb1 <dbl+lbl>, pb2 <dbl>,
## #   pb3 <dbl+lbl>, pc1_1 <dbl>, pc1_2 <dbl>, pc1_3 <dbl>, pc1_4 <dbl>,
## #   pc2 <dbl>, pc3 <dbl+lbl>, pc4 <dbl+lbl>, pc5_1 <dbl>, pc5_2 <dbl>,
## #   pc5_3 <dbl>, pc6 <dbl>, pc7 <dbl>, pd1 <dbl>, pd2 <dbl>, pd3 <dbl>,
## #   pe1 <dbl>, pe2 <dbl>, pe3 <dbl>, pe4 <dbl>, pe5 <dbl>, pe5_1 <dbl>,
## #   pe6 <dbl>, pe7 <dbl>, pe8 <dbl>, pe9 <dbl>, pe10 <dbl>, pe10_1 <dbl>,
## #   pe11 <dbl>, pe12 <dbl>, pe12_1 <dbl>, pe13 <dbl>, pe14_1 <dbl>,
## #   pe14_2 <dbl>, pe14_3 <dbl>, pe14_4 <dbl>, pe15 <dbl>, pe16 <dbl>,
## #   pe17 <dbl>, pe18 <dbl>, pe19_1 <dbl>, pe19_2 <dbl>, pf1 <dbl>, pf2 <dbl>,
## #   pf3_1 <dbl>, pf3_2 <dbl>, pf3_3 <dbl>, pf3_4 <dbl>, pf3_5 <dbl>,
## #   pf3_6 <dbl>, pf4_1 <dbl>, pf4_1_1 <dbl>, pf5 <dbl>, pf6_1 <dbl>, …

La llave puede ser una variable o varias variables. Ojo, se separan por comas. En el diagrama de relación o en el descriptor puede estar esta información

Actividad en clase

Con la base que entregó:

  1. Verifique los valores missings o perdidos de una variable de interés

  2. Etiquete una variable (si aplica). Revise primero qué tipo de variable es.

  3. Identifique las variables llave y verifique que no tenga duplicados

  4. Revisa qué hacen los siguientes comandos:

  • is.finite(x)
  • is.infinite(x)
  • is.nan(x)

Subir la información

https://forms.gle/nsqHGosCTM9TthiQA En caso que no terminemos en la sesión

Revisaremos las pantallas en clase. De los errores aprendemos.