Curso de R PDF
Curso de R PDF
Curso de R PDF
Gabriel Cabrera G.
2018-09-21
2
Contents
1 Introducción 13
1.1 R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1.1 Un poco de historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1.2 Los primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1 Partes de RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.1 ¿Por qué esto es útil? . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.2 ¿Cómo crear un projecto? . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.1 tidyverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2 Quantmod 21
2.1 ¿Que es quantmod? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Obtención de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1 ¿Qué hizo la función getSymbols? . . . . . . . . . . . . . . . . . . . . 22
2.3 Graficando con chartSeries . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.1 chartSeries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 Graficando con ggplot2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4.1 Breve introducción a ggplot2 . . . . . . . . . . . . . . . . . . . . . . 25
2.4.2 Color, tamaño, forma y otros atributos del aesthetic . . . . . . . . . . 25
2.4.3 S&P 500 con ggplot2 . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Multiples Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.1 Retornos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.2 Retornos Acumulados . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6 Estadística Descriptiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.7 Ratio de Sharpe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8 Test de JarqueBera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.9 Recursos del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3
4 CONTENTS
4 Renta Fija 33
4.1 Precio de un Bono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Dos formas de hacer lo mismo . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 Relación precio del Bono y Yield . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4.1 Valorización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4.2 Construcción yields . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.4.3 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.4.4 Graficando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5 Trabajando con yields reales . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6 Duración y Convexidad de un Bono . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.1 Extración de la yield . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.2 Duración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.3 Duración con librería . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.4 Convexidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.5 Convexidad con librería: . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.7 Efecto Dolar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.8 Ejercicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.9 Recursos del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5
6 LIST OF TABLES
List of Figures
1.1 logo de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 R desde la terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Rstudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7
8 LIST OF FIGURES
Prefacio
9
10 LIST OF FIGURES
Aún no hay mucho que decir, pero te invito a visitar mi página web donde la mayoría del
tiempo estoy publicando post sobre programación y/o data science con aplicaciones a las
finanzas y al mundo real.
Me agradan las citas. . .
“It is a capital mistake to theorize before one has data. Insensibly one begins to
twist facts to suit theories, instead of theories to suit facts.”
Sir Arthur Conan Doyle
11
12 LIST OF FIGURES
Chapter 1
Introducción
1.1 R
1.1.1 Un poco de historia
R es un lenguaje de programación creado por Ross Ihaka y Robert Gentleman del departa-
mento de estadística de la universidad de Auckland en 1992 (Nueva Zelanda), teniendo su
versión estable el 29 de Febrero del 2000.
1
Integrated Development Environment
2
Estas librerías las iremos cargando/utilizando a medida que avancemos en los capítulos
3
Existe otra distribución de R por parte del area de open source de Microsoft , la ventaja de MRAN es que
si bien funciona con CRAN, su objetivo va más orientado a computación en paralelo (paralleling computing)
13
14 CHAPTER 1. INTRODUCCIÓN
1.2 RStudio
¿Qué es una IDE? IDE es el acrónimo de Integrated Development Environment (Entorno
de Desarrollo Integrado). Esto quiere decir que RStudio es una aplicación que nos entrega
herramientas para hacer más fácil el desarrollo de proyectos usando R y sobre todo cuando
estemos trabajando con datos.
Para descargar e instalar Rstudio debes ir a http//www.rstudio.com/download y seleccionar
RStudio Desktop Open Source License (gratuita) , cuando exista una actualización Rstudio
te avisará.
Si quedó todo bien instalado, cuando abras Rstudio deberías ver algo así:
5. Viewer es el panel para ver contenido web generado por algún paquete de R (gráficos
para la web o aplicaciones interactivas). Por el momento no lo utilizaremos.
El panel de arriba a la derecha, por su parte, contiene el historial de funciones que hemos
ejecutado (History), la opción para generar conexiones a bases de datos externas (Connec-
tions) y el Environment. Este último panel es muy importante y entender lo que nos muestra
es fundamental para comprender cómo funciona R.
1.3 Scripts
El script podemos decir que es un cuarto panel4 , en donde escribiras tus códigos que queremos
que ejecute R, para crear un script debes:
1. ir a file > New File > R Script
2. Otra forma es un atajo de teclado, control + shift + n (Linux/Windows) y comando
+ shift + n (Mac OS).
3. O bien ir a la barra superior de la ventana y seleccionar el tipo de archivo a trabajar.
1.4 Proyectos
Una de las ventajas de RStudio es que permite crear “proyectos”. Un projecto es un espacio
o contexto de trabajo asociado a una carpeta en particular, en la que se guardan nuestro(s)
script(s), archivos de datos, etc. Cuando creamos un proyecto en RStudio, se crea un tipo
especial de archivo (.Rproj) que lo que hace es vincular todo lo que se encuentra dentro de
esa carpeta.
3. La siguiente pregunta es qué tipo de proyecto queremos crear. En esta ocasión, ele-
giremos la primera: New Project.
4. Finalmente, le damos un nombre al proyecto y decidimos en qué parte de nuestro
computador queremos que viva la carpeta que lo contiene.
5. Luego de apretar Create Project, RStudio se reinicia y se producen algunos cambios.
El panel Files (abajo a la derecha) ahora nos muestra la carpeta de nuestro proyecto
y el único archivo que hay en ella por ahora. Ese es el archivo mágico que mantiene
unido todo lo que hay dentro de la carpeta. Cuando queramos volver a trabajar en
nuestro proyecto, solo tenemos que abrir ese archivo.
IMPORTANTE: RStudio ejecuta sesiones independientes de R para cada
proyecto. Es decir, si tuvieras otro proyecto abierto te aparecería otro ícono, con
su respectivo nombre. Esto nos permite trabajar en dos proyectos en paralelo
sin que se nos mezclen los objetos del entorno, el código, los archivos, etc. Cada
cosa en su lugar.
1.5 Packages
Cuando instalamos R por primera vez en nuestro computador, lo que estamos instalando es lo
que se conoce como “R Base”, es decir, los elementos centrales del lenguaje de programación.
Una de las ventajas de R es que se trata de un lenguaje extensible: la propia comunidad
de usuarios puede desarrollar nuevas posibilidades para utilizarlo. La manera de compartir
estos nuevos desarrollos es a través de “paquetes”, que incluyen, entre otras cosas, código
y datos. Una analogía que se suele utilizar para explicar esto es que R Base es un teléfono
celular tal como viene de fábrica y los paquetes las apps que descargamos para que tenga
más funcionalidades.
Para usar las librerias (“packages”) debemos usar el siguiente código:
# instala el package
install.packages("acá va el package")
# lo llama
library("acá va el package")
1.5.1 tidyverse
tidyverse es un “megapaquete” que incluye otros paquetes en su interior. Todos los paquetes
que conforman “el Tidyverse” comparten la misma visión sobre el trabajo con datos y la
escritura de código. Viene a formar parte de la nueva forma de programar en R, cuyo
enfoque es netamente en realizar Data Science. Algunas librerias relevantes son:
1. ggplot2: Esta librería te permite realizar graficos avanzados.
2. dplyr: Su objetivo es la manipulación de datos (filtrar, seleccionar, generar, renom-
brar,etc).
3. magrittr: Contiene la denominada pipe ( %>% ), se explicará más adelante
4. purrr: Para realizar iteraciones.
5. readr: Para cargar datos en csv, lo importante que los transforma en tibble.
Para instalarlo basta escribir:
18 CHAPTER 1. INTRODUCCIÓN
# instala el package
install.packages("tidyverse")
# lo llama
library("tidyverse")
Si te vas a la pestaña de Packages verás que estan seleccionadas aquellas librerias que se
encuentran en el tidyverse.
1.6 Ejemplo
En este ejemplo vamos a trabajar con gapminder, un paquete que contiene una parte de los
datos de Gapminder, una base de datos que incluye información mundial sobre población,
expectativa de vida, PIB per cápita y otros. Su autor, Hans Rosling, ha hecho varias charlas
TED que vale la pena mirar.
Instalamos la librería
# instala el package
install.packages("gapminder")
mean.lifeExp
Lo visualizamos
1.6. EJEMPLO 19
70
Expectativa de vida
60
50
40
1950 1960 1970 1980 1990 2000
Años
Finalmente lo guardamos.
ggsave("Grafico.png")
20 CHAPTER 1. INTRODUCCIÓN
Chapter 2
Quantmod
IMPORTATE: Aún no está del todo listo el formato en pdf, por lo que recomiendo
verlo online.
El paquete quantmod para R esta diseñado para la asistencia quantitativa de los traders en
el desarrollo de sus estrategias y modelos financieros.
Una vez que esté instalado, creamos nuestro script usando ctrl/cmd + shift + n y lo
“llamamos” con
# Cargamos "quantmod"
library("quantmod")
21
22 CHAPTER 2. QUANTMOD
2
No solo funcióna con getSymbols, si no que con todas las funciones de distintas librerias, basta con ante
poner ? y luego el nombre la función
3
Por el momento solo trabajaremos con estas opciones, exiten más.
2.3. GRAFICANDO CON CHARTSERIES 23
2.3.1 chartSeries
Para graficar basta con escribir el nombre del objeto con clase (class) xts, en nuestro caso
es GSPC que representa al Standard and Poor 500. Si escribimos TA = NULL, charSeries no
mostrará el volume4
chartSeries(GSPC, TA=NULL)
GSPC [2010-01-04/2010-07-29]
1200
1150
1100
1050
chartSeries(GSPC, TA=NULL)
Pero cuando las series son muy largas, podemos ver tendencias pero dificulta ver cambios
importantes a nivel de análisis técnico.
chartSeries(GSPC, subset = "last 3 months")
Con el código anterior nos enfocamos solo en los tres meses anteriores.
GSPC [2010-01-04/2010-07-29]
1200
1150
1100
1050
GSPC [2010-05-03/2010-07-29]
Last 1101.530029 1200
1150
1100
1050
10000
9000 Volume (millions):
8000 4.612e+09
7000
6000
5000
4000
A continuación usaremos la base que viene pre cargada con R cuando lo instalamos, que es
cars5
ggplot(mpg, aes(x = displ, y = hwy)) + geom_point()
40
30
hwy
20
2 3 4 5 6 7
displ
35
30
class
2seater
25 compact
midsize
cty
minivan
20
pickup
subcompact
suv
15
10
2 3 4 5 6 7
displ
• Como se puede ver, se creo una guía con los valores, leyenda, así podemos “leer” el
gráfico.
• Si se quiere aesthetic para valores fijos, sin scaling:
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = "blue"))
Ejercicios:
aes(displ, hwy, colour = class)
aes(displ, hwy, shape = drv)
aes(displ, hwy, size = cyl)
40
30
colour
hwy
blue
20
2 3 4 5 6 7
displ
40
30
hwy
20
2 3 4 5 6 7
displ
S&P 500
Desde Enero 2010 a 2018
1200
1150
1100
1050
0 50 100 150
Fecha
descargamos los datos con las características requeridas, que son las mismas que usamos
anteriormente con S&P 500
getSymbols(tickers, src = "yahoo", from = "2010-01-01", to = "2018-07-30", periodicity = "daily")
## [1] "ORCL" "AMD" "IBM" "NVDA"
Acá deben tener mucha atención:
list <- lapply(tickers, function(x) Cl(get(x)))
precio.cierre <- do.call(merge,list)
2.5.1 Retornos
La formula para calcular (log) retornos es
Pt
rt = log(1 + Rt ) = log( ) = pt − pt−1
Pt−1
donde pt = log(Pt ) es llamado “log price”.
Ahora pasamos a construir el retorno.
retornos <- data.frame(apply(precio.cierre, 2, function(x) Delt(x, type = "log")),
fecha = index(precio.cierre)) %>%
rename(orcl = ORCL.Close, amd = AMD.Close, ibm = IBM.Close, nvda = NVDA.Close) %>%
na.omit()
2.6. ESTADÍSTICA DESCRIPTIVA 29
library("reshape2")
Retornos Acumulados
Oracle, AMD, IBM y Nvidia
2
Retornos Acumulados
-1
-2
2010 2012 2014 2016 2018
Fecha
E(Ri ) − rf
SR =
σi
Donde E(Ri ) = µi es el retorno del portafolio i, rf la tasa libre de riesgo y σi la desviaciòn
estandar del portafolio i. Si asumimos como ejercicio que no diversificamos y “construimos”
cuatro portafolios con el 100% es invertido en cada uno de los activos.
Para realizar el cálculo del ratio de Sharpe (SR) para Oracle
SR_orcl <- (mean(retornos$orcl) - 0.0000 )/sd(retornos$orcl)
c 2 /6 + (KU
JB = nSk [r − 3)2 /24
El test se encuentra en varias librerías, una de ellas es fBasics que deberíamos tener insta-
lada y cargada. Para obtener los resultados del test para Oracle
jarqueberaTest(retornos$orcl)
Para los demàs activos hay que solo cambiar por el nombre de la columna correspondiente.
IMPORTANTE: Aún no está del todo listo el formato en pdf, por lo que re-
comiendo verlo online.
Funciones Descripciones
getPortfolio Crea un portafolio (objeto)
globalMin.portfolio Computa el portafolio de mímina varianza
efficient.portfolio Computa el portafolio de mímina varianza sujeto a un retorno
tangency.portfolio Computa el portafolio tangente
efficient.frontier Computa la frontera eficiente
31
32 CHAPTER 3. INTRODUCCIÓN A TEORÍA DE PORTAFOLIO
Como ya está cargado readxl cargamos el archivo stocks.xlsx, que ya posee los retornos1 .
# acá están los retornos ya calculados, para replicarlos vean el apunte
stocks <- read_xlsx("datasets/stocks.xlsx")
Rc xc
El vector de retornos esperados es:
Ra E[Ra ] µa
E[R] = E Rb = E[Rb ] = µb = µ
Rc E[Rc ] µc
La matriz 3x3 de varianza y covarianza de los retornos es:
2
σa σab σac
var[R] =
σ
ab σb2 σbc
=Σ
2
σac σbc σc
0
Notar que la matriz de covarianza es simétrica (Σ = Σ ).
Para construir las matrices anteriores en R:
# Promedio
mean <- apply(stocks[2:4], 2 , function(x) mean(x))
# Desviación Estandar
sd <- apply(stocks[2:4], 2 , function(x) sd(x))
# Covarianza
cov <- cov(stocks[2:4])
1
si quieren replicarlo vean los videos
Chapter 4
Renta Fija
IMPORTANTE: Aún no está del todo listo el formato en pdf, por lo que re-
comiendo verlo online.
if(!require("pacman")) install.packages("pacman")
p_load("tidyverse", "quantmod")
tanto tc, r y pago se encontraran en Values del global environment, en tipo numeric. c es
una función generica para crear vectores, rep hace una repetición de tc*100/2 49 veces y el
numero 50, es igual al principal más tc*100/2. Recordar que como es semi-anual se divide
por 2 el valor nominal de 100.
33
34 CHAPTER 4. RENTA FIJA
3. Para poder trabajar con nuestra base de datos, transformamos nuestro vector pago
que está en forma numeric a data frame.
pago <- as.data.frame(pago)
Ahora existe un objeto con una estructura de datos data frame en nuestro global environ-
ment. Nuestro nuevo objeto pago se podría haber llamado de cualquier forma.
pago1
## Precio Bono
## 1 95.27
El precio del bono es 95.2663.
2. La otra forma es:
# replicamos el objeto
pago2 <- pago
4.3 Funciones
Dominar por completo las funciones en R lleva practica y dedicación, no obstante, la dificul-
tad que utilizaremos en este capítulo es baja y es un buen ejemplo practico para comenzar.
Toda función en R, tiene tres partes.
1. El body(), el código dentro de la función.
2. El formals(), la lista de argumentos que controlan como puedes llamar la función.
3. El environment(), el “mapa” de la locación de las variables de la función.
4.4. RELACIÓN PRECIO DEL BONO Y YIELD 35
f(4)
## [1] 16
En el ejemplo anterior el formals() de f:
formals(f)
## $x
el body() de f:
body(f)
## {
## x^2
## }
y el environment() de f:
environment(f)
## <environment: R_GlobalEnv>
Ya visto una breve introducción a funciones en R, procedemos a construir una función que
nos permitirá valorizar cualquier bono que pague cupones iguales:
# p: valor nominal; tc: tasa cupón; t: madurez; y: yield to maturity
precio.bono <- function(p,tc,t,y){
pago <- c(rep(tc*p, t - 1),p*(1 + tc))
pago <- as.data.frame(pago)
pago$t <- as.numeric(rownames(pago))
pago$factor_desc <- 1 / (1 + y)^(pago$t)
pago$valor_prese <- pago$factor_desc*pago$pago
sum(pago$valor_prese)
}
precio.bono(100,0.065/2,50,0.069/2)
## [1] 95.27
Usando el mismo ejemplo de la sección anterior, obtenermos un precio igual a 95.2663.
La función seq generá una secuencia. En este caso parte del 0.02 hasta el 0.4 pero con
intervalos de 0.01.
# Convertimos yields a data frame como antes
yields <- as.data.frame(yields)
4.4.3 Loops
# Calaculamos el precio del bono para distintas yields
for (i in 1:nrow(yields)) {
yields$precio[i] <- precio.bono(100, 0.10, 20, yields$yields[i])
}
4.4.4 Graficando
Una manera de visualizar datos es usar ggplot2, se recomienda que añadan por parte lo que
desean en su gráfico.
# Graficamos con ggplot2
g1 <- ggplot(data = yields,aes(x = yields*100, y = precio)) + geom_line(size = 1.5, color = "red")
g1 <- g1 + geom_point(size = 3, color = "red")
g1 <- g1 + ggtitle("Relación inversa:", subtitle = "Precio del Bono vs Yield")
g1 <- g1 + xlab("Yield (%)") + ylab("Precio del bono")
g1 <- g1 + geom_ribbon(aes(ymin = 0, ymax = pmax(precio,0)), fill="pink", col="red", alpha=0.5)
g1 <- g1 + theme_bw()
g1 <- g1 + theme(panel.border = element_rect(colour = "black", fill = NA, size = .5),
panel.grid.major = element_line(colour = "#d3d3d3"))
g1
# Guarmados gráfico
ggsave("retorno-yield.png",width = 8.5, height = 4.5, dpi = 300)
Relación inversa:
Precio del Bono vs Yield
200
150
Precio del bono
100
50
10 20 30 40
Yield (%)
Con la función subset extramos una parte de los datos, especificamente desde 2000-01-01
hasta 2018-04-17. Luego graficamos usando la función chartSeries de quantmod. Tener
cuidado con la función, dado que solo funciona con extensión xts.
# Grafico con chartSeries de quantmod solo funciona con xts
chartSeries(t10yr, theme = "white")
t10yr [2000-01-03/2018-04-17]
7
Last 2.82
Figure 4.2: yield del tesoro de los Estados Unidos con chartSeries
# Guarmados gráfico
ggsave("treasury-yields.png",width = 8.5, height = 4.5, dpi = 300)
4.5. TRABAJANDO CON YIELDS REALES 39
5
Fecha
Figure 4.3: yield del tesoro de los Estados Unidos con ggplot2
40 CHAPTER 4. RENTA FIJA
4.6.2 Duración
Existen dos Duraciones, la de Macaulay y modificada (o de Hicks), las que miden sensibilidad
del precio ante cambios de la yield. Dos bonos con la misma duración tendrá el mismo cambio
en precio estimado.
Macaulay:
" #
1+y 1 + y + [n · (c − y)]
Duracion de Macaulay = −
y [c · ((1 + y)n − 1)] + y
Modificada:
M V− − M V+
Aprox.Dur.M od. =
2 · ∆y · M V0
# duración modificada
modificada <- macaulay/(1+t10yr_yield)
modificada
## [1] 8.603
# Con librerias
p_load("derivmkts")
# Duración moficada
duration(precio, 3, 10, 100, 1, modified = TRUE)
## [1] 8.603
# Duración Macaulay
duration(precio, 3, 10, 100, 1, modified = FALSE)
## [1] 8.817
Si escribimos modified = TRUE, la función duration computa la duración modificada, por
otro lado, si modified = FALSE obtenemos la duración de Macaulay. Losa valores son los
mismo obtenidos sin librería.
4.6.4 Convexidad
La convexidad es la segunda derivada de la curva de rendimiento y es màs precisa que la
duración cuando el cambio de la yield es màs “grande”. Esto es porque la duración es la línea
tangente en el punto calculado de la curva de rendimientos, el problema es que a medida que
nos alejamos por la curva de rendimientos la distancia entre la curva y esa línea calculada
se vuelve cada vez más grande.
T
" #
1 CFt
(t2 + t)
X
Convexidad =
P × (1 + y) t=1 (1 + y)t
2
42 CHAPTER 4. RENTA FIJA
Donde:
• P : Precio Bono.
• y : yield to maturity.
• T : Madurez en años.
• CFt : Cash flow en el tiempo t.
# Calculamos medida de convexidad
convexidad <- (precio.arriba + precio.abajo - 2 * precio)/(precio * (0.01)^2)
convexidad
## [1] 88.45
Donde:
Donde:
• D : Duración.
• ∆y : Cambio en la yield.
• P : Precio Bono.
Donde:
• C : Convexidad.
• (∆y)2 : Cambio en la yield al cuadrado.
• P : Precio Bono.
4.8. EJERCICIO 43
4.8 Ejercicio
4.9 Recursos del capítulo
44 CHAPTER 4. RENTA FIJA
Chapter 5
IMPORTANTE: Aún no está del todo listo el formato en pdf, por lo que re-
comiendo verlo online.
45