Parte I

¿Explique que es un API?

El término API es una abreviatura de Application Programming Interfaces, que en español significa interfaz de programación de aplicaciones. Se trata de un conjunto de definiciones y protocolos que se utiliza para desarrollar e integrar el software de las aplicaciones, permitiendo la comunicación entre dos aplicaciones de software a través de un conjunto de reglas.


(Yúbal, 2019).


Las API son un medio simplificado para conectar su propia infraestructura a través del desarrollo de aplicaciones nativas de la nube, pero también le permiten compartir sus datos con clientes y otros usuarios externos. Las API públicas aportan un valor comercial único porque simplifican y amplían sus conexiones con los partners y, además, pueden rentabilizar sus datos (un ejemplo conocido es la API de Google Maps).


(Red Hat,2017).


¿Cómo Funcionan las API?

Las API permiten que sus productos y servicios se comuniquen con otros, sin necesidad de saber cómo están implementados. Esto simplifica el desarrollo de las aplicaciones y permite ahorrar tiempo y dinero. Las API le otorgan flexibilidad; simplifican el diseño, la administración y el uso de las aplicaciones; y ofrecen oportunidades de innovación, lo cual es ideal al momento de diseñar herramientas y productos nuevos (o de gestionar los actuales).

(Red Hat,2017).


