Está en la página 1de 33

Modelamiento y Simulación

1
de Sistemas Ambientales
Semana 7
Mg. Yasser Vásquez Baca
Universidad de Huánuco - 2020
2 RStudio
Practica Dirigida
De acuerdo a información de la Dirección General de Estadística y Censos de
Buenos Aires, Argentina, determinar la diferencia en mortalidad infantil entre las
zonas sur y norte de la Ciudad Autónoma de Buenos Aires.

Creamos un proyecto nuevo, cliqueando en File -> New Project... -> New Directory
-> New Project.
En la ventana emergente, elegir el nombre (“Practica_D_apellido”) y finalizar la
operación cliqueando en Create project.

Creamos un “script”. Un script, es un guión, una serie de pasos que escribimos para
que nuestra computadora ejecute en secuencia.
Cliqueamos en File -> New File -> R Script. De inmediato se abre una ventana con
un editor de texto.
3 RStudio

Cargar los datos de mortalidad infantil, por comuna (distritos) de la ciudad de


Buenos Aires, del año 2016, publicados por la Dirección General de Estadística
y Censos de Buenos Aires.
Para leer archivos “.csv”, usamos la función read.csv:
 mortalidad <-
read.csv('https://bitsandbricks.github.io/data/mortalidad_infantil_caba_20
16.csv')
4 RStudio
 Mortalidad (Ctrl+enter)
## Comuna Tasa2016
## 1 1 9.5
## 2 2 3.6
## 3 3 8.0
## 4 4 11.9
## 5 5 8.5
## 6 6 2.4
## 7 7 8.5
## 8 8 9.7
## 9 9 10.1
## 10 10 3.6
## 11 11 6.2
## 12 12 7.1
## 13 13 4.5
## 14 14 3.2
## 15 15 6.4
5 RStudio

Funciones útiles para explorar un dataframe:

 dim(), que nos da las dimensiones del dataframe (cantidad de filas y


columnas).
 names() que nos dice como se llaman sus columnas (que en general
representan variables).
 head() que nos permite echar un vistazo rápido al contenido, mostrando
sólo las seis primeras filas.
6 RStudio
 dim(mortalidad)
## [1] 15 2
 names(mortalidad)
## [1] "Comuna" "Tasa2016"
 head(mortalidad)
## Comuna Tasa2016
## 1 1 9.5
## 2 2 3.6
## 3 3 8.0
## 4 4 11.9
## 5 5 8.5
## 6 6 2.4
7 RStudio

Cargar el paquete tidyverse, que incluye gran cantidad de funciones


diseñadas para la ciencia de datos, como importar, limpiar, comprender y
comunicar datos.
Si acabamos de instalar R y RStudio, el paquete aún no estará disponible en
nuestro sistema. Para instalarlo, usamos la función install.packages() y le
pasamos el nombre del paquete deseado, “tidyverse”.

 install.packages("tidyverse")

Ahora activar tidyverse, lo invocamos con la función library():


 library(tidyverse)
8 RStudio
Para hacer gráficos, usaremos la función ggplot().
 ggplot(mortalidad) + geom_col(aes(x = Comuna, y = Tasa2016))
9 RStudio

Instalamos sf, este paquete brinda herramientas para trabajar datos


georeferenciados.
 install.packages("sf")
Sólo es necesario instalar los paquetes una vez. Luego, sólo necesitamos
activarlos pues ya estarán listos en nuestro sistema. Pedimos a R que active el
paquete así:
 library(sf)

Cargamos un archivo georeferenciado con las comunas de la Ciudad


Autónoma de Buenos Aires, disponible online en formato geojson:
 comunas <-
st_read('https://bitsandbricks.github.io/data/CABA_comunas.geojson')
10 RStudio

## Reading layer `CABA_comunas' from data source


`https://bitsandbricks.github.io/data/CABA_comunas.geojson' using driver
`GeoJSON'
## Simple feature collection with 15 features and 4 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -58.53152 ymin: -34.70529 xmax: -58.33514 ymax: -
34.52754
## CRS: WGS84
11 RStudio
Generar un mapa a partir del dataframe espacial a través de sf y ggplot
 ggplot(comunas) + geom_sf()
12 RStudio
Agregar una leyenda al mapa:
 ggplot(comunas) + geom_sf(aes(fill = comunas))
13 RStudio

Descargar la Av. Rivadavia, que es la divisoria simbólica del norte y el sur de la


Ciudad, con sus diferencias de desarrollo,
 rivadavia <-
st_read('https://bitsandbricks.github.io/data/avenida_rivadavia.geojson’)
## Reading layer `avenida_rivadavia' from data source
`https://bitsandbricks.github.io/data/avenida_rivadavia.geojson' using driver
`GeoJSON'
## Simple feature collection with 1 feature and 1 field
## geometry type: LINESTRING
## dimension: XY
## bbox: xmin: -58.53014 ymin: -34.63946 xmax: -58.37017 ymax: -34.60711
## CRS: 4326
14 RStudio
Proyectar sobre el mapa, una capa adicional:
 ggplot(comunas) + geom_sf(aes(fill = comunas)) + geom_sf(data =
rivadavia, color = "red")
15 RStudio

Agregando datos
Crear una lista con atributos, y agregarla al dataframe “comunas” como una
nueva columna.
El comando que “une” valores en conjunto se llama c().
 nueva_columna <- c("Sur", "Norte", "Sur", "Sur", "Sur", "Norte", "Sur", "Sur",
"Sur", "Norte", "Norte", "Norte", "Norte", "Norte", "Norte")
 nueva_columna
## [1] "Sur" "Norte" "Sur" "Sur" "Sur" "Norte" "Sur" "Sur" "Sur"
## [10] "Norte" "Norte" "Norte" "Norte" "Norte" "Norte"
16 RStudio

Agregar la nueva columna usando la función mutate(). En el dataframe


“comunas”, vamos a insertar la nueva columna con el nombre “ubicación” :
 comunas <- mutate(comunas, ubicacion = nueva_columna)
 head(comunas)

Verificar en el mapa:
ggplot(comunas) + geom_sf(aes(fill = ubicacion)) + geom_sf(data = rivadavia,
color = "red")
17
18 RStudio

Realicemos lo mismo con el dataframe de mortalidad:


 mortalidad <- mutate(mortalidad, ubicación = nueva_columna)
 head(mortalidad)
## Comuna Tasa2016 ubicación
## 1 1 9.5 Sur
## 2 2 3.6 Norte
## 3 3 8.0 Sur
## 4 4 11.9 Sur
## 5 5 8.5 Sur
## 6 6 2.4 Norte
19 RStudio
Graficar el mapa que señale el nivel de mortalidad, utilizar la paleta de
colores “Spectral” y es muy usada cuando se quiere resaltar la divergencia de
una variable.
 ggplot(comunas) + geom_sf(aes(fill = mortalidad$Tasa2016)) +
geom_sf(data = rivadavia, color = "red") + scale_fill_distiller(palette =
"Spectral")
20 RStudio
Realizar un gráfico de barras, con la función geom_col():
 ggplot(mortalidad) + geom_col(aes(x = Comuna, y = Tasa2016, fill =
ubicación)) + labs(title = "Mortalidad infantil en la Ciudad Autónoma de
Buenos Aires", subtitle = "Año 2016", y = "tasa")
21 RStudio
Ahora dividimos las comunas en dos dataframes distintos según su ubicación,
con el comando filter():
 comunas_al_sur <- filter(mortalidad, ubicación == "Sur")
 comunas_al_norte <- filter(mortalidad, ubicación == "Norte")

y calculamos la diferencia entre el promedio de mortalidad:


 mean(comunas_al_sur$Tasa2016) / mean(comunas_al_norte$Tasa2016)
## [1] 2.044788

¿Cuál es la diferencia en mortalidad infantil entre el sur y el norte de la


Ciudad Autónoma de Buenos Aires?
 Para los nacidos en 2016 de padres que viven en el sur de la ciudad, la
posibilidad de morir antes del primer año es, en promedio, el doble que la
de aquellos con padres que residen al norte.
22 RStudio
Regresión lineal simple
Tenemos una variable ”y”, numérica, y una sola variable predictora ”x”, que
puede ser numérica o categórica.
Descarguemos el dataset y observemos su resumen:
 data_mundial <-
read.csv("https://bitsandbricks.github.io/data/gapminder.csv")
 summary(data_mundial)

Regresión con una variable numérica


Pregunta: ¿Cómo se relaciona el tiempo (variable explicativa) con la
expectativa de vida en Perú?
23
RStudio
Primero filtremos los datos que nos interesan:
 data_per <- data_mundial %>%
filter(pais == “Peru")
 data_per
pais continente anio expVida pobl PBI_PC
1 Peru Americas 1952 43.902 8025700 3758.523
2 Peru Americas 1957 46.263 9146100 4245.257
3 Peru Americas 1962 49.096 10516500 4957.038
4 Peru Americas 1967 51.445 12132200 5788.093
5 Peru Americas 1972 55.448 13954700 5937.827
6 Peru Americas 1977 58.447 15990099 6281.291
7 Peru Americas 1982 61.406 18125129 6434.502
8 Peru Americas 1987 64.134 20195924 6360.943
9 Peru Americas 1992 66.458 22430449 4446.381
10 Peru Americas 1997 68.386 24748122 5838.348
11 Peru Americas 2002 69.906 26769436 5909.020
12 Peru Americas 2007 71.421 28674757 7408.906
24 RStudio
Los gráficos de dispersión (scatterplots) son útiles para mostrar la relación
entre dos variables. Lo usaremos uno para visualizar la relación entre año y
expectativa de vida en Perú, para intentar anticipar los resultados de la
regresión lineal.
 ggplot(data = data_per) +
geom_point(aes(x = anio, y = expVida)) +
labs(title = "Correlación entre tiempo y expectativa de vida",
subtitle = “Perú",
y = "expectativa de vida")
25 RStudio
26 RStudio

Observamos que el tiempo y expectativa de vida están correlacionadas en


forma positiva. Esto es, el incremento de una unidad de tiempo, resulta en el
incremento de la expectativa de vida. Una correlación negativa sería lo
opuesto.
La intensidad de una correlación va de -1 a 1. Una correlación de cero
significa que las dos variables son por completo independientes.
Para obtener la correlación se usa la función cor()
 cor(data_per$anio, data_per$expVida)
[1] 0.9942203
El valor se acerca mucho a 1, la correlación positiva es casi total.
27 RStudio

Ahora usamos la función lm() (“linear model”):


 modelo_exp <- lm(expVida ~ anio, data = data_per)
 modelo_exp
Call:
lm(formula = expVida ~ anio, data = data_per)
Coefficients:
(Intercept) anio
-985.7187 0.5277
28 RStudio

Visualizar con ayuda de ggplot()


 ggplot(data = data_per) +
geom_point(aes(x = anio, y = expVida)) +
labs(title = "Correlación entre tiempo y expectativa de vida",
subtitle = "Perú",
y = "expectativa de vida",
caption = "con línea de regresión") +
geom_abline(aes(intercept = -985.7187, slope = 0.5277), color = "blue")
29 RStudio
30 RStudio

Ahora proyectemos la línea hacia el futuro. Con xlim() e ylim() podemos


definir a mano los límites de nuestro gráfico, haciéndolo ir más allá del rango
de los datos que tenemos.
 ggplot(data = data_per) +
geom_point(aes(x = anio, y = expVida)) +
labs(title = "Correlación entre tiempo y expectativa de vida",
subtitle = “Perú",
y = "expectativa de vida",
caption = "con línea de regresión") +
geom_abline(aes(intercept = -985.7187, slope = 0.5277), color = "blue") +
xlim(c(1950, 2030)) +
ylim(c(40, 85))
31 RStudio
Ahí está la predicción, según nuestro modelo, para el año 2030 la expectativa
de vida en Perú habrá superado los 85 años.
32 RStudio

 prediccion <- coef(modelo_exp)[1] + coef(modelo_exp)[2]*2030


 Prediccion
(Intercept)
85.50808

 predict(modelo_exp,newdata = data.frame(anio=2030), interval


='confidence’)
fit lwr upr
1 85.50808 83.36535 87.6508
Según nuestro modelo, para el año 2030, existe un 95 % de confianza en que
los resultados de esperanza de vida estén entre 83.4 y 87.6 años.
33

GRACIAS

También podría gustarte