Este es un R Markdown Notebook que ilustra las estadísticas agrícolas del departamento de Arauca en Colombia. Ha sido creado, compilado y publicado desde RStudio. Este cuaderno tiene como objetivo ayudar a los estudiantes de Geomática Básica de la Universidad Nacional a comprender conceptos básicos de geomática útiles para la agronomía. Todos los alumnos deben replicar este cuaderno, pero adaptando su contenido a su departamento. La fecha límite para publicar este cuaderno es el 7 de octubre de 2020 a las 11:59 a.m. Su publicación en RPubs cuenta como el primer informe técnico del curso. Tu calificación representa el 15% de la calificación final.
La exploración de estadísticas no espaciales es fundamental para comprender lo que está sucediendo en los territorios. Varias bibliotecas de R, en particular dplyr y tidyverse, son muy útiles para explorar y resumir estadísticas. Por otro lado, las operaciones geoespaciales pueden mejorar nuestra comprensión de varios problemas que afectan las regiones geográficas. Por ejemplo, desea averiguar cuál es la ubicación de los municipios cuyos rendimientos de cultivos son sobresalientes (o alternativamente más bajos que el promedio). Para realizar dicha exploración, necesitamos unir datos no espaciales con datos espaciales. Ya hicimos esta tarea usando QGIS. Ahora, lo haremos con R. Además, también podríamos explorar combinaciones espaciales. Estas operaciones se basan en la intersección entre dos entidades, a menudo puntos y polígonos. Hay muchas formas en que podemos unir objetos, que pueden incluir opciones específicas como cruces, valla, interior, toques, etc
rm(list=ls())
Ahora, instalemos las bibliotecas que necesitamos. Tenga en cuenta que, en el siguiente fragmento, cualquier paquete se instala solo si no se ha instalado previamente.
list.of.packages <- c("here", "tidyverse", "rgeos", "maptools", "raster", "sf", "viridis", "rnaturalearth", "GSODR", "ggrepel", "cowplot")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
Ahora, carguemos las bibliotecas
library(here)
library(tidyverse)
library(rgeos)
library(maptools)
library(raster)
library(sf)
library(viridis)
library(rnaturalearth)
library(GSODR)
library(ggrepel)
library(cowplot)
Previamente, he descargado datos estadísticos, en formato csv, sobre Estadisticas Municipales Agropecuarias a mi computadora. Luego, he usado Excel para eliminar filas para municipios en departamentos diferentes a Arauca. Guardé el archivo con las filas restantes como un archivo local con el nombre EVA_Arauca.csv en mi computadora. Luego, cargué el archivo en la carpeta agro en RStudio.
list.files()
[1] "81_ARAUCA" "Arauca.nb.html" "Arauca.rmd"
[4] "ARAUCA_2017.pdf" "BEVA_Arauca.txt" "debug.log"
[7] "EVA_Arauca.csv" "EVA_Arauca9.csv" "EVA_Araucar.csv"
[10] "EVA_Araucasas.csv" "EVAB_Arauca.csv" "MGN2017_81_ARAUCA.rar"
datos <- read_csv("./EVA_Araucar.csv")
head(datos)
tail(datos)
Tenga en cuenta que cada municipio tiene estadísticas sobre superficie sembrada, superficie cosechada y rendimiento para diferentes cultivos en diferentes años. El atributo SUBGRUPO y CULTIVO parecen referirse a lo mismo (es decir, un cultivo). Los cultivos se clasifican además en un GRUPO determinado.
En esta tabla, no tenemos unidades. Sin embargo, si revisamos el archivo csv original, encontramos que las unidades de área son hectáreas y que las unidades de rendimiento son Ton / ha.
Usaremos la biblioteca dplyr para explorar el contenido del objeto de datos.
Primero, obtengamos un resumen del rendimiento (es decir, el rendimiento promedio durante varios años) por grupo y municipio:
datos %>%
group_by(MUNICIPIO, GRUPO) %>%
summarise(rend_prom = mean(Rendimiento, na.rm = TRUE)) -> rend_resumen
`summarise()` regrouping output by 'MUNICIPIO' (override with `.groups` argument)
### Let's visualize only the first six records
head(rend_resumen)
También podemos calcular el rendimiento promedio por GRUPO en los municipios de Arauca:
datos %>%
group_by(GRUPO) %>%
summarise(rend_dep = mean(Rendimiento, na.rm = TRUE)) -> rend_arauca
`summarise()` ungrouping output (override with `.groups` argument)
rend_arauca
Nótese que los mayores rendimientos corresponden a CEREALES, PLANTAS AROMATICAS CONDIMENTARIAS Y MEDICINALES, TUBERCULOS Y PLATANOS.
Luego, busquemos cuáles son los municipios con mayor rendimiento para cada grupo de cultivos en 2018:
datos %>%
filter(YEAR==2018) %>%
group_by(GRUPO, MUNICIPIO) %>%
summarize(max_rend = max(Rendimiento, na.rm = TRUE)) %>%
slice(which.max(max_rend)) -> rend_max_18
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
rend_max_18
Ahora, busquemos cuáles son los municipios con mayor área cosechada para cada grupo de cultivos en 2018:
datos %>%
filter(YEAR==2018) %>%
group_by(GRUPO, MUNICIPIO) %>%
summarize(max_area_cosecha = max(Area_Cosecha, na.rm = TRUE)) %>%
slice(which.max(max_area_cosecha)) -> area_cosecha_max
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
area_cosecha_max
Cabe destacar que la mayor superficie cosechada en 2018 correspondió a TUBERCULOS Y PLATANOS en TAME.
La actividad económica en Arauca en cuanto a agricultura se trata, encontramos cultivos como el Cacao, arroz mecanizado, maíz tradicional y yuca; Mientras que en otros aspectos económicos se destaca por ser una zona ganadera, de caza, silvicultura y pesca, además de tener zonas de extracción de hidrocarburos.
Primero, seleccionemos la producción de plátanos (toneladas) en TAME para cada año:
datos %>%
filter(MUNICIPIO=="TAME" & SUBGRUPO=="PLATANO") %>%
group_by(YEAR, CULTIVO) -> tame_platano
tame_platano
Hagamos una exploración gráfica básica:
# we use the ggplot 2 library
g <- ggplot(aes(x=YEAR, y=Produccion/1000), data = tame_platano) + geom_bar(stat='identity') + labs(y='Platano Production [Ton x 1000]')
g + ggtitle("Evolution of Platano Production in Tame from 2007 to 2018") + labs(caption= "Based on EMA data (DANE, 2018)")
Ahora, investiguemos qué cultivos tuvieron la mayor área cosechada en 2018:
datos %>%
filter(YEAR==2018) %>%
group_by(GRUPO) %>%
summarize(sum_area_cosecha = sum(Area_Cosecha, na.rm = TRUE)) %>%
arrange(desc(sum_area_cosecha)) -> total_area_cosecha
`summarise()` ungrouping output (override with `.groups` argument)
total_area_cosecha
Podemos ver que tuberculos y platanos tuvieron la mayor parte del área cosechada en 2018 para Arauca. ¿Qué cultivos pertenecen a este GRUPO? Puede buscar más información en DANE, la agencia gubernamental a cargo de las estadísticas nacionales en Colombia.
También podemos buscar esta información en los propios datos:
datos %>%
filter(GRUPO=="TUBERCULOS Y PLATANOS" & YEAR==2018) %>%
group_by(CULTIVO) %>%
summarize(sum_cosecha = sum(Area_Cosecha, na.rm = TRUE)) %>%
arrange(desc(sum_cosecha)) -> total_cosecha
`summarise()` ungrouping output (override with `.groups` argument)
total_cosecha
Tenga en cuenta que los cultivos de platano son la clave en la agricultura de Arauca.
Ahora veamos cuales son los municipios con mayor área cosechada para el cultivo de plátano y yuca en 2018.
datos %>%
filter(YEAR==2018 & GRUPO=="TUBERCULOS Y PLATANOS") %>%
group_by(CULTIVO, MUNICIPIO) %>%
summarize(max_area2 = max(Area_Cosecha, na.rm = TRUE)) %>%
slice(which.max(max_area2)) -> area_cosecha2
`summarise()` regrouping output by 'CULTIVO' (override with `.groups` argument)
area_cosecha2
Regresemos a los datos de tuberculos y plátanos. Antes de graficar, necesitaremos agregar, al objeto total_area_cosecha, un nuevo campo con abreviaturas para cada GRUPO de cultivos. De lo contrario, la trama se verá desordenada.
total_area_cosecha$CROP <- abbreviate(total_area_cosecha$GRUPO, 3)
Ahora es el momento de trazar:
# we use the ggplot 2 library
g <- ggplot(aes(x=CROP, y=sum_area_cosecha), data = total_area_cosecha) + geom_bar(stat='identity') + labs(y='Total Harvested Area [Ha]')
g+ ggtitle("Total harvested area by crop groups in 2018 for Arauca") + theme(plot.title = element_text(hjust = 0.5)) +
labs(caption= "Based on EMA data (DANE, 2018)")
Puede explorar más las estadísticas correspondientes a su departamento. Intente obtener información sobre el rendimiento de diferentes cultivos, principalmente aquellos que son esenciales para la economía de su departamento.
Ya he subido a RStudio los datos administrativos de Arauca. Como se comentó anteriormente en una clase virtual, es una buena idea utilizar el shapefile correspondiente a Marco Geoestadistico Departamental que se encuentra disponible en DANE Geoportal.
Comencemos a leer los datos usando la biblioteca sf:
ant_munic <- sf::st_read("./81_ARAUCA/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
Reading layer `MGN_MPIO_POLITICO' from data source `C:\Users\danye\OneDrive\Documents\ara\81_ARAUCA\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
Simple feature collection with 7 features and 9 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: -72.36662 ymin: 6.036228 xmax: -69.42756 ymax: 7.104381
geographic CRS: WGS 84
¿Qué es ant_munic?
ant_munic
Simple feature collection with 7 features and 9 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: -72.36662 ymin: 6.036228 xmax: -69.42756 ymax: 7.104381
geographic CRS: WGS 84
DPTO_CCDGO MPIO_CCDGO MPIO_CNMBR MPIO_CRSLC MPIO_NAREA
1 81 81001 ARAUCA 1959 5787.9421
2 81 81591 PUERTO RONDÓN Decreto Nal 677 de Abril 13 de 1987 2281.4291
3 81 81220 CRAVO NORTE Decreto Nal 677 de Abril 13 de 1987 5212.6908
4 81 81065 ARAUQUITA Decreto 1447 del 28 de Julio de 1971 3046.8789
5 81 81300 FORTUL Decreto 2926 de 1989 1158.6276
6 81 81736 SARAVENA Decreto Nal 204 de Feb 3 de 1976 945.1354
7 81 81794 TAME 1959 5418.7040
MPIO_NANO DPTO_CNMBR Shape_Leng Shape_Area geometry
1 2017 ARAUCA 4.668016 0.47162612 POLYGON ((-70.68038 7.09393...
2 2017 ARAUCA 2.932376 0.18593602 POLYGON ((-70.87879 6.62133...
3 2017 ARAUCA 3.963937 0.42393331 POLYGON ((-70.40276 6.64639...
4 2017 ARAUCA 3.258765 0.24864660 POLYGON ((-71.58441 7.04298...
5 2017 ARAUCA 2.056433 0.09461063 POLYGON ((-71.54473 6.75924...
6 2017 ARAUCA 1.294126 0.07721413 POLYGON ((-71.76224 7.06602...
7 2017 ARAUCA 3.938087 0.44219010 POLYGON ((-71.73216 6.70303...
Tenga en cuenta que ant_munic es una colección de funciones simple. Asegúrese de revisar este enlace para comprender qué es una característica simple.
Tenga en cuenta también que los datos utilizan el sistema de referencia de coordenadas geográficas WGS1984 (es decir, el código 4326 epsg).
Podemos usar la función left_join para unir los municipios y las estadísticas agrícolas seleccionadas.
Necesitamos un atributo común (o variable compartida) en el que basar la unión. El mejor atributo es una identificación. En ant_munic, el atributo MPIO_CCDGO parece estar bien (lee 81 para Arauca). En datos, el atributo correspondiente es COD_MUN (lee 81 para Arauca).
Verifiquemos la última declaración:
datos %>% filter (MUNICIPIO =="TAME") -> ara_datos
ara_datos
class(ara_datos$COD_MUN)
[1] "numeric"
Para poder hacer la unión, necesitamos cambiar tanto el tipo de datos como el contenido del código que identifica a cada municipio. Para esta tarea, es una buena idea crear una copia de los datos estadísticos originales. Con este enfoque, cualquier movimiento falso no estropeará los datos originales.
Procedamos paso a paso:
datos2 <- datos
datos2$TEMP <- as.character(datos2$COD_MUN)
datos2$MPIO_CCDGO <- as.factor(datos2$TEMP)
head(datos2)
Asegúrese de verificar, en el objeto datos 2, las características del nuevo atributo MPIO_CCDGO.
Ahora, filtremos un solo año y seleccionemos solo dos atributos relevantes:
datos2 %>% filter(CULTIVO == "PLATANO") -> datos3
head(datos3)
class(datos3)
[1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
datos4 <- datos3 %>% dplyr::select(MUNICIPIO, MPIO_CCDGO, YEAR, Produccion, Rendimiento)
datos4
datos4 %>%
gather("YEAR", "Produccion", "Rendimiento" , key = variable, value = number)
head(datos4)
Ésta es una tarea clave. Implica varios pasos para poder convertir la tabla de atributos de formato largo a formato ancho. Más información sobre estos pasos aquí
datos4 %>%
group_by(MPIO_CCDGO) %>%
mutate(Visit = 1:n()) %>%
gather("YEAR", "Produccion", "Rendimiento", key = variable, value = number) %>%
unite(combi, variable, Visit) %>%
spread(combi, number) -> datos5
head(datos5)
tail(datos5)
También haremos una copia de la colección de características simples (nuevamente, solo en caso de un movimiento en falso):
ant_munic2 <- ant_munic
Ahora es el momento de unirse:
ant_munic_stat = left_join(ant_munic2, datos5, by="MPIO_CCDGO")
summary(ant_munic_stat)
DPTO_CCDGO MPIO_CCDGO MPIO_CNMBR MPIO_CRSLC MPIO_NAREA
Length:7 Length:7 Length:7 Length:7 Min. : 945.1
Class :character Class :character Class :character Class :character 1st Qu.:1720.0
Mode :character Mode :character Mode :character Mode :character Median :3046.9
Mean :3407.3
3rd Qu.:5315.7
Max. :5787.9
MPIO_NANO DPTO_CNMBR Shape_Leng Shape_Area MUNICIPIO
Min. :2017 Length:7 Min. :1.294 Min. :0.07721 Length:7
1st Qu.:2017 Class :character 1st Qu.:2.494 1st Qu.:0.14027 Class :character
Median :2017 Mode :character Median :3.259 Median :0.24865 Mode :character
Mean :2017 Mean :3.159 Mean :0.27774
3rd Qu.:2017 3rd Qu.:3.951 3rd Qu.:0.43306
Max. :2017 Max. :4.668 Max. :0.47163
Produccion_1 Produccion_10 Produccion_11 Produccion_2 Produccion_3
Min. : 442 Min. : 1512 Min. : 2052 Min. : 507 Min. : 520
1st Qu.: 2949 1st Qu.: 3998 1st Qu.: 5545 1st Qu.: 3780 1st Qu.: 4036
Median :16402 Median : 36894 Median : 58540 Median : 21970 Median : 22400
Mean :19660 Mean : 95359 Mean :103462 Mean : 31034 Mean : 42710
3rd Qu.:17190 3rd Qu.: 75361 3rd Qu.: 78315 3rd Qu.: 26750 3rd Qu.: 28988
Max. :80500 Max. :470391 Max. :495925 Max. :133704 Max. :210000
Produccion_4 Produccion_5 Produccion_6 Produccion_7 Produccion_8
Min. : 225 Min. : 300 Min. : 338 Min. : 540 Min. : 560
1st Qu.: 6120 1st Qu.: 8230 1st Qu.: 8985 1st Qu.: 7600 1st Qu.: 7030
Median : 21250 Median : 32500 Median : 30940 Median : 33600 Median : 48080
Mean : 47745 Mean : 54923 Mean : 55028 Mean : 58386 Mean : 61150
3rd Qu.: 31250 3rd Qu.: 40200 3rd Qu.: 36530 3rd Qu.: 53680 3rd Qu.: 58032
Max. :238000 Max. :254800 Max. :262885 Max. :252000 Max. :249284
Produccion_9 Rendimiento_1 Rendimiento_10 Rendimiento_11 Rendimiento_2
Min. : 780 Min. : 6.000 Min. :13.00 Min. :13.00 Min. : 6.50
1st Qu.: 6750 1st Qu.: 6.900 1st Qu.:19.00 1st Qu.:19.00 1st Qu.: 9.50
Median : 36486 Median : 9.130 Median :22.00 Median :20.00 Median :12.00
Mean : 77439 Mean : 8.384 Mean :20.59 Mean :20.29 Mean :10.86
3rd Qu.: 67654 3rd Qu.: 9.550 3rd Qu.:22.00 3rd Qu.:22.00 3rd Qu.:12.75
Max. :356000 Max. :10.660 Max. :27.10 Max. :27.00 Max. :13.00
Rendimiento_3 Rendimiento_4 Rendimiento_5 Rendimiento_6 Rendimiento_7
Min. : 6.50 Min. : 7.50 Min. : 7.50 Min. : 7.50 Min. :10.00
1st Qu.: 9.50 1st Qu.:10.00 1st Qu.:10.25 1st Qu.:11.00 1st Qu.:12.00
Median :12.50 Median :12.50 Median :12.50 Median :13.00 Median :15.00
Mean :11.29 Mean :11.36 Mean :11.79 Mean :12.14 Mean :13.86
3rd Qu.:13.50 3rd Qu.:12.75 3rd Qu.:13.50 3rd Qu.:13.75 3rd Qu.:16.00
Max. :14.00 Max. :14.00 Max. :15.00 Max. :15.00 Max. :16.00
Rendimiento_8 Rendimiento_9 YEAR_1 YEAR_10 YEAR_11 YEAR_2
Min. :10.00 Min. :10.00 Min. :2008 Min. :2017 Min. :2018 Min. :2009
1st Qu.:12.00 1st Qu.:14.00 1st Qu.:2008 1st Qu.:2017 1st Qu.:2018 1st Qu.:2009
Median :15.00 Median :18.00 Median :2008 Median :2017 Median :2018 Median :2009
Mean :13.86 Mean :16.29 Mean :2008 Mean :2017 Mean :2018 Mean :2009
3rd Qu.:16.00 3rd Qu.:19.00 3rd Qu.:2008 3rd Qu.:2017 3rd Qu.:2018 3rd Qu.:2009
Max. :16.00 Max. :20.00 Max. :2008 Max. :2017 Max. :2018 Max. :2009
YEAR_3 YEAR_4 YEAR_5 YEAR_6 YEAR_7 YEAR_8
Min. :2010 Min. :2011 Min. :2012 Min. :2013 Min. :2014 Min. :2015
1st Qu.:2010 1st Qu.:2011 1st Qu.:2012 1st Qu.:2013 1st Qu.:2014 1st Qu.:2015
Median :2010 Median :2011 Median :2012 Median :2013 Median :2014 Median :2015
Mean :2010 Mean :2011 Mean :2012 Mean :2013 Mean :2014 Mean :2015
3rd Qu.:2010 3rd Qu.:2011 3rd Qu.:2012 3rd Qu.:2013 3rd Qu.:2014 3rd Qu.:2015
Max. :2010 Max. :2011 Max. :2012 Max. :2013 Max. :2014 Max. :2015
YEAR_9 geometry
Min. :2016 POLYGON :7
1st Qu.:2016 epsg:4326 :0
Median :2016 +proj=long...:0
Mean :2016
3rd Qu.:2016
Max. :2016
#install.packages("RColorBrewer")
library(RColorBrewer)
library(leaflet)
Grafiquemos los municipios con su correspondiente producción de Plátano para un solo año:
bins <- c(0, 2500, 5000, 10000, 20000, 50000, 100000, 1500000)
pal <- colorBin("Spectral", domain = ant_munic_stat$Produccion_11, bins = bins)
mapa <- leaflet(data = ant_munic_stat) %>%
addTiles() %>%
addPolygons(label = ~Produccion_11,
popup = ~MPIO_CNMBR,
fillColor = ~pal(Produccion_11),
color = "#444444",
weight = 1,
smoothFactor = 0.5,
opacity = 1.0,
fillOpacity = 0.5,
highlightOptions = highlightOptions(color = "white", weight = 2, bringToFront = TRUE)
) %>%
addProviderTiles(providers$OpenStreetMap) %>%
addLegend("bottomright", pal = pal, values = ~Produccion_11,
title = "Producción de platano en Arauca [Ton] (2018)",
opacity = 1
)
mapa
Tenga en cuenta que utilicé tanto etiquetas como ventanas emergentes en este mapa. En caso de que desee obtener más información sobre cómo dibujar mapas interactivos con folleto, siga este enlace.
Ahora trazaremos el rendimiento por municipio.
bins <- c(0, 5, 10, 15, 20, 25, 30, 35)
pal <- colorBin("YlOrRd", domain = ant_munic_stat$Rendimiento_11, bins = bins)
mapa <- leaflet(data = ant_munic_stat) %>%
addTiles() %>%
addPolygons(label = ~Rendimiento_11,
popup = ~MPIO_CNMBR,
fillColor = ~pal(Rendimiento_11),
color = "#444444",
weight = 1,
smoothFactor = 0.5,
opacity = 1.0,
fillOpacity = 0.5,
highlightOptions = highlightOptions(color = "white", weight = 2, bringToFront = TRUE)
) %>%
addProviderTiles(providers$OpenStreetMap) %>%
addLegend("bottomright", pal = pal, values = ~Rendimiento_11,
title = "Rendimiento de platano en Arauca [Ton] (2018)",
opacity = 1
)
mapa
Al contrastar la producción por municipio respecto al rendimiento, podemos evidencial que en los municipios de Puerto Rondon, Cravo Norte y en menor medida Arauca, el rendimiento es congruente con la producción, denotando que en estos departamentos no es prioridad total el cultivo de platano,lo cual entre otras, indica el grado de concentración productiva que existe en los departamentos de Tame, Fortul, Saravena, y Arauquita.
Ahora es el momento de replicar, adaptar y mejorar este cuaderno para explorar las estadísticas agrícolas de su departamento.
¡¡¡Buena suerte!!!
sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Colombia.1252 LC_CTYPE=Spanish_Colombia.1252
[3] LC_MONETARY=Spanish_Colombia.1252 LC_NUMERIC=C
[5] LC_TIME=Spanish_Colombia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] leaflet_2.0.3 RColorBrewer_1.1-2 cowplot_1.1.0 ggrepel_0.8.2
[5] GSODR_2.1.2 rnaturalearth_0.1.0 viridis_0.5.1 viridisLite_0.3.0
[9] sf_0.9-5 raster_3.3-13 maptools_1.0-2 rgeos_0.5-5
[13] sp_1.4-2 forcats_0.5.0 stringr_1.4.0 dplyr_1.0.2
[17] purrr_0.3.4 readr_1.3.1 tidyr_1.1.2 tibble_3.0.3
[21] ggplot2_3.3.2 tidyverse_1.3.0 here_0.1
loaded via a namespace (and not attached):
[1] httr_1.4.2 jsonlite_1.7.0 modelr_0.1.8
[4] assertthat_0.2.1 blob_1.2.1 cellranger_1.1.0
[7] yaml_2.2.1 pillar_1.4.6 backports_1.1.7
[10] lattice_0.20-41 glue_1.4.2 digest_0.6.25
[13] rvest_0.3.6 leaflet.providers_1.9.0 colorspace_1.4-1
[16] htmltools_0.5.0 pkgconfig_2.0.3 broom_0.7.0
[19] haven_2.3.1 scales_1.1.1 farver_2.0.3
[22] generics_0.0.2 ellipsis_0.3.1 withr_2.2.0
[25] cli_2.0.2 magrittr_1.5 crayon_1.3.4
[28] readxl_1.3.1 evaluate_0.14 fs_1.5.0
[31] fansi_0.4.1 xml2_1.3.2 foreign_0.8-80
[34] class_7.3-17 data.table_1.13.0 tools_4.0.2
[37] hms_0.5.3 lifecycle_0.2.0 munsell_0.5.0
[40] reprex_0.3.0 compiler_4.0.2 e1071_1.7-3
[43] tinytex_0.25 rlang_0.4.7 classInt_0.4-3
[46] units_0.6-7 grid_4.0.2 rstudioapi_0.11
[49] htmlwidgets_1.5.1 crosstalk_1.1.0.1 base64enc_0.1-3
[52] labeling_0.3 rmarkdown_2.3 gtable_0.3.0
[55] codetools_0.2-16 DBI_1.1.0 R6_2.4.1
[58] gridExtra_2.3 lubridate_1.7.9 knitr_1.29
[61] rprojroot_1.3-2 KernSmooth_2.23-17 stringi_1.4.6
[64] Rcpp_1.0.5 vctrs_0.3.3 dbplyr_1.4.4
[67] tidyselect_1.1.0 xfun_0.16