Para comenzar se debe descargar R, esta descarga incluye R básico y un editor de textos para escribir código. Después de descargar R se recomienda descargar RStudio (gratis y libre).
Rstudio es un ambiente de desarrollo integrado para R: incluye una consola, un editor de texto y un conjunto de herramientas para administrar el espacio de trabajo cuando se utiliza R.
Algunos shortcuts útiles en RStudio son:
En el editor
En la consola
La mejor manera de usar R para análisis de datos es aprovechando la gran cantidad de paquetes que aportan funcionalidad adicional.
install.packages("readr")
library(readr)
Instala los paquetes ggplot2
y dplyr
.
Cárga los paquetes que instalaste.
RStudio tiene un menu poin-and-click muy conveniente para leer tablas de datos, permite importar archivos en varios formatos comunes:
csv: archivos de texto separados por comas (cualquier hoja de excel se puede exportar como csv).
excel
SPSS
SAS
Stata
OJO: Es importante asegurarse de copiar a nuestro script la instrucción que se genera al importar archivos con las herramientas de RStudio.
cohesion_rezago <- read_csv("data/cohesion_rezago_social.csv")
## Parsed with column specification:
## cols(
## .default = col_double(),
## Cve_Ent = col_character(),
## Ent = col_character(),
## Cve_Mun = col_character(),
## Mun = col_character(),
## Grado_rezago_social = col_character(),
## Grado_cohesion_social = col_character(),
## Grado_de_polarizacion = col_character(),
## Poblacion_cat = col_character()
## )
## See spec(...) for full column specifications.
head()
imprime las primeras líneas de los datos.head(cohesion_rezago)
## # A tibble: 6 x 20
## Cve_Ent Ent Cve_Mun Mun Poblacion Indice_rezago_s… Grado_rezago_so…
## <chr> <chr> <chr> <chr> <dbl> <dbl> <chr>
## 1 01 Agua… 01001 Agua… 797010 -1.56 Muy bajo
## 2 01 Agua… 01002 Asie… 45492 -1.01 Muy bajo
## 3 01 Agua… 01003 Calv… 54136 -1.10 Muy bajo
## 4 01 Agua… 01004 Cosío 15042 -1.13 Muy bajo
## 5 01 Agua… 01005 Jesú… 99590 -1.30 Muy bajo
## 6 01 Agua… 01006 Pabe… 41862 -1.34 Muy bajo
## # ... with 13 more variables: Viviendas_sin_electricidad <dbl>,
## # Viviendas_sin_drenaje <dbl>, Viviendas_sin_lavadora <dbl>,
## # Viviendas_sin_refrigerador <dbl>, Viviendas_sin_excusado <dbl>,
## # Viviendas_sin_agua_entubada <dbl>, Viviendas_piso_tierra <dbl>,
## # Pob_analfabeta <dbl>, Pob_sin_servicios_salud <dbl>, Gini <dbl>,
## # Grado_cohesion_social <chr>, Grado_de_polarizacion <chr>,
## # Poblacion_cat <chr>
Lee los datos de mortalidad que se encuentran en la carpeta data
.
Utilizaremos el paquete ggplot2
que fue desarrollado por Hadley Wickham.
library(ggplot2)
ggplot(data = cohesion_rezago) +
geom_point(mapping = aes(x = Viviendas_sin_lavadora, y = Viviendas_sin_refrigerador))
## Warning: Removed 2 rows containing missing values (geom_point).
¿Qué pasó?
ggplot(data = cohesion_rezago) + geom_point(mapping = aes(x = Viviendas_sin_lavadora, y = Viviendas_sin_refrigerador))
En ggplot2 se inicia una gráfica con la instrucción ggplot()
.
Especificamos explicitamente que base de datos usamos, este es el primer argumento en la función ggplot.
ggplot(data = cohesion_rezago)
geom_point(aes(x = Viviendas_sin_lavadora, y = Viviendas_sin_refrigerador))
En este caso la función geom_point()
añade una capa de puntos, hay muchas funciones geometrías incluídas en ggplot2: geom_line()
, geom_boxplot()
, geom_histogram
,…
En el ejemplo de arriba mapeamos Viviendas_sin_lavadora
al eje x, Viviendas_sin_refrigerador
al eje y, pero geom_point()
nos permite representar más variables usando la forma, color y/o tamaño del punto. Esta flexibilidad nos permite entender o descubrir patrones más interesantes en los datos.
ggplot(data = cohesion_rezago) +
geom_point(mapping = aes(x = Viviendas_sin_lavadora,
y = Viviendas_sin_refrigerador, color = Grado_de_polarizacion))
## Warning: Removed 2 rows containing missing values (geom_point).
Experimenta con los aesthetics color (color), tamaño (size) y forma (shape).
¿Qué diferencia hay entre las variables categóricas y las continuas?
¿Qué ocurre cuando combinas varios aesthetics?
El mapeo de las propiedades estéticas se denomina escalamiento y depende del tipo de variable, las variables discretas (por ejemplo, genero, escolaridad, país) se mapean a distintas escalas que las variables continuas (variables numéricas como edad, estatura, etc.), los defaults para algunos atributos son (los escalamientos se pueden modificar):
aes | Discreta | Continua |
---|---|---|
Color (color ) |
Arcoiris de colores | Gradiente de colores |
Tamaño (size ) |
Escala discreta de tamaños | Mapeo lineal entre el área y el valor |
Forma (shape ) |
Distintas formas | No aplica |
Transparencia (alpha ) |
No aplica | Mapeo lineal a la transparencia |
ggplot(cohesion_rezago, aes(x = Viviendas_sin_lavadora,
y = Viviendas_sin_refrigerador)) +
geom_line()
## Warning: Removed 2 rows containing missing values (geom_path).
No es una buena gráfica!
¿Cómo podemos mejorar la siguiente gráfica?
mortalidad <- read_csv("data/mortalidad.csv")
## Parsed with column specification:
## cols(
## anio = col_double(),
## edo = col_character(),
## tipo = col_character(),
## sexo = col_character(),
## tasa = col_double()
## )
ggplot(mortalidad, aes(x = anio, y = tasa)) +
geom_point()
Color?
ggplot(mortalidad, aes(x = anio, y = tasa, color = sexo)) +
geom_point()
Podemos probar otros geoms.
ggplot(mortalidad, aes(x = factor(anio), y = tasa, color = sexo)) +
geom_boxplot()
¿Cómo esta relacionado el índice de rezago y la población?
Veamos ahora como hacer gráficas de paneles, la idea es hacer varios múltiplos de una gráfica donde cada múltiplo representa un subconjunto de los datos, es una práctica muy útil para explorar relaciones condicionales.
ggplot(mortalidad, aes(x = factor(anio), y = tasa, color = sexo)) +
geom_boxplot() +
facet_wrap(~ tipo)
Pero… ¿qué queremos ver?
ggplot(mortalidad, aes(x = factor(anio), y = tasa, color = sexo, group = edo)) +
geom_path(alpha = 0.5) +
facet_grid(reorder(tipo, tasa) ~ sexo, scales = "free_y")
Y con unas mejoras:
library(dplyr)
mortalidad_2008 <- filter(mortalidad, anio == 2008)
mortalidad_2008_gpd <- group_by(mortalidad_2008, tipo, sexo)
edos_mortalidad_mayor <- top_n(mortalidad_2008_gpd, 1, tasa)
edos_mortalidad_menor <- top_n(mortalidad_2008_gpd, 1, -tasa)
ggplot(data = mortalidad, aes(x = factor(anio), y = tasa, color = sexo,
group = edo)) +
geom_path(alpha = 0.5) +
geom_text(data = edos_mortalidad_mayor, aes(x = factor(anio), y = tasa,
label = edo), size = 2.5, hjust = 1, vjust = 0, color = "black") +
geom_text(data = edos_mortalidad_menor, aes(x = factor(anio), y = tasa,
label = edo), size = 2.5, hjust = 1, vjust = 0, color = "black") +
facet_grid(tipo ~ sexo, scales = "free_y") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
filter(cohesion_rezago, Grado_rezago_social == "Muy alto")
## # A tibble: 113 x 20
## Cve_Ent Ent Cve_Mun Mun Poblacion Indice_rezago_s… Grado_rezago_so…
## <chr> <chr> <chr> <chr> <dbl> <dbl> <chr>
## 1 07 Chia… 07007 Amat… 8728 2.14 Muy alto
## 2 07 Chia… 07022 Chal… 14027 3.09 Muy alto
## 3 07 Chia… 07023 Cham… 76941 2.37 Muy alto
## 4 07 Chia… 07026 Chen… 36111 2.17 Muy alto
## 5 07 Chia… 07031 Chil… 111554 1.92 Muy alto
## 6 07 Chia… 07056 Mito… 11157 2.51 Muy alto
## 7 07 Chia… 07066 Pant… 20589 2.23 Muy alto
## 8 07 Chia… 07082 Sita… 12269 2.84 Muy alto
## 9 07 Chia… 07111 Zina… 36489 2.11 Muy alto
## 10 07 Chia… 07112 San … 29016 2.42 Muy alto
## # ... with 103 more rows, and 13 more variables:
## # Viviendas_sin_electricidad <dbl>, Viviendas_sin_drenaje <dbl>,
## # Viviendas_sin_lavadora <dbl>, Viviendas_sin_refrigerador <dbl>,
## # Viviendas_sin_excusado <dbl>, Viviendas_sin_agua_entubada <dbl>,
## # Viviendas_piso_tierra <dbl>, Pob_analfabeta <dbl>,
## # Pob_sin_servicios_salud <dbl>, Gini <dbl>,
## # Grado_cohesion_social <chr>, Grado_de_polarizacion <chr>,
## # Poblacion_cat <chr>
x > 1
x >= 1
x < 1
x <= 1
x != 1
x == 1
x %in% c("a", "b")
filter()
es el nombre del data frame, los subsecuentes son las expresiones que indican que filas filtrar.Selecciona los municipios correspondientes al estado en que naciste.
Selecciona los municipios correspondientes al estado en que naciste y con grado de rezago social menor a -1.
Filtra los municipios con población mayor a 1 millón.
mutate(cohesion_rezago, Pob_miles = Poblacion / 1000)
## # A tibble: 2,458 x 21
## Cve_Ent Ent Cve_Mun Mun Poblacion Indice_rezago_s… Grado_rezago_so…
## <chr> <chr> <chr> <chr> <dbl> <dbl> <chr>
## 1 01 Agua… 01001 Agua… 797010 -1.56 Muy bajo
## 2 01 Agua… 01002 Asie… 45492 -1.01 Muy bajo
## 3 01 Agua… 01003 Calv… 54136 -1.10 Muy bajo
## 4 01 Agua… 01004 Cosío 15042 -1.13 Muy bajo
## 5 01 Agua… 01005 Jesú… 99590 -1.30 Muy bajo
## 6 01 Agua… 01006 Pabe… 41862 -1.34 Muy bajo
## 7 01 Agua… 01007 Rinc… 49156 -1.26 Muy bajo
## 8 01 Agua… 01008 San … 8443 -1.10 Muy bajo
## 9 01 Agua… 01009 Tepe… 19668 -1.04 Muy bajo
## 10 01 Agua… 01010 El L… 18828 -0.885 Muy bajo
## # ... with 2,448 more rows, and 14 more variables:
## # Viviendas_sin_electricidad <dbl>, Viviendas_sin_drenaje <dbl>,
## # Viviendas_sin_lavadora <dbl>, Viviendas_sin_refrigerador <dbl>,
## # Viviendas_sin_excusado <dbl>, Viviendas_sin_agua_entubada <dbl>,
## # Viviendas_piso_tierra <dbl>, Pob_analfabeta <dbl>,
## # Pob_sin_servicios_salud <dbl>, Gini <dbl>,
## # Grado_cohesion_social <chr>, Grado_de_polarizacion <chr>,
## # Poblacion_cat <chr>, Pob_miles <dbl>
Calcula el número de personas en pobreza extrema en cada municipio.
summarise(cohesion_rezago, media_pob = mean(Poblacion, na.rm = TRUE))
## # A tibble: 1 x 1
## media_pob
## <dbl>
## 1 45740.
summarise(cohesion_rezago, media_pob = mean(Poblacion, na.rm = TRUE),
mediana_pob = mean(Poblacion, na.rm = TRUE),
min_pob = min(Poblacion, na.rm = TRUE),
max_pob = max(Poblacion, na.rm = TRUE))
## # A tibble: 1 x 4
## media_pob mediana_pob min_pob max_pob
## <dbl> <dbl> <dbl> <dbl>
## 1 45740. 45740. 93 1815786
¿Cuál es el promedio de analfabetismo municipal?
¿Cuántos analfabetas hay en México?
¿Cuántos analfabetas hay en tu estado?
¿Cuántos municipios clasifican en alto rezago social?
Aprender algo nuevo es difícil e intimidante, para todos!
Pero el dolor pasa :D
Existen muchos recursos gratuitos para aprender R, y resolver nuestras dudas, enlistamos algunos.
Rezago social: estimaciones del CONEVAL con base en el XII Censo de Población y Vivienda 2000, II Conteo de Población y Vivienda 2005, Censo de Población y Vivienda 2010 y Encuesta Intercensal 2015.
Cohesión social: estimaciones del CONEVAL con base en el MCS-ENIGH 2010 y la muestra del Censo de Población y Vivienda 2010.
Mortalidad Datos de mortalidad general INEGI.