Code
library(tidyverse)
library(FAOSTAT)
library(readxl)
library(ggrepel)
library(scales)
library(dplyr)
library(ggplot2)
library(DT)
library(ggrepel)Este documento presenta el procedimiento utilizado para construir los indicadores empleados en el estudio “Innovación agrícola como política económica: lecciones del modelo brasileño para fortalecer la productividad y diversificación productiva en Venezuela”.
library(tidyverse)
library(FAOSTAT)
library(readxl)
library(ggrepel)
library(scales)
library(dplyr)
library(ggplot2)
library(DT)
library(ggrepel)Como primer paso para la obtención de datos es necesario tener creado una cuenta en FAOSTAT para poder ingresar y realizar la desacarga de datos, para eso se usará el siguiente código, a fines prácticos no se ejecutará, debido a que cada usuario y contraseña es personal.
df_qcl_bulk <- get_faostat_bulk(code = "QCL",
data_folder = tempdir())
saveRDS(df_qcl_bulk,"datos/faostat_qcl.rds")Los datos del rendimiento agrícola se obtuvieron del dominio de (QCL) de FAOSTAT. El cual contiene una base de datos de información anual sobre productos agrícolas, producción, superficie cosechada y rendimiento para los diferentes países. Para garantizar la reproducibilidad del análisis y evitar que el renderizador del documento dependa de una conexión activa de la API de FAOSTAT, se descargo la información y se almacenan los datos de forma local en formato RDS, por lo que posteriormente se utilizaran la copia de estos datos.
# Cargar la base de FAOSTAT previamente descargada
df_qcl <- readRDS("datos/faostat_qcl.rds")
# Comprobar estructura
dim(df_qcl)[1] 4209110 14
Antes de seleccionar los países y cultivos que serán utilizados en el análisis, es importante realizar una exploración de la base de datos para identificar los códigos correspondientes a cada unidad, evitando así la asignación arbitraria de los mismos.
paises <- df_qcl %>%
distinct(area_code, area) %>%
arrange(area)DT::datatable(paises,
rownames = FALSE,
options = list(pageLength = 10,
lengthMenu = c(10, 25, 50, 100),
scrollX = TRUE))En nuestro caso trabajaremos con Brasil (21) y Venezuela (236).
Una vez identificados los países de interés, se procedió a explorar los productos disponibles en la base QCL de FAOSTAT. Para el análisis se seleccionaron tres cultivos: arroz, maíz y caña de azúcar.
cultivos <- df_qcl %>%
distinct(item_code, item) %>%
arrange(item)
DT::datatable(cultivos,
rownames = FALSE,
options = list(pageLength = 10,
lengthMenu = c(10, 25, 50, 100),
scrollX = TRUE))La base QCL contiene diferentes indicadores asociados a los productos agrícolas. Antes de seleccionar la variable utilizada en el análisis, se revisaron los indicadores disponibles para identificar el correspondiente al rendimiento agrícola.
indicadores <- df_qcl %>%
distinct(element_code, element) %>%
arrange(element)
DT::datatable(indicadores,
rownames = FALSE,
options = list(pageLength = 10,
lengthMenu = c(10, 25, 50, 100),
scrollX = TRUE))Esta comprobación permite identificar la unidad original en la que FAOSTAT reporta el rendimiento agrícola y establecer, cuando sea necesario, la transformación utilizada posteriormente en el análisis.
unidades <- df_qcl %>%
distinct(element_code, element, unit) %>%
arrange(element, unit)
DT::datatable(unidades,
rownames = FALSE,
options = list(pageLength = 10,
lengthMenu = c(10, 25, 50, 100),
scrollX = TRUE))El indicador seleccionado para medir la productividad física de los cultivos es “yield”, identificado en la base de FAOSTAT por el código 5412 expresados en kilogramos por hectárea (kg/ha). La selección de esta unidad permite comparar directamente la cantidad producida por unidad de superficie entre Brasil y Venezuela, facilitando así la interpretación de los resultados, donde, posteriormente serán transformados a toneladas por hectáreas (t/ha).
Rendimiento (t/ha)= (rendimiento (kg/ha)) / 1000
Revisaremos los años disponibles en la base para determinar el período temporal que usaremos en el estudio.
anios <- df_qcl %>%
distinct(year) %>%
arrange(year)
range(df_qcl$year, na.rm = TRUE)[1] 1961 2024
Realizaremos una exploración rápida en los países seleccionados para verificar si ambos tienen disponibilidad de los datos.
cobertura <- df_qcl %>%
filter(area_code %in% c(21, 236),
item_code %in% c(27, 56, 156),
element_code == 5412) %>%
count(area, item, name = "observaciones") %>%
arrange(area, item)
cobertura area item observaciones
1 Brazil Maize (corn) 64
2 Brazil Rice 64
3 Brazil Sugar cane 64
4 Venezuela (Bolivarian Republic of) Maize (corn) 64
5 Venezuela (Bolivarian Republic of) Rice 64
6 Venezuela (Bolivarian Republic of) Sugar cane 64
La comprobación de la cobertura muestra que la combinación de país-cultivo seleccionado cuentan con 64 observaciones anuales es decir de 1961 hasta 2024.
El análisis se concentrará en un período de 2000-2024, esta delimitación temporal permite examinar la evolución reciente de la productividad agrícola y mantener la coherencia en el estudio comparativo.
Una vez que ya tenemos identificados los países, productos, indicadores, unidad de medida y período, construiremos la base para el estudio del rendimiento agrícola.
paises_estudio <- c(21, 236)
cultivos_estudio <- c(27, 56, 156)
indicador_rendimiento <- 5412rendimientos <- df_qcl %>%
filter(area_code %in% paises_estudio,
item_code %in% cultivos_estudio,
element_code == indicador_rendimiento,
year >= 2000,
year <= 2024) %>%
transmute( País = area,
Cultivo = item,
Año = year,
Rendimiento_kg_ha = value)
dim(rendimientos)[1] 150 4
rendimientos %>%
count(País, Cultivo) País Cultivo n
1 Brazil Maize (corn) 25
2 Brazil Rice 25
3 Brazil Sugar cane 25
4 Venezuela (Bolivarian Republic of) Maize (corn) 25
5 Venezuela (Bolivarian Republic of) Rice 25
6 Venezuela (Bolivarian Republic of) Sugar cane 25
rendimientos <- rendimientos %>%
mutate(País = recode(País,
"Brazil" = "Brasil",
"Venezuela (Bolivarian Republic of)" = "Venezuela"))
head(rendimientos) País Cultivo Año Rendimiento_kg_ha
1 Brasil Maize (corn) 2000 2718.2
2 Brasil Maize (corn) 2001 3401.9
3 Brasil Maize (corn) 2002 3055.9
4 Brasil Maize (corn) 2003 3727.3
5 Brasil Maize (corn) 2004 3367.1
6 Brasil Maize (corn) 2005 3040.3
Los valores obtenidos se encuentran expresados en (kg/ha). Para facilitar los resultados trabajaremos en toneladas por hectáreas (t/ha).
rendimientos <- rendimientos %>%
mutate(Rendimiento_t_ha = Rendimiento_kg_ha / 1000)
head(rendimientos) País Cultivo Año Rendimiento_kg_ha Rendimiento_t_ha
1 Brasil Maize (corn) 2000 2718.2 2.7182
2 Brasil Maize (corn) 2001 3401.9 3.4019
3 Brasil Maize (corn) 2002 3055.9 3.0559
4 Brasil Maize (corn) 2003 3727.3 3.7273
5 Brasil Maize (corn) 2004 3367.1 3.3671
6 Brasil Maize (corn) 2005 3040.3 3.0403
rendimientos %>% count(País, Cultivo) País Cultivo n
1 Brasil Maize (corn) 25
2 Brasil Rice 25
3 Brasil Sugar cane 25
4 Venezuela Maize (corn) 25
5 Venezuela Rice 25
6 Venezuela Sugar cane 25
rendimientos <- rendimientos %>%
mutate(Cultivo_es = recode(Cultivo,
"Maize (corn)" = "Maíz",
"Rice" = "Arroz",
"Sugar cane" = "Caña de azúcar"))
head(rendimientos) País Cultivo Año Rendimiento_kg_ha Rendimiento_t_ha Cultivo_es
1 Brasil Maize (corn) 2000 2718.2 2.7182 Maíz
2 Brasil Maize (corn) 2001 3401.9 3.4019 Maíz
3 Brasil Maize (corn) 2002 3055.9 3.0559 Maíz
4 Brasil Maize (corn) 2003 3727.3 3.7273 Maíz
5 Brasil Maize (corn) 2004 3367.1 3.3671 Maíz
6 Brasil Maize (corn) 2005 3040.3 3.0403 Maíz
rendimientos %>%
count(Cultivo, Cultivo_es) Cultivo Cultivo_es n
1 Maize (corn) Maíz 50
2 Rice Arroz 50
3 Sugar cane Caña de azúcar 50
rendimientos <- rendimientos %>%
arrange(País, Cultivo_es, Año)
head(rendimientos) País Cultivo Año Rendimiento_kg_ha Rendimiento_t_ha Cultivo_es
1 Brasil Rice 2000 3038.2 3.0382 Arroz
2 Brasil Rice 2001 3240.5 3.2405 Arroz
3 Brasil Rice 2002 3324.6 3.3246 Arroz
4 Brasil Rice 2003 3249.0 3.2490 Arroz
5 Brasil Rice 2004 3556.5 3.5565 Arroz
6 Brasil Rice 2005 3369.1 3.3691 Arroz
Para comparar la trayectoria productiva de Brasil y Venezuela se construyeron series temporales del rendimiento agrícola expresado en toneladas por hectárea (t/ha) en un período establecido entre el 2000 y el 2024 como se había mencionado anteriormente.
grafico_rendimiento <- function(datos, cultivo_nombre){
datos_grafico <- datos %>%
filter(Cultivo_es == cultivo_nombre)
# Seleccionar años importantes para etiquetas
etiquetas <- datos_grafico %>%
filter(Año %in% c(2000, 2005, 2010, 2015, 2020, 2024))
ggplot(datos_grafico,aes(x = Año,
y = Rendimiento_t_ha,
color = País,
group = País)) +
geom_line(linewidth = 1.3) +
geom_point(size = 3) +
geom_text_repel(
data = etiquetas,
aes(label = paste0(round(Rendimiento_t_ha,1)," t/ha")),
size = 3.3,
fontface = "bold",
box.padding = 0.8,
point.padding = 0.2,
max.overlaps = Inf,
direction = "both",
seed = 123) +
scale_color_manual(values = c("Brasil" = "#116458",
"Venezuela" = "#0613CB")) +
scale_x_continuous(breaks = seq(2000,2024,2),
expand = expansion(mult = c(0.05,0.08))) +
scale_y_continuous(labels = label_comma()) +
labs(title = paste0("Gráfico: Rendimiento físico en cultivo de ",
cultivo_nombre," (2000-2024). (t/ha)."),
x = "Año",
y = "Rendimiento (t/ha)",
color = NULL,
caption ="Fuente: Elaboración propia con datos de FAOSTAT (Dominio QCL).") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold",
size = 13,
hjust = 0.5,
margin = margin(b = 15)),
legend.position = "top",
legend.text = element_text(size = 12,
face = "bold"),
axis.title = element_text(face = "bold"),
panel.grid.major = element_line(linewidth = 0.35,
color = "grey80"),
panel.grid.minor = element_blank(),
plot.caption = element_text(hjust = 0,
size = 11),
plot.margin =
margin(
t = 30,
r = 30,
b = 20,
l = 20
)
)
}grafico_rendimiento(rendimientos,"Arroz")grafico_rendimiento(rendimientos,"Maíz")grafico_rendimiento(rendimientos,"Caña de azúcar")Esta variable permite aproximarse a la capacidad de ambos países para generar y sostener conocimiento científico y tecnológico aplicado al sector agropecuario.
De acuerdo con el ensayo, la comparación se realiza mediante el gasto real en I+D agrícola, expresado en millones de dólares estadounidenses constantes a precios de 2015 y ajustados por paridad de poder adquisitivo (PPA). Esta unidad permite realizar una comparación entre países evitando que las diferencias cambiarias y de precios internos distorsionen la magnitud de la inversión.
Para este análisis se utiliza el dominio (AE – Agricultural Science and Technology Indicators (ASTI)) de FAOSTAT.
A diferencia de los gráficos de productividad agrícola, que utilizan el dominio QCL de FAOSTAT, el análisis de la inversión en investigación agrícola requiere utilizar el dominio (AE–ASTI).
Primero se consulta el catálogo de conjuntos de datos de FAOSTAT para identificar la ubicación oficial del dominio AE. Posteriormente, se descarga el archivo correspondiente, se descomprime y se importa a R para realizar la exploración y selección de las variables necesarias.
El resultado de este procedimiento es una base denominada `df_ae_raw`, que contiene los registros disponibles del dominio AE–ASTI.
# Catálogo de dominios de FAOSTAT
catalogo_url <- "https://fenixservices.fao.org/faostat/static/bulkdownloads/datasets_E.json"
catalogo <- jsonlite::fromJSON(catalogo_url)
df_datasets <- tibble::as_tibble(catalogo$Datasets$Dataset)
# Identificar el dominio AE - ASTI
url_ae <- df_datasets %>%
dplyr::filter(DatasetCode == "AE") %>%
dplyr::pull(FileLocation)
# Descargar el archivo
temp_zip <- tempfile(fileext = ".zip")
temp_dir <- tempdir()
download.file(url_ae,
destfile = temp_zip,
mode = "wb")
# Descomprimir
archivos <- unzip(temp_zip,
exdir = temp_dir)
# Identificar el archivo CSV
archivo_csv <- archivos[grepl("\\.csv$",
archivos,
ignore.case = TRUE)][1]
# Leer los datos
df_ae_raw <- readr::read_csv(archivo_csv,
show_col_types = FALSE)
# Estandarizar nombres de columnas
names(df_ae_raw) <- tolower(
gsub("[ ._]+", "_", names(df_ae_raw)))
# Comprobar el resultado
dim(df_ae_raw)[1] 7789 15
Una vez cargada la base, se identifican los indicadores disponibles para Brasil y Venezuela. Este procedimiento permite seleccionar la variable que corresponde específicamente al gasto total en investigación y desarrollo agrícola expresado en dólares estadounidenses PPA a precios de 2015.
# Indicadores disponibles para Brasil y Venezuela
df_id_agr <- df_ae_raw %>%
filter(area_code %in% c(21, 236))
indicadores_asti <- df_id_agr %>%
distinct(indicator_code,
indicator,
unit) %>%
arrange(indicator_code)
DT::datatable(indicadores_asti,
options = list(pageLength = 10,
scrollX = TRUE),
rownames = FALSE)La exploración de los indicadores permitió identificar el indicador 8003: “Total Expenditure in Agricultural R&D (US$, PPP, 2015 prices)”, cuya unidad de medida es millones de USD.
# Filtrar el gasto total en I+D agrícola
# Indicador 8003: USD PPP, precios de 2015
gasto_id <- df_ae_raw %>%
filter(area_code %in% c(21, 236),
indicator_code == 8003) %>%
select(Pais = area,
Año = year,
Gasto_ID = value) %>%
mutate(Año = as.integer(Año),
Gasto_ID = as.numeric(Gasto_ID))
# Revisar las primeras observaciones
head(gasto_id)# A tibble: 6 × 3
Pais Año Gasto_ID
<chr> <int> <dbl>
1 Brazil 2004 1767.
2 Brazil 2005 1744.
3 Brazil 2006 1820.
4 Brazil 2007 1851.
5 Brazil 2008 2071.
6 Brazil 2009 2473.
Antes de elaborar el gráfico se verifica la disponibilidad de información para cada país. Esta comprobación es importante debido a que la cobertura de los datos no es homogénea entre Brasil y Venezuela.
Los datos disponibles abarcan el período 2004–2023 para Brasil, mientras que para Venezuela existen únicamente cinco observaciones entre 2009 y 2013.
Por esta razón, los años para los cuales no existe información de Venezuela no se completan mediante interpolaciones o estimaciones. Se mantienen únicamente las observaciones efectivamente disponibles en la base de FAOSTAT.
# Cobertura de datos por país
cobertura_id <- gasto_id %>%
group_by(Pais) %>%
summarise(
Año_inicio = min(Año, na.rm = TRUE),
Año_final = max(Año, na.rm = TRUE),
Observaciones = sum(!is.na(Gasto_ID)),
.groups = "drop"
)
cobertura_id# A tibble: 2 × 4
Pais Año_inicio Año_final Observaciones
<chr> <int> <int> <int>
1 Brazil 2004 2023 20
2 Venezuela (Bolivarian Republic of) 2009 2013 5
# Valores disponibles para Venezuela
gasto_id %>%
filter(Pais == "Venezuela (Bolivarian Republic of)") %>%
arrange(Año)# A tibble: 5 × 3
Pais Año Gasto_ID
<chr> <int> <dbl>
1 Venezuela (Bolivarian Republic of) 2009 55.7
2 Venezuela (Bolivarian Republic of) 2010 92.0
3 Venezuela (Bolivarian Republic of) 2011 47.5
4 Venezuela (Bolivarian Republic of) 2012 119.
5 Venezuela (Bolivarian Republic of) 2013 86.2
# Preparar la base definitiva para el gráfico
gasto_id <- gasto_id %>%
mutate(
Pais = recode(
Pais,
"Brazil" = "Brasil",
"Venezuela (Bolivarian Republic of)" = "Venezuela"
)
) %>%
arrange(Pais, Año)
# Comprobar los países y años disponibles
gasto_id %>%
group_by(Pais) %>%
summarise(
Año_inicio = min(Año),
Año_final = max(Año),
Observaciones = n(),
.groups = "drop"
)# A tibble: 2 × 4
Pais Año_inicio Año_final Observaciones
<chr> <int> <int> <int>
1 Brasil 2004 2023 20
2 Venezuela 2009 2013 5
El gráfico presenta la evolución del gasto real en investigación y desarrollo agrícola de Brasil y Venezuela. Los valores están expresados en millones de dólares estadounidenses constantes, calculados a precios PPA de 2015.
# Gráfico: Gasto real en I+D agrícola
gasto_id_grafico <- ggplot(gasto_id,
aes(x = Año,
y = Gasto_ID,
color = Pais,
group = Pais )) +
geom_line(linewidth = 1.3) +
geom_point(size = 3) +
geom_text_repel(aes(label = paste0(round(Gasto_ID, 1),
" M$")),
size = 3.2,
fontface = "bold",
show.legend = FALSE,
box.padding = 0.8,
point.padding = 0.2,
max.overlaps = Inf,
seed = 123) +
scale_color_manual(
breaks = c("Brasil", "Venezuela"),
values = c("Brasil" = "#116458",
"Venezuela" = "#0613CB")) +
scale_x_continuous(
breaks = seq(2004, 2023, 2),
expand = expansion(mult = c(0.05, 0.08))) +
scale_y_continuous(
labels = scales::label_comma()) +
labs(
title = "Gráfico 6: Gasto real en I+D agrícola",
subtitle = "Inversión agropecuaria en millones de USD constantes (precios PPA de 2015)",
x = "Año",
y = "Millones de USD PPA",
color = NULL,
caption = "Fuente: Elaboración propia con datos de FAOSTAT (Dominio AE - ASTI).") +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(
face = "bold",
size = 13,
hjust = 0.5,
margin = margin(b = 10)),
plot.subtitle = element_text(
size = 10,
hjust = 0.5,
margin = margin(b = 15)),
legend.position = "top",
legend.text = element_text(
size = 11,
face = "bold"),
axis.title = element_text(
face = "bold"),
panel.grid.major = element_line(
linewidth = 0.35,
color = "grey80"),
panel.grid.minor = element_blank(),
plot.caption = element_text(
hjust = 0,
size = 10),
plot.margin = margin(
t = 25,
r = 30,
b = 20,
l = 20))
gasto_id_grafico Para este análisis se utiliza el dominio AF – Agricultural Science and Technology: ASTI – Researchers de FAOSTAT. Este dominio permite obtener información sobre los investigadores dedicados a actividades de investigación y desarrollo agrícola.
La selección de este indicador permite complementar el análisis realizado en el gráfico anterior sobre el gasto destinado a investigación y desarrollo agrícola.
# Identificar los dominios de FAOSTAT relacionados con investigadores
dominios_investigadores <- df_datasets %>%
filter(grepl("research|researcher|ASTI",
paste(DatasetCode, DatasetName),
ignore.case = TRUE)) %>%
select(DatasetCode,
DatasetName,
FileLocation)
dominios_investigadores# A tibble: 2 × 3
DatasetCode DatasetName FileLocation
<chr> <chr> <chr>
1 AE Agricultural Science and Technology: ASTI - Expendit… https://bul…
2 AF Agricultural Science and Technology: ASTI - Research… https://bul…
A partir del catálogo de conjuntos de datos de FAOSTAT se identifican los dominios relacionados con los indicadores de ciencia y tecnología agrícola.
La exploración permite distinguir entre el dominio AE – ASTI – Expenditures, utilizado para analizar el gasto en investigación y desarrollo agrícola, y el dominio AF – ASTI – Researchers, utilizado en este gráfico para analizar la cantidad de investigadores agrícolas.
# Revisar los nombres completos de los dominios AE y AF
dominios_investigadores %>%
select(DatasetCode,
DatasetName)# A tibble: 2 × 2
DatasetCode DatasetName
<chr> <chr>
1 AE Agricultural Science and Technology: ASTI - Expenditures
2 AF Agricultural Science and Technology: ASTI - Researchers
AF corresponde al conjunto de datos correspondiente a los investigadores agrícolas.
Una vez identificado el dominio AF, se obtiene su ubicación en el catálogo de FAOSTAT y se descarga el archivo correspondiente.
El archivo se descomprime y posteriormente se importa a R. La base resultante se denomina `df_af_raw` y contiene los registros disponibles del dominio ASTI – Researchers.
# Obtener la ubicación del dominio AF - ASTI Researchers
url_af <- df_datasets %>%
filter(DatasetCode == "AF") %>%
pull(FileLocation)
# Descargar el archivo
temp_zip_af <- tempfile(fileext = ".zip")
temp_dir_af <- tempdir()
download.file(url_af,
destfile = temp_zip_af,
mode = "wb")
# Descomprimir
archivos_af <- unzip(temp_zip_af,
exdir = temp_dir_af)
# Identificar el archivo CSV
archivo_csv_af <- archivos_af[grepl("\\.csv$",
archivos_af,
ignore.case = TRUE)][1]
# Leer los datos
df_af_raw <- readr::read_csv(archivo_csv_af,
show_col_types = FALSE)
# Estandarizar nombres de columnas
names(df_af_raw) <- tolower(gsub("[ ._]+",
"_",names(df_af_raw)))
# Comprobar dimensiones
dim(df_af_raw)[1] 3800 18
Antes de seleccionar la variable utilizada en el gráfico, se revisan los indicadores disponibles para Brasil y Venezuela.
# Indicadores disponibles para Brasil y Venezuela
# Dominio AF - ASTI Researchers
df_investigadores <- df_af_raw %>%
filter(area_code %in% c(21, 236))
indicadores_investigadores <- df_investigadores %>%
distinct(indicator_code,indicator,
unit) %>%
arrange(indicator_code)
DT::datatable(indicadores_investigadores,
options = list(pageLength = 10,
scrollX = TRUE),
rownames = FALSE)El indicador a utilizar será el 8100, ya que corresponde al número de investigadores agrícolas expresados en equivalentes a tiempo completo (FTE).
# Seleccionar investigadores agrícolas en equivalente a tiempo completo (FTE)
investigadores <- df_af_raw %>%
filter(area_code %in% c(21, 236),
indicator_code == 8100) %>%
select(Pais = area,
Año = year,
Investigadores_FTE = value) %>%
mutate(Año = as.integer(Año),
Investigadores_FTE = as.numeric(Investigadores_FTE))
# Revisar las primeras observaciones
head(investigadores)# A tibble: 6 × 3
Pais Año Investigadores_FTE
<chr> <int> <dbl>
1 Brazil 2004 4950.
2 Brazil 2005 5228.
3 Brazil 2006 5359.
4 Brazil 2007 5296.
5 Brazil 2008 5297.
6 Brazil 2009 5262.
Se seleccionan los registros correspondientes a Brasil y Venezuela y se conserva exclusivamente el indicador 8100.
Antes de elaborar el gráfico se verifica la disponibilidad temporal de los datos para ambos países.
# Cobertura de datos por país
cobertura_investigadores <- investigadores %>%
group_by(Pais) %>%
summarise(
Año_inicio = min(Año, na.rm = TRUE),
Año_final = max(Año, na.rm = TRUE),
Observaciones = sum(!is.na(Investigadores_FTE)),
.groups = "drop")
cobertura_investigadores# A tibble: 2 × 4
Pais Año_inicio Año_final Observaciones
<chr> <int> <int> <int>
1 Brazil 2004 2023 20
2 Venezuela (Bolivarian Republic of) 2007 2023 8
investigadores <- investigadores %>%
mutate(Pais = recode(Pais,
"Brazil" = "Brasil",
"Venezuela (Bolivarian Republic of)" = "Venezuela")) %>%
arrange(Pais, Año)
# Verificar resultado
unique(investigadores$Pais)[1] "Brasil" "Venezuela"
grafico_investigadores <- function(datos){
# Seleccionar años importantes para etiquetas
etiquetas <- datos %>%
filter(
Año %in% c(2004, 2006, 2008, 2010,
2012, 2014, 2016, 2018,
2020, 2023))
ggplot(datos,aes(x = Año,
y = Investigadores_FTE,
color = Pais,
group = Pais)) +
# Líneas
geom_line(linewidth = 1.3, na.rm = TRUE) +
# Puntos
geom_point(size = 3) +
# Etiquetas
geom_text_repel(data = etiquetas,
aes(label = paste0(
format(round(Investigadores_FTE, 0),
big.mark = ".",
decimal.mark = ",",
scientific = FALSE),
" FTE")),
size = 3.2,
fontface = "bold",
box.padding = 0.8,
point.padding = 0.2,
max.overlaps = Inf,
seed = 123) +
# Colores
scale_color_manual(
values = c("Brasil" = "#116458",
"Venezuela" = "#0613CB")) +
# Eje X
scale_x_continuous(
breaks = seq(2004, 2024, 2),
expand = expansion(
mult = c(0.05, 0.08))) +
# Eje Y
scale_y_continuous(
labels = label_comma(
big.mark = ".",
decimal.mark = ",")) +
# Títulos y fuente
labs(
title = "Gráfico 7: Capacidad científica agrícola (2004-2023)",
subtitle = "Investigadores agrícolas en equivalente a tiempo completo (FTE)",
x = "Año",
y = "Investigadores FTE",
color = NULL,
caption = "Fuente: Elaboración propia con datos de FAOSTAT (Dominio AF - ASTI).") +
# Tema
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(
face = "bold",
size = 14,
hjust = 0.5),
plot.subtitle = element_text(
size = 12,
hjust = 0.5),
legend.position = "top",
legend.text = element_text(
size = 12,
face = "bold"),
axis.title = element_text(
face = "bold"),
panel.grid.major = element_line(
linewidth = 0.35,
color = "grey80"),
panel.grid.minor = element_blank(),
plot.caption = element_text(
hjust = 0,
size = 10),
plot.margin = margin(
t = 25,
r = 30,
b = 20,
l = 20))}
# Generar el Gráfico 7
grafico_investigadores(investigadores)