Esquema de Funcionamiento de las API`S

Fuente: Red Hat (2017)

Un ejemplo de API

Cuando se utiliza una aplicación en un teléfono móvil, la aplicación se conecta a Internet y envía datos a un servidor. El servidor, a continuación, recupera los datos, los interpreta, realiza las acciones necesarias y los envía de vuelta al teléfono móvil. La aplicación interpreta entonces los datos y presenta la información deseada de manera legible. Todo ello sucede a través de una API.


(Mulesoft, 2022).


Parte II

1. Usando Libreria Wbstats

Utilizando Wbstats para acceso a los datos disponibles mediante api al Banco Mundial


Introducción


El Banco Mundial entrega información de múltiples indicadores asociados a distintas áreas de interés como: Cambio Climático, Economía, Salud, Educación, entre otros

En esta oportunidad elaboraremos una visualización basada en un gráfico de serie de tiempo para ver la evolución del ingreso per cápita de algunos países de la región.

Ejemplo #1

1.1 Llamando las Librerias

library(WDI)
library(wbstats)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

1.1.1 Información de 1 Pais

gdp_data<- wb_data(country = "MX", indicator = "NY.GDP.PCAP.CD", start_date = 1973, end_date = 2022)
summary(gdp_data)
##     iso2c              iso3c             country               date     
##  Length:49          Length:49          Length:49          Min.   :1973  
##  Class :character   Class :character   Class :character   1st Qu.:1985  
##  Mode  :character   Mode  :character   Mode  :character   Median :1997  
##                                                           Mean   :1997  
##                                                           3rd Qu.:2009  
##                                                           Max.   :2021  
##  NY.GDP.PCAP.CD        unit            obs_status          footnote        
##  Min.   :  981.5   Length:49          Length:49          Length:49         
##  1st Qu.: 2569.2   Class :character   Class :character   Class :character  
##  Median : 5650.0   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 5751.7                                                           
##  3rd Qu.: 9068.3                                                           
##  Max.   :10928.9                                                           
##   last_updated       
##  Min.   :2022-09-16  
##  1st Qu.:2022-09-16  
##  Median :2022-09-16  
##  Mean   :2022-09-16  
##  3rd Qu.:2022-09-16  
##  Max.   :2022-09-16

1.1.2 Mostrando los primeros 5 datos

head(gdp_data)
## # A tibble: 6 × 9
##   iso2c iso3c country  date NY.GDP.PCAP.CD unit  obs_status footnote last_upda…¹
##   <chr> <chr> <chr>   <dbl>          <dbl> <chr> <chr>      <chr>    <date>     
## 1 MX    MEX   Mexico   1973           981. <NA>  <NA>       <NA>     2022-09-16 
## 2 MX    MEX   Mexico   1974          1242. <NA>  <NA>       <NA>     2022-09-16 
## 3 MX    MEX   Mexico   1975          1476. <NA>  <NA>       <NA>     2022-09-16 
## 4 MX    MEX   Mexico   1976          1454. <NA>  <NA>       <NA>     2022-09-16 
## 5 MX    MEX   Mexico   1977          1301. <NA>  <NA>       <NA>     2022-09-16 
## 6 MX    MEX   Mexico   1978          1589. <NA>  <NA>       <NA>     2022-09-16 
## # … with abbreviated variable name ¹​last_updated

1.1.3 Mostrando los Ultimos 5 datos

tail(gdp_data)
## # A tibble: 6 × 9
##   iso2c iso3c country  date NY.GDP.PCAP.CD unit  obs_status footnote last_upda…¹
##   <chr> <chr> <chr>   <dbl>          <dbl> <chr> <chr>      <chr>    <date>     
## 1 MX    MEX   Mexico   2016          8745. <NA>  <NA>       <NA>     2022-09-16 
## 2 MX    MEX   Mexico   2017          9288. <NA>  <NA>       <NA>     2022-09-16 
## 3 MX    MEX   Mexico   2018          9687. <NA>  <NA>       <NA>     2022-09-16 
## 4 MX    MEX   Mexico   2019          9950. <NA>  <NA>       <NA>     2022-09-16 
## 5 MX    MEX   Mexico   2020          8432. <NA>  <NA>       <NA>     2022-09-16 
## 6 MX    MEX   Mexico   2021          9926. <NA>  <NA>       <NA>     2022-09-16 
## # … with abbreviated variable name ¹​last_updated

1.1.4 Grafica de 1 Pais

ggplot(gdp_data, aes(x = date, y = NY.GDP.PCAP.CD)) + 
  geom_point()

ggplot(gdp_data, aes(x = date, y = NY.GDP.PCAP.CD)) + 
  geom_col()

ggplot(gdp_data, aes(x = date, y = NY.GDP.PCAP.CD)) + 
  geom_col(fill = "red") + 
  geom_point(color = "blue")

1.1.5 Información de Varios Paises

more_gdp_data<- wb_data(country = c("NG", "HT", "KE"), 
                 indicator = "NY.GDP.PCAP.CD", 
                 start_date = 1981, end_date = 2015)

ggplot(more_gdp_data, aes(x=date,y=NY.GDP.PCAP.CD,color=country,shape=country))+
  geom_point()

1.2 Ejemplo 2 Utilizando libreria Wbstats

Ejemplo # 2

1.2.1 Seleccionando el indicador


El comando WDISearch() permie realizar la búsqueda de los indicadores de interés y permite incluir vairables de país con codificación iso2c En esta oportunidad utilizaremos la data para extraer el ingreso per cápita.

WDIsearch(string = "GDP per capita (current US$)",
          field = "name",
          short = FALSE)
## [1] indicator          name               description        sourceDatabase    
## [5] sourceOrganization
## <0 rows> (or 0-length row.names)

1.2.2 Buscando la data en la API


Si queremos transformar la información obtenida en un dataframe, lo podemos hacer con el comando WDI() y usando la función data.frame. Asimismo, seleccionar los paises y la fecha de inicio y término de la serie de datos.

df <- data.frame(
WDI(country = c("CL",
                "BR",
                "CO",
                "MX",
                "PE",
                "1W",
                "ZJ"),
    indicator = "NY.GDP.PCAP.CD",
    start = 1980,
    end = 2020,
    extra = FALSE))


### 1.2.3 Visualizacion de los datos

head(df)
##   country iso2c iso3c year NY.GDP.PCAP.CD
## 1  Brazil    BR   BRA 2020       6814.876
## 2  Brazil    BR   BRA 2019       8876.060
## 3  Brazil    BR   BRA 2018       9151.382
## 4  Brazil    BR   BRA 2017       9928.676
## 5  Brazil    BR   BRA 2016       8710.063
## 6  Brazil    BR   BRA 2015       8813.990


### 1.2.4 Filtrando la data en distintos data frame para cada país

Brasil <- df %>% filter(iso2c == "BR")
Colombia <- df %>% filter(iso2c == "CO")
Chile <- df %>% filter(iso2c == "CL")
Mexico <- df %>% filter(iso2c == "MX")
Peru <- df %>% filter(iso2c == "PE")
Mundo <- df %>% filter(iso2c == "1W")
LATAM <- df %>% filter(iso2c == "ZJ")

1.2.5 Graficando la data

El código que se señala permite realizar la viusalización a través de la libreria plotly.

library(plotly)

trace0 <- Brasil$NY.GDP.PCAP.CD
trace1 <- Colombia$NY.GDP.PCAP.CD
trace2 <- Chile$NY.GDP.PCAP.CD
trace3 <- Mexico$NY.GDP.PCAP.CD
trace4 <- Peru$NY.GDP.PCAP.CD
trace5 <- Mundo$NY.GDP.PCAP.CD
trace6 <- LATAM$NY.GDP.PCAP.CD
dts <- Brasil$year
df.plot <- data.frame(dts, trace0, trace1, trace2, trace3, trace4, trace5, trace6)
p1 <- plot_ly(df.plot,
              x = ~dts,
              y = ~trace0,
              name = "Brasil",
              type = "scatter",
              mode = "lines+markers") %>% 
  add_trace(y = ~trace1,
            name = "Colombia",
            type = "scatter",
            mode = "lines+markers") %>% 
  add_trace(y = ~trace2,
            name = "Chile",
            type = "scatter",
            mode = "lines+markers") %>%
  add_trace(y = ~trace3,
            name = "Mexico",
            type = "scatter",
            mode = "lines+markers") %>%
  add_trace(y = ~trace4,
            name = "Peru",
            type = "scatter",
            mode = "lines+markers") %>%
  add_trace(y = ~trace5,
            name = "Mundo",
            type = "scatter",
            mode = "lines+markers") %>%
  add_trace(y = ~trace6,
            name = "LATAM",
            type = "scatter",
            mode = "lines+markers") %>%
  layout(title = "Ingreso per cápita LATAM",
         xaxis = list(title = "Year",
                      zeroline = FALSE),
         yaxis = list(title = "Ingreso Per cápita",
                      zeroline = FALSE))
p1

1.3 Conclusion del uso de la libreria Wbstats

Este codigo nos ayuda a extraer datos del banco mundial sobre muchos paises ya que ellos cuentan con muchisimas bases de datos. En este codigo se puede observar como el GDP de Mexico ha cambiado durante los años en una grafica y como el GDP de diferentes paises ha cambiado en una misma grafica.

1.4 inventario de las API del Banco mundial(wbstats)

Paquete

Descripción

uso

wbstats

Es un paquete de R para buscar y descargar datos del API del Banco Mundial.

 

Library(wbstats)

wb

El valor predeterminado para el parámetro de país es un valor especial de que, como es de esperar, devuelve datos sobre el indicador seleccionado para el país.

 

wb(

country = "all",

indicator,

startdate,

enddate,

mrv,

return_wide = FALSE,

gapfill,

freq,

cache,

lang = c("en", "es", "fr", "ar", "zh"),

removeNA = TRUE,

POSIXct = FALSE,

include_dec = FALSE,

include_unit = FALSE,

include_obsStatus = FALSE,

include_lastUpdated = FALSE

)

 

wbcache

Descarga una lista actualizada de información sobre países, indicadores, fuentes, catálogo de datos, temas de indicadores, tipos de préstamos y niveles de ingresos del Banco Mundial

wbcache(lang = c("en", "es", "fr", "ar", "zh"))

wbcountries

Descarga información actualizada sobre países de la API del Banco Mundial

wb_countries(lang = c("en", "es", "fr", "ar", "zh"))

wbsearch

Permite encontrar indicadores que coincidan con un término de búsqueda.

wbsearch(pattern = "insert_topic", fields = c("indicator", "indicatorDesc"), extra = FALSE, cache

wb_data

Esta función descarga la información solicitada usando la API del Banco Mundial

 

wb_data(

indicator,

country = "countries_only",

start_date,

end_date,

return_wide = TRUE,

mrv,

mrnev,

cache,

freq,

gapfill = FALSE,

date_as_class_date = FALSE,

lang

)

 

wbdatacatalog

Descarga una lista actualizada del catálogo de datos del Banco Mundial

wb_datacatalog()

wbdatacatalog

Descarga una lista actualizada del catálogo de datos del Banco Mundial

wb_datacatalog()

wbincome

Descarga información actualizada sobre los tipos de ingresos de la API del Banco Mundial

wbincome(lang = c("en", "es", "fr", "ar", "zh"))

wb_indicators

Descarga información actualizada sobre indicadores de la API del Banco Mundial

wb_indicators(lang, include_archive = FALSE)

wblending

Descarga información actualizada sobre los tipos de préstamos disponibles de la API del Banco Mundial

wblending(lang = "es")

wbsources

Descargue información actualizada sobre las fuentes de datos de la API del Banco Mundial

wbsources(lang = c("en", "es", "fr", "ar", "zh"))

wbtopics

Descargue información actualizada sobre el tema del indicador de la API del Banco Mundial

Topics<-wbtopics(lang = c("en", "es", "fr", "ar", "zh"))

wb_cachelist

Este marco de datos contiene información relevante sobre cada país o región. Estos datos se denominan wb_cachelist y proporcionan una instantánea información de los países disponibles, los indicadores y otra información relevante. wb_cachelist es por defecto la fuente desde la cual wbsearch() y wb() usan para encontrar información coincidente.

wb_cachelist

 

 

2. Utilizando librerya IMFR

Utilizando IMFR para acceso a los datos disponibles mediante api al Fondo Monetario Internacional

###2.1 cargando libreria y accediendo a la informacion

library(imfr)

real_ex <- imf_data(database_id = 'IFS', indicator = 'EREER_IX',
                    country = c('CN', 'GB'), freq = 'A',
                    start = 2013, end = current_year())
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |======================================================================| 100%

segundo ejemplo

imf_databases<-imf_ids()
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |===================================                                   |  49%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |======================================================================| 100%
head(imf_databases,10)
##      database_id
## 1    BOP_2017M06
## 2     BOP_2020M3
## 3    BOP_2017M11
## 4     DOT_2020Q1
## 5     GFSMAB2016
## 6    BOP_2019M12
## 7  GFSYFALCS2014
## 8       GFSE2016
## 9       FM201510
## 10    GFSIBS2016
##                                                                                                                           description
## 1                                                                                                 Balance of Payments (BOP), 2017 M06
## 2                                                                                                 Balance of Payments (BOP), 2020 M03
## 3                                                                                                 Balance of Payments (BOP), 2017 M11
## 4                                                                                       Direction of Trade Statistics (DOTS), 2020 Q1
## 5                                                    Government Finance Statistics Yearbook (GFSY 2016), Main Aggregates and Balances
## 6                                                                                                 Balance of Payments (BOP), 2019 M12
## 7                          Government Finance Statistics Yearbook (GFSY 2014), Financial Assets and Liabilities by Counterpart Sector
## 8                                                                         Government Finance Statistics Yearbook (GFSY 2016), Expense
## 9                                                                                                    Fiscal Monitor (FM) October 2015
## 10 Government Finance Statistics Yearbook (GFSY 2016), Integrated Balance Sheet (Stock Positions and Flows in Assets and Liabilities)

2.2 Inventario de la libreria del Fondo Monetario Internacional(imfr)

Paquete

Descripción:

Uso

Argumento

all_iso2c

 

Data frame de 253 códigos de país de dos letras ISO

Uso:

all_iso2c

 

Current_year

 

Regresar al año actual

Uso:

año corriente ()

 

imf_codelist

Recuperar la lista de códigos (codelist) de una base de datos individual del Fondo Monetario Internacional.

Uso:

imf_codelist (database_id, return_raw = FALSO, veces = 3)

 Valor:

Si return_raw = FALSE, se devuelve un data frame con los ID y las descripciones de la lista de códigos. Si return_raw = TRUE, entonces se devuelve la lista de estructuras de datos sin procesar.

 

database_id : cadena de caracteres de un database_id de imf_ids.

 

return_raw: lógico. Si devolver la lista de estructura de datos sin procesar o un data frame con lista de códigos, códigos y descripciones.

 

Times: Número máximo de solicitudes para intentar

imf_codes

 

Recuperar códigos de bases de datos individuales

Uso:

imf_codes (codelist, return_raw = FALSE, times = 3)

 Valor:

Si return_raw = FALSE, se devuelve un data frame con los códigos y las descripciones. Si return_raw = VERDADERO luego se devuelve la lista de códigos sin procesar.

 

Argumentos:

Codelist: cadena de caracteres de una lista de códigos de imf_codelist.

 

Return_raw: lógico. Si devolver la lista de códigos sin formato o un marco de datos con variable códigos y descripciones.

Times: numérico. Número máximo de solicitudes para intentar.

 

imf_data

 

Se utiliza para descargar un dato del FMI.

Uso:

imf_data (database_id, indicator, country = "all", start = 2000, end = current_year (), freq = "A", return_raw = FALSE, print_url = FALSE, times = 3)

 Valor:

Si return_raw = FALSE, se devuelve un data frame con solo la serie de datos solicitada. Si return_raw = TRUE, entonces se devuelve la lista de datos sin procesar. Esto puede incluir información adicional sobre la serie.

 

Argumentos:

Database_id: ID de base de datos de cadena de caracteres. Se puede encontrar usando imf_ids.

 

Indicator: cadena de caracteres o vector de caracteres de ID de indicador. Estos se pueden encontrar usando códigos_imf.

 

Country: cadena de caracteres o vector de caracteres de códigos de paísde dos letras ISO que identifican los países

Si país = 'todos' entoncesimf_data intentará descargar todos los países disponibles.

 

Start: año para el que le gustaría comenzar a recopilar los datos.

 

End: año para el que le gustaría terminar de recopilar los datos.

 

Freq: cadena de caracteres que indica la frecuencia de la serie. Con 'A' para anual, 'Q' para trimestral y 'M' para mensual.

 

Return_raw: lógico. Si devolver los datos como una lista sin procesar.

 

Print_url: lógico. Si imprimir la URL utilizada en la llamada a la API. Puede ser útil para depuración.

 

Times: numérico. Número máximo de solicitudes para intentar.

 

imf_ids

 

Lista de ID de la base de datos imf.

 

Uso:

imf_ids (return_raw = FALSE, times = 3)

 Valor:

Si return_raw = FALSE, se devuelve un data frame con los ID y las descripciones de la base de datos. Si return_raw = TRUE, luego se devuelve la lista de flujo de datos sin procesar.

 

Argumentos:

Return_raw : lógico. Si devolver la lista de flujo de datos sin procesar o un marco de datos con base de datos identificaciones y nombres.

 

Times: Número máximo de solicitudes para intentar.

 

imf_metadata

 

Acceda a metadatos para series de países

Uso:

imf_metadata (database_id, indicator, country = "all", start = 2000, end = current_year (), return_raw = FALSE)

 

Argumentos:

database_id: cadena de caracteres de ID.

 

Indicator: cadena de caracteres del indicador del ID del indicador. Estos se pueden encontrar usando imf_codes.

Country: cadena de caracteres de país o vector de caracteres de códigos de país de dos letras ISO que identifican los países para los que desea descargar los metadatos del indicador. si country = 'all', se descargarán todos los países disponibles.

 

Start: año para el que le gustaría comenzar a recopilar los datos.

 

End: año para el que le gustaría terminar de recopilar los datos.

 

Return_raw: lógico. Si devolver los metadatos sin procesar en un marco de datos con solo lo solicitado metadatos de datos.

 

 

imf_metastructure

 

Recupere la estructura de metadatos de una base de datos del FMI individual.

Uso:

imf_metastructure (database_id, return_raw = FALSE)

 Valor:

Si return_raw = FALSE, se devuelve un data frame con los ID y las descripciones de la lista de códigos. Si return_raw = TRUE, entonces se devuelve la lista de estructuras de datos sin procesar.

 

Argumentos:

database_id : cadena de caracteres de un database_id de imf_ids.

 

return_raw : lógico. Si devolver la lista de estructura de metadatos sin procesar o un data frame con códigos de listas de códigos y descripciones

 

3. Utilizando la libreria Comtradr

Utilizando Comtradr para acceso a los datos disponibles mediante api al Naciones Unidad

Ejemplo I

Cargando la libreria

library(comtradr)

3.1 Planteamiento del ejemplo 1

Supongamos que queremos analizar la evolución de las exportaciones argelinas (valores monetarios de bienes y servicios) en relación con el mercado de Europa occidental que representa un mercado importante. Para ello, utilizaremos la función ct_search.

export_DZ <- ct_search(reporters = "Algeria", 
  partners = c("France", "Spain", "Italy", "Germany"), 
  trade_direction = "exports")
# nota: a API limita nuestra solicitud a 5 socios.

3.1.1 Seleccionando Informacion Relevante para el ejemplo

library(tidyverse)

export_DZ <- as.tibble(export_DZ)
## Warning: `as.tibble()` was deprecated in tibble 2.0.0.
## ℹ Please use `as_tibble()` instead.
## ℹ The signature and semantics have changed, see `?as_tibble`.
export_DZ <- export_DZ %>% select(year, partner, trade_value_usd)

head(export_DZ)
## # A tibble: 6 × 3
##    year partner trade_value_usd
##   <int> <chr>             <dbl>
## 1  2017 France       4431261656
## 2  2017 Germany        14045034
## 3  2017 Italy        5629479666
## 4  2017 Spain        4103370763
## 5  2012 France       6124176488
## 6  2012 Germany       238172929

3.1.2 Representaciòn Grafica

options(scipen = 999) 

ggplot(export_DZ, aes(x = year, y= ((trade_value_usd)/1000))) +  
  facet_grid( ~ as.factor(partner))+                                     
  geom_line(size = 2, color = "lightgreen") + 
  ylab("trade value in 1000$")+
  xlab("years")+
  scale_x_continuous(breaks = c(seq(1992, 2015, by = 2), 2017))+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

3.2.1 Ejemplo 2: El Salvador: Comercio salvadoreño y diversificación de mercados socios

Cargando librerias

library(dplyr)
library(tidyr)
library(stringr)
library(base)
library(kableExtra)
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 3 > 1' in coercion to 'logical(1)'
library(flextable)
library(ggplot2)
library(treemap)
library(RColorBrewer)
library(comtradr)
library(officer)

3.2.2 Importación de datos

Los datos utilizados provienen de la base de datos mundial de comercio de mercancías UN COMTRADE. Una limitante en el acceso a los datos, es que sin una licencia, no es posible descargar datos a nivel de partida o subpartida. Por ello el análisis se realiza a nivel de capítulo arancelario del Sistema Armonizado.

#Exportaciones salvadoreñas
El_Salvador_export_HS2 <- ct_search(reporters = "El Salvador", 
                                    type = "goods", 
                                    commod_codes = "AG2", 
                                    freq = "annual",
                                    partners = "All", 
                                    trade_direction = "exports", 
                                    start_date = '2020', 
                                    end_date = '2021') 

#Importaciones salvadoreñas
El_Salvador_import_HS2 <- ct_search(reporters = "El Salvador", 
                                    type = "goods", 
                                    commod_codes = "AG2", 
                                    freq = "annual",
                                    partners = "All", 
                                    trade_direction = "imports", start_date = '2020', 
                                    end_date = '2021') 

#Balanza comercial salvadoreñas
El_Salvador_balanza_HS2 <- rbind(El_Salvador_import_HS2, 
                                 El_Salvador_export_HS2)

3.2.3 Principales socios

En el presente gráfico se muestran los principales socios salvadoreños para las exportaciones e importaciones durante 2021.

El_Salvador_balanza_HS2  %>% 
  filter(partner != "World", year=="2021") %>%  
  group_by(trade_flow, partner)%>% 
  summarise(Valor=sum(trade_value_usd)) %>% 
  treemap(index = c("trade_flow","partner"),
vSize = "Valor", vColor = "partner", 
range = c(0,50),
             fontsize.labels=c(20, 10),
             title = "El Salvador. Socios comerciales en 2021",
             mirror.x = T,
             palette = brewer.pal(n=5,"Paired"),
             border.col = "grey")
## `summarise()` has grouped output by 'trade_flow'. You can override using the
## `.groups` argument.

### 3.2.4 Principales productos comerciados

De igual forma, en la siguiente gráfica se muestran los capítulos del Sistema Armonizado y el comercio salvadoreño.

El_Salvador_balanza_HS2  %>% filter(partner == "World" & year=="2021") %>% 
  transform(commodity=str_sub(commodity, 1L, 30L)) %>% 
  group_by(trade_flow, commodity)%>%
 summarise(Valor=sum(trade_value_usd)) %>%
treemap(index = c("trade_flow",  "commodity"),
vSize = "Valor", vColor = "commodity",
range = c(0,50),
             fontsize.labels=c(20, 10),
             title = "El Salvador. Productos comerciados en el año 2021",
             mirror.x = T,
             palette = brewer.pal(n=3,"Paired"),
             border.col = "grey")
## `summarise()` has grouped output by 'trade_flow'. You can override using the
## `.groups` argument.

### 3.2.5 Principales exportaciones:

Top_Exportaciones<-El_Salvador_export_HS2 %>% 
  filter(year=="2021" &  partner=="World") %>% 
  transform(trade_value_usd=round(trade_value_usd/1000000),1) %>%  
  arrange(desc(trade_value_usd)) %>% slice_max(trade_value_usd, n=5) %>% 
  select(commodity_code, commodity, trade_value_usd) %>% 
  transform(commodity=str_sub(commodity, 1L, 30L)) %>%   
  kable(caption = "Principales capítulos arancelarios exportados por El Salvador al año 2021", 
        align = 'c',  
        digits = round(1), 
        col.names = c("Capítulo", "Descripción", "Valor en millones de US$")) %>% 
  kable_classic() %>% kable_styling(font_size=14,
full_width = TRUE)%>%

 kable_paper(full_width = F, "striped") %>%
  column_spec(2, width = "30em", background = "#bdc9e1", bold = T,  color = "Grid") %>%
add_footnote(c("Fuente= Elaboración propia con datos de UN COMTRADE"), notation = "none")

Top_Exportaciones
Principales capítulos arancelarios exportados por El Salvador al año 2021
Capítulo Descripción Valor en millones de US$
61 Apparel and clothing accessori 1962
39 Plastics and articles thereof 519
48 Paper and paperboard; articles 386
85 Electrical machinery and equip 369
17 Sugars and sugar confectionery 316
Fuente= Elaboración propia con datos de UN COMTRADE

3.2.6 Diversificación de los destinos

La diversificación de la oferta exportable se analizó utilizando el indice Herfindahl

3.2.7 Indice Herfindahl aplicado a los flujos globales de comercio salvadoreño

Estimación del Índice Herfindahl

IHH<- El_Salvador_balanza_HS2 %>%  
  filter( partner!="World") %>%  
  transform(year=as.factor(year)) %>%
  group_by(trade_flow, year, partner) %>% 
  summarise(Valor=sum(trade_value_usd)) %>% 
  mutate(S2= (round(Valor / sum(Valor),5))^2) %>% group_by(year, trade_flow) %>% 
  summarise(IH=sum(S2))
## `summarise()` has grouped output by 'trade_flow', 'year'. You can override
## using the `.groups` argument.
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
head(IHH)
## # A tibble: 4 × 3
## # Groups:   year [2]
##   year  trade_flow    IH
##   <fct> <chr>      <dbl>
## 1 2020  Export     0.219
## 2 2020  Import     0.119
## 3 2021  Export     0.225
## 4 2021  Import     0.128

3.2.8 Representación gráfica 2020-2021

indice de Herfindahl ## 3.2.9 Índice Herfindahl aplicado a las partidas arancelarias en el comercio salvadoreño

IHH_HS2<- El_Salvador_balanza_HS2 %>%  
  filter( partner!="World") %>%  
  transform(commodity=str_sub(commodity, 1L, 30L), 
            year=as.factor(year)) %>%
  group_by(trade_flow, year,commodity, partner) %>% 
  summarise(Valor=sum(trade_value_usd),
            Volumen=sum(netweight_kg)) %>% 
  mutate(S2= (round(Valor / sum(Valor),5))^2) %>% 
  group_by(trade_flow, year, commodity) %>% 
  summarise(IH=sum(S2), Socios= n())
## `summarise()` has grouped output by 'trade_flow', 'year', 'commodity'. You can
## override using the `.groups` argument.
## `summarise()` has grouped output by 'trade_flow', 'year'. You can override
## using the `.groups` argument.
IHH_HS2
## # A tibble: 384 × 5
## # Groups:   trade_flow, year [4]
##    trade_flow year  commodity                           IH Socios
##    <chr>      <fct> <chr>                            <dbl>  <int>
##  1 Export     2020  "Aircraft, spacecraft and parts" 0.958      3
##  2 Export     2020  "Albuminoidal substances; modif" 0.225     14
##  3 Export     2020  "Aluminium and articles thereof" 0.105     39
##  4 Export     2020  "Animal or vegetable fats and o" 0.462      8
##  5 Export     2020  "Animal originated products; no" 0.643      3
##  6 Export     2020  "Animals; live"                  0.453     17
##  7 Export     2020  "Apparel and clothing accessori" 0.742     62
##  8 Export     2020  "Arms and ammunition; parts and" 0.612      8
##  9 Export     2020  "Articles of leather; saddlery " 0.400     31
## 10 Export     2020  "Beverages, spirits and vinegar" 0.186     22
## # … with 374 more rows

3.2.10 Partidas arancelarias con menor valor del IH, y cambios entre 2020-2021

Top_IH<-IHH_HS2%>% 
  pivot_wider(names_from = year, values_from = c(IH, Socios)) %>% 
  mutate(`Variación de IH`= IH_2021-IH_2020, 
         `Variación del número de socios`= Socios_2021- Socios_2020 ) %>% 
  arrange(desc(`Variación del número de socios`)) 

Top_IH_HS4  <- Top_IH %>% group_by(trade_flow) %>% 
  slice_max(order_by = `Variación del número de socios`, n=5)

Top_IH_HS4%>% select(-trade_flow)  %>% 
  kable(title="Top 5. Capítulos arancelarios con mejora en el número de socios", 
        align = 'c',  digits = round(2), 
        col.names = c("trade_flow", 
                      "Capítulo arancelario", 
                      "IH 2021", 
                      "IH 2020", 
                      "Número de mercados 2021", 
                      "Número de mercados 2020", 
                      "Variación del IH 2020-2021", 
                      "Variación del número de socios 2020-2021")) %>% 
  kable_classic() %>% 
  kable_styling(font_size=14,full_width = TRUE) %>% 
  pack_rows(
  index = c("Exportaciones" = 5, 
            "Importaciones" = 5)) %>%
add_footnote(c("Fuente= Elaboración con datos de UN COMTRADE"), notation = "none")
## Adding missing grouping variables: `trade_flow`
trade_flow Capítulo arancelario IH 2021 IH 2020 Número de mercados 2021 Número de mercados 2020 Variación del IH 2020-2021 Variación del número de socios 2020-2021
Exportaciones
Export Railway, tramway locomotives, 0.93 0.21 3 16 -0.71 13
Export Nuclear reactors, boilers, mac 0.16 0.17 43 53 0.01 10
Export Soap, organic surface-active a 0.19 0.16 19 27 -0.03 8
Export Paper and paperboard; articles 0.20 0.20 45 51 0.00 6
Export Tools, implements, cutlery, sp 0.15 0.15 37 43 0.00 6
Importaciones
Import Glass and glassware 0.14 0.19 61 79 0.05 18
Import Vehicles; other than railway o 0.12 0.12 88 102 0.00 14
Import Iron or steel articles 0.14 0.15 84 95 0.01 11
Import Fruit and nuts, edible; peel o 0.16 0.15 28 37 -0.01 9
Import Tools, implements, cutlery, sp 0.21 0.22 69 78 0.01 9
Fuente= Elaboración con datos de UN COMTRADE

###3.3 inventario de la API de Las Naciones Unidas(comtradr)

Definición

Uso

Detalles

 Devuelve el "tipo" de la base de datos de mercancías actual que está utilizando en comtradr. Para una lista completa de los diferentes tipos de bases de datos de mercancías, consulte "detalles". 

ct_commodity_db_type()

 

Valor:

Vector de caracteres del "tipo" de la base de datos de mercancías actual.

 

 A continuación, se presentan algunos ejemplos de los tipos de bases de las mercancías:

• HS: Harmonized System (HS), as reported

• HS1992: HS 1992

• HS1996: HS 1996

• HS2002: HS 2002

HS2007: HS 2007

HS2012: HS 2012

 

La API de Comtrade requiere que las búsquedas de productos básicos se realicen utilizando códigos de productos básicos. Esta es una función auxiliar para consultar la base de datos de productos Comtrade. Toma como entrada un vector de mercancías o códigos de mercancías. La salida es una lista o vector de descripciones o códigos de mercancías asociado con la entrada search_terms.

 

 Uso:

ct_commodity_lookup(

search_terms,

return_code = FALSE,

return_char = FALSE,

verbose = TRUE,

ignore.case = TRUE,

)

 

Valor:

Una lista o vector de caracteres de descripciones de mercancías y/o códigos de mercancías que coinciden con los elementos de "search_terms".

 

 Esta función utiliza expresiones regulares (regex) para encontrar coincidencias dentro de la base de datos de productos básicos.

 Argumentos:

 +search_terms: Nombres de productos básicos o códigos de productos básicos, como un carácter o vector numérico.

 + return_code: Logical, si se establece en FALSO, la función devolverá un conjunto de descripciones de mercancías junto con los códigos de productos básicos (como una sola cadena para cada coincidencia encontrada), si se establece en TRUE devolverá solo los códigos de productos básicos. El valor predeterminado es FALSO

 + return_char: Logical, si se establece en FALSO, la función devolverá las coincidencias como una lista con nombre, si se ha establecido en TRUE, los devolverá como un vector de caracteres. El valor predeterminado es FALSO.

 + verbose: Logical, si se establece en VERDADERO, se imprimirá un mensaje de advertencia en la consola si alguno de los elementos de entrada "search_terms" no arrojaron coincidencias (el mensaje indicará qué elementos no arrojaron datos). El valor predeterminado es VERDADERO.

 

 

Los nombres de países pasados ​​a la API de Comtrade deben tener una ortografía/mayúsculas precisas. Esto es una función de ayuda para consultar los nombres de países/la ortografía utilizada por Comtrade. Toma como entrada un vector de nombres de países, la salida es cualquier nombre de país que contenga cualquiera de las cadenas de entrada, utilizando expresiones regulares a través de la función base grepl.

 

 

Uso:

ct_country_lookup(

search_terms,

type = c("reporter", "partner"),

ignore.case = TRUE,

)

 

Valor:

Un vector de caracteres de nombres de países que son coincidencias completas o parciales con cualquiera de los datos de entrada nombres de países.

 

 

Esta función utiliza expresiones regulares (regex) para encontrar coincidencias dentro de la base de datos del país. Esto significa que tratará como una coincidencia cualquier cadena de país que contenga el término de búsqueda de entrada.

 Argumentos:

 + search_terms: vector de nombres de países.

 + type: es la lista de países que se usará para la búsqueda, las entradas válidas son "reportero" y "socio".

 + ignore.case: logical, para ser pasado al argumento ignore.case dentro de grepl. El valor predeterminado es CIERTO.

 

 Se puede obtener el número restante de consultas que quedan en la hora actual.

 

 Uso:

ct_get_remaining_hourly_queries()

Valor:

Valor numérico, número de consultas actuales que quedan en la hora.

 

-

 Se puede obtener la hora en la que se restablecerá el límite horario.

 

 Uso:

ct_get_reset_time(set = NULL)

 

Valor:

Fecha y hora en que se restablecerá el límite de consultas por hora. El retorno es un objeto "POSIXct"

 

 Argumentos:

 

+ set: logical, si es VERDADERO y el tiempo de reinicio actual es NULL, se configura el tiempo de reinicio para que sea una hora desde el Systime actual.

 

 Vector con nombre de encabezados de columna pulidos, diseñado para usarse con gráficos, tablas de publicación, etc.

 Uso:

data(ct_pretty_cols)

 Vector con nombre, con los encabezados de columna pulidos como nombres y la columna legible por máquina encabezados como los valores. Cada elemento debe tratarse como un par clave-valor. La función ct_search devuelve datos con los encabezados de columna legibles por máquina de forma predeterminada.

 

 Función para configurar un token de API para la API Comtrade de la ONU. Los detalles sobre tokens y límites de tasa pueden ser encontrados en el siguiente link: 

 Uso:

ct_register_token(token)

 

Valor:

Estableceel token API comtradr y actualiza los límites de tasa.

 

 Argumentos:

 

+ token: cadena de caracteres, token de API válido.

 

 Se pueden realizar consultas a la API Comtrade de la ONU, los datos se devuelven como un marco de datos ordenado. Comtrade es una base de datos organizada por las Naciones Unidas que alberga datos de envío a nivel de país.

 

 Uso:

ct_search(

reporters,

partners,

trade_direction = c("all", "imports", "exports", "re_imports", "re_exports"),

freq = c("annual", "monthly"),

start_date = "all",

end_date = "all",

commod_codes = "TOTAL",

max_rec = NULL,

type = c("goods", "services"),

url = "https://comtrade.un.org/api/get?"

)

 

 

Valor:

Marco de datos de los datos de envío de Comtrade.

 Argumentos:

 + reporters: País(es) de interés, como vector de caracteres. Puede ser un vector de nombres de países o "All" para representar a todos los países.

 + partners: País(es) que han interactuado con el(los) país(es) informante(s), como un vector de caracteres. Puede ser un vector de nombres de países o "All" para representar a todos los países.

 + trade_direction: Indicación de las direcciones comerciales en las que centrarse, como un vector de caracteres. Debe ser "All" o un vector que contenga cualquier combinación de lo siguiente: "imports", "exports", "re_imports", "re_exports".

 + freq: Frecuencia de tiempo de los resultados devueltos, como una cadena de caracteres. Debe ser "annual" o "monthly".

 + start_date: Fecha de inicio de un período de tiempo, o "All".

 + end_date: Fecha de finalización de un período de tiempo, o "All".

 + commod_codes: Vector de caracteres de códigos de mercancías, o "TOTAL". Los códigos de productos básicos válidos como entrada restringirán la consulta para buscar solo el comercio relacionado con esos productos básicos.

 + max_rec: Número máximo de registros devueltos por cada llamada a la API, como un número entero.

 + type: Tipo de comercio, como una cadena de caracteres. Debe ser "goods" o "services". El valor predeterminado es "goods".

 + url: Base de la cadena de URL de Comtrade, como una cadena de caracteres. ¿El valor predeterminado es “https://comtrade.un.org/api/get?" y no debe cambiarse a menos que Comtrade cambie su URL de punto final.

 

 El uso de la API de Comtrade requiere acceso a la base de datos de países y productos básicos de Comtrade. El paquete comtradr mantiene cada base de datos guardada como un marco de datos en el directorio del paquete, como Comtrade actualiza estas bases de datos con poca frecuencia (aproximadamente una vez al año).

 

 Uso:
ct_update_databases(

force = FALSE,

verbose = TRUE,

commodity_type = c("HS", "HS1992", "HS1996", "HS2002", "HS2007", "HS2012", "HS2017",

"SITC", "SITCrev1", "SITCrev2", "SITCrev3", "SITCrev4", "BEC", "EB02"),

commodity_url = NULL,

reporter_url = NULL,

partner_url = NULL

)

 

Valor:

Base de datos actualizada de commodities y países.

 

 Argumentos:

 + force: lógico, si es VERDADERO, se descargarán las bases de datos de países y productos básicos, independientemente del estado de la base de datos en el archivo. El valor predeterminado es FALSO.

 + verbose: lógico, si es VERDADERO, se imprimirá un mensaje de estado de actualización en la consola. Por defecto el valor es VERDADERO.

 + commodity_type: Esquema de clasificación de datos comerciales a utilizar, consulte "detalles" para obtener una lista de las entradas válidas. El valor predeterminado es "HS", que es el "tipo" predeterminado de la base de datos de productos en archivo al instalar comtradr.

 + commodity_url: Valor predeterminado NULL. Solo es necesario si el sitio de Comtrade cambia de https://comtrade.un.org/data/cache/.

 + reporter_url: Valor predeterminado NULL; de lo contrario, debería ser una URL como una cadena de caracteres que apunte al conjunto de datos JSON de las áreas del reportero en el sitio web de Comtrade. solo necesario si el sitio de Comtrade cambia de https://comtrade.un.org/data/cache/reporterAreas.json

 + partner_url: Valor predeterminado NULL; de lo contrario, debería ser una URL como una cadena de caracteres que apunte al conjunto de datos JSON de las áreas del reportero en el sitio web de Comtrade. solo necesario si el sitio de Comtrade cambia de https://comtrade.un.org/data/cache/áreassocio.json

 Transformar los encabezados de columna de los datos de retorno de la función ct_search en un conjunto más "pulido" de encabezados de columna. Diseñado para usarse con diagramas, tablas de publicación, etc.

 

 Uso:

ct_use_pretty_cols(df)

 

Valor:

Dataframe, entrada df con encabezados de columna pulidos.

 

 Argumentos:

 + df: Dataframe, marco de datos API de Comtrade, devuelto desde la función ct_search.

 

 

4. Utilizando libreria Quantmod

Utilizando (quantmod) para acceso a los datos disponibles mediante api a Yahoo Finance

Ejemplo # 1

4.1 Preparacion de Datos

Aquí, cargamos todos los paquetes necesarios, importamos datos para el índice Wilshire 5000 de FRED, eliminamos los valores faltantes y limitamos nuestras observaciones al período entre 1980 y 2020. Luego trazamos los datos como un objeto de serie de tiempo interactivo usando el paquete dygraphs .

library(quantmod); library(ggplot2); library(dygraphs); options(scipen = 999)

wilsh <- getSymbols("WILL5000IND", src = "FRED", auto.assign = FALSE)
wilsh <- na.omit(wilsh)
wilsh <- wilsh["1980-01-02/2020-06-01"]

colnames(wilsh) <- "Index Value"
tail(wilsh)
##            Index Value
## 2020-05-22      140.71
## 2020-05-26      142.63
## 2020-05-27      144.90
## 2020-05-28      144.35
## 2020-05-29      145.04
## 2020-06-01      145.81

4.1.1 Representacion Grafica

dygraph(wilsh, main = "Wilshire 5000 Performance") %>%
  dyAxis("y")

4.1.2 Calculo de los rendimientos del ejemplo propuesto

El fragmento de código a continuación calcula los rendimientos logarítmicos y discretos diarios de nuestros datos de Wilshire 5000 e imprime las observaciones más recientes de cada uno. Para las observaciones diarias, los dos retornos son casi idénticos. Para períodos de tiempo más largos, la diferencia es mayor. De cara al futuro, es preferible utilizar rendimientos logarítmicos debido a la forma más simétrica de la distribución.

log_ret <- diff(log(wilsh))[-1]
disc_ret <- exp(log_ret) - 1

colnames(log_ret) <- "TR"
colnames(disc_ret) <- "TR"

tail(log_ret)
##                      TR
## 2020-05-22  0.003060610
## 2020-05-26  0.013552830
## 2020-05-27  0.015789985
## 2020-05-28 -0.003802943
## 2020-05-29  0.004768660
## 2020-06-01  0.005294838
tail(disc_ret)
##                      TR
## 2020-05-22  0.003065298
## 2020-05-26  0.013645086
## 2020-05-27  0.015915305
## 2020-05-28 -0.003795721
## 2020-05-29  0.004780048
## 2020-06-01  0.005308880

4.1.3 Visualizacion de los retornos

Visualizando el retornos de registro diarios de Wilshire 5000

mu.d <- mean(log_ret)
median.d <- median(log_ret)
sigma.d <- sd(log_ret)

cat(" Mean:", round(mu.d, 6), "\n",
    "Median:", round(median.d, 6), "\n",
    "Standard Deviation:", round(sigma.d, 6))
##  Mean: 0.000428 
##  Median: 0.00065 
##  Standard Deviation: 0.011063

4.1.4 Calculo de devoluciones y grafico de rendimientosç

Aplicando funciones integradas para calcular las devoluciones semanales, mensuales, trimestrales y anuales. Siempre podemos convertir fácilmente entre retornos logarítmicos y discretos. Lo hacemos a continuación y graficamos rendimientos discretos anuales usando otra serie de tiempo interactiva.

log_ret.w <- apply.weekly(log_ret, FUN = sum)
log_ret.m <- apply.monthly(log_ret, FUN = sum)
log_ret.q <- apply.quarterly(log_ret, FUN = sum)
log_ret.y <- apply.yearly(log_ret, FUN = sum)

disc_ret.y <- exp(log_ret.y) - 1 # Convert yearly log returns to yearly discrete returns (conventionally reported)

dygraph(disc_ret.y, main = "Wilshire 5000 Index") %>%
  dyAxis("y", label = "Yearly Discrete Return")

4.1.5 Medicion de la volatilidad

Medición de la volatilidad: valor en riesgo y déficit esperado

Supongamos que tiene una cartera que refleja la Wilshire 5000: posee una colección bien diversificada de acciones estadounidenses. ¿Cómo evaluaría el riesgo de esa cartera? Una forma de cuantificar el riesgo es observando la desviación estándar, que le indica cuánto varían los rendimientos durante un período de tiempo determinado. Ya hemos calculado la desviación estándar de las devoluciones de registros diarios. Ahora podemos hacerlo para horizontes de tiempo más largos:

sigma.w <- sd(log_ret.w)
sigma.m <- sd(log_ret.m)
sigma.q <- sd(log_ret.q)
sigma.y <- sd(log_ret.y)

cat(" Weekly Standard Deviation:", round(sigma.w, 6), "\n", 
    "Monthly Standard Deviation:", round(sigma.m, 6), "\n", 
    "Quarterly Standard Deviation:", round(sigma.q, 6), "\n",
    "Yearly Standard Deviation:", round(sigma.y, 6))
##  Weekly Standard Deviation: 0.023257 
##  Monthly Standard Deviation: 0.045091 
##  Quarterly Standard Deviation: 0.08521 
##  Yearly Standard Deviation: 0.163029

4.1.6 Valoraciones del modelo

la desviación estándar de los rendimientos aumenta a medida que aumenta el horizonte temporal. Esto significa que, aunque los rendimientos logarítmicos del Wilshire 5000 no son muy volátiles en períodos cortos de tiempo (días, semanas), varían bastante en el transcurso de un mes o más.

Si bien ahora tenemos una idea de cuán volátil es nuestra cartera en diferentes horizontes de tiempo, esto no nos dice cuánto de su cartera podría perder en un día, mes, año, etc. Para medir eso, podemos incorporar dos conceptos en nuestro análisis: valor en riesgo (VaR) y déficit esperado (ES).

El valor en riesgo es la cantidad que una cartera puede perder para una probabilidad dada (1 - α) durante un período de tiempo específico. Nuestra probabilidad, α, suele establecerse en 0,05 o 0,01, correspondientes a niveles de confianza del 95 % o el 99 %, respectivamente. El VaR esencialmente nos dice: ¿Cuál es el peor rendimiento que experimentará nuestra cartera el 95% (o el 99%) del tiempo? Visualmente, el VaR con un nivel de confianza del 95 % para nuestros datos se ve así:

log_ret_plot <- ggplot(data = log_ret, aes(x = log_ret$TR)) +
  geom_density(color = "darkblue", fill = "lightblue", size = 1.2) +
  ggtitle("Daily Log Returns of the Wilshire 5000") +
  geom_vline(xintercept = quantile(x = as.vector(log_ret), probs = 0.05), color = "red", size = 1.2, linetype = "longdash") +
  xlab("Total Return") +
  theme_minimal()
log_ret_plot
## Don't know how to automatically pick scale for object of type xts/zoo. Defaulting to continuous.

Nos preocupa la cola izquierda de la distribución: rendimientos extremadamente negativos. Si estamos encontrando el VaR en un nivel de confianza del 95 %, estamos encontrando el rendimiento en el cuantil del 5 % de la distribución, lo que significa que el 95 % de los rendimientos observados caen a la derecha de ese valor. Por el contrario, también significa que el 5% de los rendimientos observados son peores que ese rendimiento. El déficit esperado, también conocido como valor en riesgo condicional (CVAR), es una idea relacionada. Expected Shortfall es el promedio de todos los retornos a la izquierda del VaR. En este caso, ES es el promedio del peor 5% de retornos. Muchos consideran que ES es superior al VaR porque tiene en cuenta los peores resultados posibles. Hay muchas formas sofisticadas de calcular VaR y ES usando R, pero la forma más simple es usar la distribución empírica de la siguiente manera:

VaR <- quantile(x = as.vector(log_ret), probs = 0.05) # 95% confianza
ES <- mean(log_ret[log_ret < VaR])

cat(" 95% Confidence:", "\n", "VaR:", round(VaR, 6), "\n", "ES:", round(ES, 6))
##  95% Confidence: 
##  VaR: -0.016405 
##  ES: -0.026512

¿Qué nos dicen nuestros resultados anteriores? Nuestro VaR de -0,016, o -1,6 %, indica que el 95 % de las rentabilidades logarítmicas diarias de Wilshire 5000 están a la derecha de (mejor que) esa rentabilidad, mientras que el 5 % son aún más negativas. Según nuestra distribución empírica, tenemos una confianza del 95 % en que nuestra cartera no experimentará una rentabilidad logarítmica inferior al -1,6 % en un día de negociación determinado. Nuestro ES de -0,0265, o -2,65 %, es el promedio del peor 5 % de resultados en nuestras distribuciones empíricas. Esto nos da una idea del “riesgo de cola” de nuestra cartera.

Imagine que invertimos $10,000 en esta cartera. Puede usar el VaR y el ES que calculamos para encontrar el cambio diario en los activos de la cartera con un 95 % de confianza. Esto requiere que usemos rendimientos discretos.

4.2 Ejemplo 2 utilizando Quantmon

Ejemplo # 2

Cargando la data

#install.packages('quantmod')
require(quantmod)
getSymbols("BAC")
## [1] "BAC"
head(BAC)
##            BAC.Open BAC.High BAC.Low BAC.Close BAC.Volume BAC.Adjusted
## 2007-01-03    53.40    54.18   52.99     53.33   16028200     39.43131
## 2007-01-04    53.33    53.89   53.05     53.67   13175000     39.68270
## 2007-01-05    53.59    53.59   53.03     53.24   10205000     39.36476
## 2007-01-08    53.46    53.64   52.80     53.45    9685900     39.52004
## 2007-01-09    53.60    53.71   52.97     53.50   12546500     39.55699
## 2007-01-10    53.26    53.70   53.16     53.58   10083900     39.61615
tail(BAC)
##            BAC.Open BAC.High BAC.Low BAC.Close BAC.Volume BAC.Adjusted
## 2022-10-12    29.64    30.31   29.48     29.86   36137900        29.86
## 2022-10-13    29.41    31.77   29.31     31.69   67671000        31.69
## 2022-10-14    31.81    32.63   31.57     31.70   58108500        31.70
## 2022-10-17    33.36    33.87   32.87     33.62   88896800        33.62
## 2022-10-18    34.98    35.36   34.28     34.88   81937900        34.88
## 2022-10-19    34.58    34.83   33.77     33.92   43118100        33.92
head(Ad(BAC))
##            BAC.Adjusted
## 2007-01-03     39.43131
## 2007-01-04     39.68270
## 2007-01-05     39.36476
## 2007-01-08     39.52004
## 2007-01-09     39.55699
## 2007-01-10     39.61615

4.2.1 Representacion grafica

Hay una serie de funciones de trazado integradas.

require(quantmod)
plot(Cl(BAC), col = 'black')

barChart(BAC)

# 4.3 Ejemplo 3 utilizando la libreria Quantmond

Desarrollo Ejemplo #3 obteniendo datos de Ford Motor Company

4.3.1 Cargando los datos

require(TTR)
require(quantmod)
getSymbols("GOOG")
## [1] "GOOG"

4.3.2 Representacion grafica

barChart(GOOG)

candleChart(GOOG,multi.col=TRUE,theme='white', subset = 'last 4 months')

chartSeries(GOOG)

4.3.3 Otra forma de representarlos graficamente

Graficando de Otra manera

getSymbols('CPIAUCNS',src='FRED')
## [1] "CPIAUCNS"
plot(CPIAUCNS)

plot(diff(log(CPIAUCNS), lag=12), main="CPI Inflation")

getSymbols('DEXJPUS',src="FRED")
## [1] "DEXJPUS"
 plot(DEXJPUS, col = 'black', main = "USD-JPY")

###4.4 Inventario para las API de Yahoo finance(quantmod)

Función

Librería

Descripción

Carga y administra datos

getSymbols

Funciones para cargar y administrar Símbolos en un entorno específico. Usado por specifycModel para recuperar los símbolos especificados en el primer paso del procedimiento de modelado.

Crear gráficos

chartSeries

Herramienta de gráficos para crear gráficos financieros estándar dada una serie de tiempo como objeto. Sirve como función base para futuras adiciones de análisis técnico. Los posibles estilos de gráficos incluyen velas, coincidencias, barras y líneas.

Cambiar el nivel de zoom del gráfico

zoomChart

Esta función se llama por su efecto secundario, cambiar la perspectiva del gráfico actual y cambiar su nivel de subconjunto formal. Los datos subyacentes adjuntos al gráfico no se modifican.

Calcular la variación porcentual

Delt

Calcula la diferencia porcentual del período k dentro de una serie. Se utiliza principalmente para calcular el cambio porcentual de un período a otro de una serie dada, o para calcular la diferencia porcentual entre dos series sobre la serie completa.

Prueba si el objeto es de tipo quantmod

is.quantmod

Prueba si el objeto es de tipo quantmod o quantmodResults.

Administra listas de argumentos de TA

setTA

Se utiliza para administrar los argumentos TA utilizados dentro de las llamadas de chartSeries.

Crear un tema de gráfico

chartTheme

Crea un objeto chart.theme para usar dentro de chartSeries para administrar los colores de gráfico deseados.

Crear objeto de datos para un modelo

buildData

Crea un objeto de datos a partir de múltiples fuentes, aplicando transformaciones a través del mecanismo de fórmula R estándar.

 

/

Bibliografia

Mulesorf (2022): ¿Qué es una API? (Interfaz de programación de aplicaciones), recuperado de: https://www.mulesoft.com/es/resources/api/what-is-an-api

Red Hat (2017): ¿Qué es una API?, Recuperado de: https://www.redhat.com/es/topics/api/what-are-application-programming-interfaces

Yúbal, Fernandez (2019): API: ¿Qué es y para que sirven?, Xataka basics. Recuperado de: https://www.xataka.com/basics/api-que-sirve