PORTADA ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________


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.


2. Utilizando librerya IMFR

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


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

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.36477
## 2007-01-08    53.46    53.64   52.80     53.45    9685900     39.52003
## 2007-01-09    53.60    53.71   52.97     53.50   12546500     39.55701
## 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-11    30.37    30.47   29.57     29.77   58124000        29.77
## 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
head(Ad(BAC))
##            BAC.Adjusted
## 2007-01-03     39.43131
## 2007-01-04     39.68270
## 2007-01-05     39.36477
## 2007-01-08     39.52003
## 2007-01-09     39.55701
## 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")

/ ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

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