Cálculo de rentabilidades con R: Rentabilidad aritmética Vs Rentabilidad logarítmica

Índice de Contenidos

[latexpage]

Parar cualquier inversionista es muy importante diferenciar y saber calcular la rentabilidad o rendimiento de una inversión u activo financiero, por lo tanto, en esta entrada comentaré sobre los rendimientos de activos financieros y como no podía ser de otra forma, realizaré los cálculos con el lenguaje de programación R (R Language).

Además, en muchas de las entradas anteriores aplico rentabilidad logarítmica sin explicar el por qué, y aquí quiero profundizar un poco sobre ello.

Vamos a analizar la acción de Netflix, Inc. (NFLX) y descargaré los precios desde Yahoo Finance con la librería quantmod:

library(quantmod)

getSymbols("NFLX", from="2015-01-01", to="2019-07-31")
## [1] "NFLX"
head(NFLX)
##            NFLX.Open NFLX.High NFLX.Low NFLX.Close NFLX.Volume
## 2015-01-02  49.15143  50.33143 48.73143   49.84857    13475000
## 2015-01-05  49.25857  49.25857 47.14714   47.31143    18165000
## 2015-01-06  47.34714  47.64000 45.66143   46.50143    16037700
## 2015-01-07  47.34714  47.42143 46.27143   46.74286     9849700
## 2015-01-08  47.12000  47.83571 46.47857   47.78000     9601900
## 2015-01-09  47.63143  48.02000 46.89857   47.04143     9578100
##            NFLX.Adjusted
## 2015-01-02      49.84857
## 2015-01-05      47.31143
## 2015-01-06      46.50143
## 2015-01-07      46.74286
## 2015-01-08      47.78000
## 2015-01-09      47.04143
tail(NFLX)
##            NFLX.Open NFLX.High NFLX.Low NFLX.Close NFLX.Volume
## 2019-07-23    311.44    313.50   306.00     307.30     9171100
## 2019-07-24    310.51    319.99   307.25     317.94    11961800
## 2019-07-25    318.86    327.69   316.30     326.46    10798500
## 2019-07-26    328.79    336.00   327.50     335.78    10847500
## 2019-07-29    335.98    336.40   328.77     332.70     5782800
## 2019-07-30    329.20    329.65   323.23     325.93     6029300
##            NFLX.Adjusted
## 2019-07-23        307.30
## 2019-07-24        317.94
## 2019-07-25        326.46
## 2019-07-26        335.78
## 2019-07-29        332.70
## 2019-07-30        325.93

Selecciono los precios de cierre ajustados:

NFLX <- NFLX[,"NFLX.Adjusted"]

Grafico los precios utilizando la librería PerformanceAnalytics:

library(PerformanceAnalytics)

chart.TimeSeries(NFLX, col="darkgreen", 
                 legend.loc = "bottomright", 
                 main="Evolucion de la acción de Netflix, Inc. (NFLX)")

plot of chunk unnamed-chunk-167

Rentabilidad aritmética o simple

Si denotamos $latex P_t&s=2$ al precio de un activo al final del período $latex t&s=2$, el rendimiento simple viene dado por la siguiente expresión:

$latex R_t=\frac{P_{t} – P_{t – 1}}{P_{t – 1}}&s=2$

Los datos descargados tiene formato de serie temporal, por lo tanto, primero creo un vector con ellos, extrayendo sólo los datos y los índices de las fechas con la función coredata:

NFLX_vector <- coredata(NFLX)

Ahoro aplico la formula:

n <- nrow(NFLX_vector)
NFLX_rend_simple_1 <- (NFLX_vector[2:n, 1] - NFLX_vector[1:(n - 1), 1]) / NFLX_vector[1:(n - 1), 1]
head(NFLX_rend_simple_1)
## [1] -0.050897025 -0.017120620  0.005191927  0.022188202 -0.015457744
## [6] -0.031765320

Estos cálculos también se pueden hacer con la función Return.calculate():

NFLX_rend_simple_2 = Return.calculate(NFLX)
head(NFLX_rend_simple_2)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.050897025
## 2015-01-06  -0.017120620
## 2015-01-07   0.005191927
## 2015-01-08   0.022188202
## 2015-01-09  -0.015457744

Rentabilidad logarítmica o rendimientos compuestos continuos

Los rendimientos compuestos en tiempo continuo tienen una relación aditiva entre los períodos, por lo que muchas veces, resulta más útil el calculo de éstos que de los rendimientos simples, donde la relación entre los períodos es multiplicativa.

Con las rentabilidades simples, la rentabilidad anual de una inversión es la media geométrica de los rendimientos mensuales.

En este sentido, se debe tener en cuenta que el producto de variables normalmente distribuidas no es una variable normal, por el contrario, la suma de las variables normales no correlacionadas si es normal.

Por lo anterior, es mejor utilizar la suma de rentabilidades que la multiplicación y con la rentabilidad logarítmica sí se puede sumar la rentabilidad de los diferentes periodos para obtener la rentabilidad total, además se disminuye la complejidad algorítmica, ya que se podría aplicar el teorema central del límite.

La relación aditiva entre los períodos viene denotada por la siguiente expresión:

$latex r_t=ln(1+R_t)&s=2$

Donde $latex R_t&s=2$ es el rendimiento simple y $latex r_t&s=2$ es rendimiento compuesto en tiempo continuo en el momento $latex t&s=2$.

Por consiguiente, $latex r_t&s=2$ se puede calcular de la siguiente manera:

$latex r_t=ln(\frac{P_t}{P_{t – 1}})&s=2$

$latex ln(\frac{P_{t}}{P_{t -1}}) = ln(P_{t}) – ln(P_{t -1})&s=2$

Por otro lado,  la rentabilidad logarítmica es ampliamente usada en finanzas cuantitativas ya que permite calcular probabilidades que se basan en una distribución normal, teniendo en cuenta que estos rendimientos no pueden ser inferior a -1.

En R, estos se pueden calcular fácilmente: uso la función log() para calcular los logaritmos naturales a los precios y aplico diferencias con la función diff() para así obtener los retornos compuestos en tiempo continuo.

NFLX_rend_cc_1 <- diff(log(NFLX))
head(NFLX_rend_cc_1)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.052237977
## 2015-01-06  -0.017268873
## 2015-01-07   0.005178495
## 2015-01-08   0.021945626
## 2015-01-09  -0.015578461

Y con la función Return.calculate():

NFLX_rend_cc_2 = Return.calculate(NFLX, method="log")
head(NFLX_rend_cc_2)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.052237977
## 2015-01-06  -0.017268873
## 2015-01-07   0.005178495
## 2015-01-08   0.021945626
## 2015-01-09  -0.015578461

Por último, grafico los rendimientos:

dataToPlot <- merge(NFLX_rend_simple_2, NFLX_rend_cc_2)
colnames(dataToPlot) = c("Simple", "CC")
plot.zoo(dataToPlot, main="Simple vs Compuesto Continuo", plot.type="single", 
         ylab="Rendimientos", lwd=2, col=c("black", "red"))
abline(h=0)
legend("bottomleft", legend=colnames(dataToPlot),
       lty="solid", lwd=2, col=c("black", "red"))

plot of chunk unnamed-chunk-173

my.panel <- function(...) {
  lines(...)
  abline(h=0)
}
plot.zoo(dataToPlot, main="Simple vs Compuesto Continuo", plot.type="multiple", 
         panel=my.panel, lwd=2, col=c("black", "red"))

plot of chunk unnamed-chunk-173

Facebook
Twitter
LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Picture of Conney Marulanda López
Conney Marulanda López
Analista de Mercado. Certificada en el examen de Asesor Financiero de la CNMV por la Universidad Carlos III de Madrid. Apasionada por los mercados financieros, el emprendimiento y las nuevas tecnologías.
Artículos relacionados
Actualizado octubre 5, 2025

Valor en Riesgo (VaR) con R

Actualizado agosto 7, 2019

Análisis y optimización de portafolios con R (II)

Actualizado agosto 6, 2019

Análisis y optimización de portafolios con R (I)

Suscríbete y accede a contenido exclusivo, análisis semanales y oportunidades reales.
Sin spam. Sin humo. Solo lo que te interesa para que tomes mejores decisiones financieras. Te puedes borrar cuando quieras. Tu privacidad es sagrada.

Responsable: Conney Marulanda López. Finalidad de la recogida y tratamiento de los datos personales: 
Gestionar la solicitud que realizas en este formulario de contacto. 
Legitimación: Consentimiento. 
Destinatarios: Los datos personales serán tratados a través de los servidores de esta web, gestionados por un hosting español: Raiola Networks. No se cederá ni comunicará a ningún tercero tus datos, excepto en los casos legalmente previstos o cuando la prestación de un servicio implique la necesidad de una relación contractual con un Encargado de Tratamiento. 
Derechos: Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en info@finanzaszone.com así como el derecho a presentar una reclamación ante una autoridad de control.
Información adicional: En Política de privacidad de finanzaszone.com, encontrarás información adicional sobre la recopilación y el uso de su información personal, incluida información sobre acceso, conservación, rectificación, eliminación, seguridad, y otros temas.