Para empezar este Workshop utilizaremos una base de datos de Yahoo finance, con el objetivo de explorar el conjunto de datos de series de tiempo.

1.0- Iniciaremos limpiando el entorno de R

# Limpiamos todo el ambiente de trabajo (recomendado en RStudio)
rm(list=ls())
# Esta instrucción evita que el sistema use notación científica en los números: 
options(scipen=999)

1.2- Pocederemos a instalar los paquetes de librerias, los cuales cuentan ya con un codigo por detras y nos facilitan el uso de ecuaciones, formulas, funcioens, datos, etc.

#install.packages("quantmod")
#install.packages("zoo")
library(quantmod)
## Warning: package 'quantmod' was built under R version 4.3.3
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo

1.3 - Descarga de los índices de mercado IPyC y S&P

La función getSymbols() permite al usuario descargar datos financieros en línea y actualizados, como precios de acciones, índices de mercado, precios de ETF, tasas de interés, tipos de cambio, etc. getSymbols() permite descargar estos datos de Yahoo finance , Oanda y FRED. Estas fuentes tienen miles de series de datos económicos y financieros de muchos mercados y otras variables macroeconómicas de todo el mundo.

¿Qué es un índice de mercado?

Un índice de mercado en el ámbito financiero es una cartera virtual compuesta por un grupo de empresas públicas que emiten acciones en ese mercado. Existen diferentes índices de mercado en cada mercado financiero. El índice de mercado más importante de México es el Índice de Precios y Cotizaciones, o IPyC. En el mercado financiero estadounidense, uno de los índices de mercado más importantes es el índice Standard & Poors 500 o S&P500.

El índice IPyC intenta emular un portafolio virtual con las 35 empresas públicas más grandes del mercado mexicano. El peso (%) asignado a cada empresa en la cartera virtual es en realidad el tamaño de mercado de cada empresa. Entonces, cuanto más grande es la firma, mayor es su peso en el portafolio del IPyC.

El índice S&P500 intenta emular una cartera virtual con las 500 empresas públicas más grandes del mercado estadounidense. El peso (%) asignado a cada empresa en la cartera virtual es en realidad el tamaño de mercado de cada empresa. Entonces, cuanto más grande es la empresa, mayor es su peso en la cartera del S&P500.

Ambos índices se rastrean todos los días en sus respectivos mercados financieros, por lo que podemos obtener acceso a sus valores diarios actuales e históricos de diferentes fuentes.

Descargamos el IPyC y el S&P500 mensual de Yahoo Finanzas desde 2011 al 30 de septiembre 2024

getSymbols(Symbols= c("^MXX", "^GSPC"), from="2011-01-01", to="2024-09-30",
           periodicity = "monthly", src = "yahoo")
## [1] "MXX"  "GSPC"

En Yahoo Finance, el identificador único (también llamado ticker) para el IPyC es ^MXX, y el ticker para el S&P500 es ^GSPC (General S&P Composite).

En este caso la función getSymbols crea 2 conjuntos de datos (dataset) con los datos históricos de estos 2 índices. Cada dataset es un objeto xts-zoo R con cotizaciones mensuales históricas en orden cronológico. Estos objetos xts-zoo R son en realidad dataset con los valores de los índices de mercado y con un índice de tiempo.

Cada objeto R tiene una clase específica. En este caso, la clase de estos dataset se llama xts-zoo. xts significa series de tiempo extendibles. Un objeto xts-zoo está diseñado para manipular fácilmente datos de series de tiempo.

Para cada período, Yahoo finance realiza un seguimiento de los precios de apertura, máximo, mínimo, cierre (OHLC) y ajustados. Además, realiza un seguimiento del volumen negociado (n.º de acciones negociadas) en cada período específico. Los precios ajustados se utilizan para acciones, no para índices de mercado. Los precios ajustados consideran pagos de dividendos y divisiones de acciones. Para el caso de índices de mercado, los precios ajustados son siempre iguales a los precios de cierre.

1.4 Fusionar datasets de series temporales

Podemos integrar objetos xts-zoo R en un dataset xts-zoo usando la función de combinación merge. En este caso solo utilizamos el precio ajustado, por lo que también podemos utilizar la función Ad:

# Vamos a unir el datasets en un nuevo objeto R y se llamar prices:
prices = merge(MXX,GSPC)
# We only keep the adjusted price columns:
prices = Ad(prices)
# We rename the columns with simpler names:
names(prices) = c("MXX","GSPC")

Para cada índice hacemos un gráfico para visualizar cómo se mueve el índice a lo largo del tiempo. Podemos usar la función chartSeries del paquete quantmod:

# Para cada índice nosotros haremos una grafica para visualizar el indice del mercado
chartSeries(MXX, theme=("white"))

chartSeries(GSPC, theme=("white"))

3 RETO 1

Responde la siguiente PREGUNTA SOBRE LAS TABLAS ANTERIORES:

¿QUÉ PUEDES DECIR SOBRE LA TENDENCIA DE AMBOS ÍNDICES DE MERCADO? ¿ESTÁ CRECIENDO O DISMINUYENDO CONSTANTEMENTE O NO HAY UNA TENDENCIA CLARA? EXPLICA BREVEMENTE

AL HABLAR DE LA GRÁFICA MXX MUESTRA UNA TENDENCIA DE CRECIMIENTO, DONDE EMPEZO DESDE EL 2011 HASTA JULIO 2019, MOSTRANDO UN CRECIMIENTO ENTRE 3500 A 5000, SEGUIDO DE ESO HUBO UNA BAJA EN EL ÍNDICE DEL MERCADO A INICIOS DE JULIO 2019 , POSTERIORMENTE EN JULIO 2021 SE MANTUVO EN INDICE ENTRE 4500 A 6000 HASTA EL 2023, CON ESO PODEMOS VER QUE ESTIXTE UN CRECIMIENTO A LO LARGO DE LOS 12 AÑOS, A PESAR DE QUE HUBO UNA CAIDA NO MUESTRA UNA BAJA FUERTE, EN SI ESTA TENIENDO UNA TENDENCIA DE CRECIMEINTO, PERO NO TAN MARCADA COMO LA GRÁFICA DE GSPC.

Y SI HABLAMOS DE LA GRÁFICA DE GSPC, EN ESTA SI PODEMOS VER QUE DESDE ENERO 2011 HASTA JULIO 2023, HA TENIDO UN CRECIMIENTO CONSTANTE , YA QUE EN 12 AÑOS HA LOGRADO CRECER DESDE 1000 HASTA 5762, EFECTIUVAMENTE MUESTRA UNA TENDENCIA DE CRECIEMITNO CONSTANTE.

3.1 Repasando el concepto de logaritmo natural

Genera un nuevo dataset con el logaritmo natural (log) de los índices:

lnprices = log(prices)

Ahora haremos un gráfico temporal para el precio del logaritmo natural del MXX:

# Now do a time plot for the natural log price of the MXX:
plot(lnprices$MXX, main = "Log of the Mexican Index over time")

¿Qué es un logaritmo natural?

El logaritmo natural de un número es el exponente de que el número e (=2,71…) necesita elevarse para obtener otro número. Por ejemplo, llamemos x = logaritmo natural del precio de una acción p. Entonces:

ex=p La forma de obtener el valor de x que satisface esta igualdad es en realidad obteniendo el logaritmo natural de p:

x=loge(p)

Luego, debemos recordar que el logaritmo natural es en realidad un exponente y es necesario elevar el número e para obtener un número específico.

El logaritmo natural es el logaritmo de base e (=2,71…). El número e es un número irracional (no se puede expresar como una división de 2 números naturales) y también se le llama constante de Euler. Leonard Euler (1707-1783) tomó la idea del logaritmo del gran matemático Jacob Bernoulli y descubrió características muy sorprendentes del número e. Euler es considerado el matemático más productivo de todos los tiempos. Algunos historiadores creen que Jacob Bernoulli descubrió el número e alrededor de 1690 cuando jugaba con los cálculos para saber cómo crece una cantidad de dinero en el tiempo con un tipo de interés.

¿Cómo se relaciona e con el crecimiento de los montos financieros a lo largo del tiempo?

Aquí hay un ejemplo simple:

Si invierto $100.00 con una tasa de interés anual del 50%, entonces el saldo final de mi inversión al final del primer año (al comienzo del año 2) será:

I2=100∗(1+0.50)1

Si la tasa de interés es del 100%, entonces se obtendría:

I2=100∗(1+1)1=200 Entonces, la fórmula general para obtener el monto final de mi inversión al inicio del año 2, para cualquier tasa de interés R puede ser:

I2=I1∗(1+R)1

El (1+R) es el factor de crecimiento de mi inversión.

En Finanzas, el monto de la inversión se llama principal. Si los intereses se calculan (interés compuesto continuo) cada mes en lugar de cada año, terminaría con una cantidad mayor al final del año.

La capitalización mensual significa que se aplica una tasa de interés mensual al monto para obtener el interés del mes y luego el interés del mes se agrega a la inversión (principal). Luego, para el mes 2 el capital será mayor que la inversión inicial. Al final del mes 2, el interés se calculará utilizando el monto del capital actualizado. En términos matemáticos simples, el saldo final de una inversión al comienzo del año 2 al realizar la capitalización mensual será:

I2=I1∗(1+RN)1∗N

Para la capitalización mensual, N=12, por lo que la tasa de interés mensual es igual a la tasa de interés anual R dividida por N (R/N). Luego, con una tasa anual del 100% y capitalización mensual (N=12):

I2=100∗(1+112)1∗12=100∗(2.613…) En este caso, el factor de crecimiento es (1+112)12 que es igual a 2.613

En lugar de capitalizar cada mes, si la capitalización es en cada momento, entonces estamos aplicando una tasa de capitalización continua.

Si hacemos una capitalización continua para el ejemplo anterior, entonces el factor de crecimiento de un año se convierte en la constante de Euler e:

Hagamos un ejemplo de capitalización de cada segundo (1 año tiene 31,536,000 segundos). La inversión al final del año 1 (o al inicio del año 2) será:

I2=100∗(1+131536000)1∗31536000=100∗(2.718282…)≅100∗e1

¡Ahora vemos que e1 es el FACTOR DE CRECIMIENTO después de 1 año si hacemos la capitalización de los intereses en cada momento!

Podemos generalizar a cualquier otro tipo de interés anual R, de modo que eR sea el factor de crecimiento para un tipo de interés nominal anual R cuando los intereses se capitalizan en cada momento.

Al capitalizar cada instante, utilizamos r pequeño en lugar de R para la tasa de interés. Entonces, el factor de crecimiento será: er

Entonces podemos hacer una relación entre esta tasa de crecimiento y una tasa equivalente efectiva:

(1+EffectiveRate)=er

Si aplicamos el logaritmo natural a ambos lados de la ecuación:

ln(1+EffectiveRate)=ln(er)

Dado que la función logaritmo natural es la inversa de la función exponencial, entonces:

ln(1+EffectiveRate)=r En el ejemplo anterior con una tasa nominal del 100%, al hacer una capitalización continua, entonces la tasa efectiva será:

(1+EffectiveRate)=er=2.7182 EffectiveRate=er−1

Haciendo el cálculo de la tasa efectiva para este ejemplo:

EffectiveRate=er−1=2.7182−1=1.7182=171.82%

Entonces, al capitalizar cada momento, comenzando con una tasa nominal de 100% de tasa de interés anual, ¡la tasa anual efectiva real sería 171.82%!

3.2 Rentabilidad financiera

El rendimiento financiero simple de una acción (Rt) se calcula como un cambio porcentual del precio desde el período anterior (t-1) hasta el período actual (t):

Rt=(Adjpricet−Adjpricet−1)Adjpricet−1=AdjpricetAdjpricet−1−1

Por ejemplo, si el precio ajustado de una acción a finales de enero de 2021 era de $100.00 y su precio ajustado anterior (diciembre de 2020) era de $80.00, entonces el rendimiento simple mensual de la acción en enero de 2021 será:

Rjan2021=Adjpricejan2021Adjpricedoc2020−1=10080−1=0.25

Podemos utilizar rendimientos en decimal o en porcentaje (multiplicando por 100). Seguiremos usando decimales.

En Finanzas, es muy recomendable calcular rendimientos compuestos continuamente (cc returns) y utilizar rendimientos cc en lugar de rendimientos simples para análisis de datos, estadísticas y modelos econométricos. Los retornos de cc también se denominan log returns.

Una forma de calcular los rendimientos cc es restando el logaritmo del precio ajustado actual (en t) menos el logaritmo del precio ajustado anterior (en t-1):

rt=log(Adjpricet)−log(Adjpricet−1)

Esto también se llama diferencia logarítmica del precio.

También podemos calcular los rendimientos cc como el logaritmo del precio ajustado actual (en t) dividido por el precio ajustado anterior (en t-1):

rt=log(AdjpricetAdjpricet−1)

Los rendimientos de cc generalmente se representan con r pequeña, mientras que los rendimientos simples se representan con R mayúscula.

3.3 Cálculo de rendimientos financieros

Se recomienda utilizar siempre precios ajustados para calcular la rentabilidad financiera. En este ejemplo que tenemos índices de mercado, el precio ajustado es exactamente el mismo que el precio de cierre ya que los índices de mercado no tienen divisiones de acciones ni pagos de dividendos.

Podemos usar la función de lag para superar los valores (retrasados) de un conjunto de datos (o columna) de series temporales. Con esta función podemos obtener el precio del periodo anterior para calcular la rentabilidad simple. Creemos un nuevo conjunto de datos para los rendimientos mensuales simples de ambos índices:

R = prices / lag(prices,n=1) - 1 

Creemos una nueva variable para el retorno de cc para ambos índices. Recuerda que los rendimientos compuestos continuamente se pueden calcular como la diferencia entre el logaritmo del precio de hoy menos el logaritmo del precio del periodo anterior:

r = log(prices) - lag(log(prices),n=1)

También podemos usar la función diff, que calcula la primera diferencia de cualquier variable de serie temporal:

r= diff(log(prices))

Obtenemos el mismo resultado usando cualquiera de estos 2 cálculos, pero parece más fácil usar la función diff.

Ahora hagamos un gráfico temporal para los rendimientos cc del índice mexicano:

plot(r$MXX, col = "darkblue",
     main = "cc return for the MXX index")

# 4 RETO 2

DESPUÉS DE REVISAR LA GRAFICA ANTERIOR, RESPONDE BREVEMENTE A LO SIGUIENTE:

¿ESTA SERIE TIENE APROXIMADAMENTE LA MISMA MEDIA PARA TODOS LOS PERIODOS DE TIEMPO?

SI, SI NOS PERCATAMOS LAS LINEAS SE MANTIENEN OSILANDO ENTRE 0.6 A -0.5 A EXCEPCIÓN DE CUANDO LLEGA A TOCAR PUNTOS MUY EXTREMOS TANTO POSITIVOS COMO NEGATIVOS, CON ESTO PODEMOS VER QUE MANTIENEN UNA MEDIA CONTANTE APROXIMANDAMENTE ENTRE 0.00, DE LA MISMA MANERA PODEMOS CONCLUIR QUE ESAS VARIACIONES DRÁSTICAS SE PUEDNE CONTEMPLAR COMO UN OUTLIER, ESTO PARA QUE NO LEGUE A AFECTAR LA MEDIA A LA HORA DE EVALUARLA, DE HECHO ES MEJOR USAR LA MEDIANANA A LA HORA DE REALIZAR ANALISIS ESTADÍSTICOS, YA QUE NO SE VE AFECTADA POR LOS OUTLIERS

¿TIENE LA MISMA DESVIACIÓN ESTÁNDAR (VOLATILIDAD) PARA TODOS LOS PERIODOS DE TIEMPO?

NO, ESTO ES DEBIDO A QUE LOS PICOS SON MUY VARIABLES A LO LARGO DE LOS AÑOS, CONVIRTIENDO LA VOLATILIDAD MUY DIFERENTES, YA QUE EN EL DESDE ENERO 2011 A ENERO 2017, SE MUESTRA UNA DESVIACION ESTANDAR O VOLATILIDAD CONSTANTE, SEGUIDO DE ENERO DEL 2017 A ENERO 2020, SE OBSERVA QUE YA LAS TENDENCIAS MAS FUERTES SON NEGATIVASY POSTERIORMENTE EN ENERO DEL 2020 A JULIO 2024, MUESTRA UNA TENDENCIA POSITIVA, SIENDO ESTOS ULTIMOS AÑOS MUY VOLATIL .

5 Variables no estacionarias: el modelo Random Walk para los precios de las acciones

La hipótesis de la caminata aleatoria (Random Walk) en Finanzas (Fama, 1965) establece que el logaritmo natural de los precios diarios de las acciones se comporta como una caminata aleatoria con deriva. Un paseo aleatorio es una serie (o variable) que no se puede predecir. Imagine que Yt es el precio logarítmico de una acción hoy (t). El valor de Y para mañana (Yt+1) será igual a su valor de hoy (Yt) más un valor constante (φ0) más un shock (error) aleatorio. Este shock es un valor aleatorio puro que sigue una distribución normal con media = 0 y una desviación estándar específica σε. Se supone que el proceso será el mismo para todos los períodos futuros. En términos matemáticos, el modelo de Random Walk es el siguiente:

Yt=φ0+Yt−1+εt El εt es un shock aleatorio para cada día, que sigue una distribución de probabilidad normal con media=0 y con una desviación estándar específica σϵ:

ε∼N(μ=0,σ=σε) El εt o shock aleatorio del día t es el resultado de todas las noticias (externas e internas a la acción) de ese día t. Este shock influye directamente en el % de cambio en el precio de las acciones en el día t.

φ0 se refiere a la deriva de la serie. Si |φ0| > 0 decimos que la serie es un paseo aleatorio con deriva. Si φ0 es positiva, entonces la variable tendrá una tendencia positiva en el tiempo; si es negativo, la serie tendrá tendencia negativa.

Si queremos simular un paseo aleatorio, necesitamos los valores de los siguientes parámetros/variables:

Y0, el primer valor de la serie.

φ0, la deriva de la serie

σε, la desviación estándar (volatilidad) del shock aleatorio

5.1 Simulación Monte Carlo para el modelo de Random Walk

Hagamos una simulación de Monte Carlo para un paseo aleatorio con deriva que intenta comportarse como el índice S&P 500. Utilizaremos valores diarios históricos reales del S&P500 para estimar los 3 parámetros anteriores.

Necesitamos descargar datos diarios para el índice S&P500 (en lugar de mensuales). Descargaremos datos desde 2011:

getSymbols("^GSPC", from="2011-01-01")
## [1] "GSPC"

Como no especificamos la frecuencia, descargamos datos diarios.

Ahora generamos el registro del índice S&P utilizando el precio/cotización de cierre y creamos una variable N para el número de días en el conjunto de datos:

# Now we generate the log of the S&P index using the closing price/quotation, and create a variable N for the number of days in the dataset:
lnsp<-log(Ad(GSPC))
# I assign a name for the column:
names(lnsp)<-c("lnsp")
# We get the # of rows of the lnsp series:
N<-nrow(lnsp)

5.1.1 Estimación de los parámetros del modelo de Random Walk

Tenemos que considerar la definición matemática de un paseo aleatorio y estimar sus parámetros (valor inicial, phi0, volatilidad del shock aleatorio) a partir de los datos diarios reales del S&P500.

Revisando nuevamente la ecuación del paseo aleatorio:

Yt=φ0+Yt−1+εt

El εt es el shock aleatorio de cada día, que representa la percepción promedio general de todos los participantes del mercado luego de conocer la noticia del día (noticias internas y externas anunciadas al mercado).

Recuerda que εt se comporta como una variable aleatoria con distribución de probabilidad normal con media=0 y con una desviación estándar específica σε.

Para la simulación del paseo aleatorio con deriva (rw1), necesitamos estimar los valores de

y0, el primer valor de la serie, que es el índice log S&P500 del primer día

ϕ0

σε

Tenemos que estimar ϕ0 utilizando el último y el primer valor real de la serie siguiendo la ecuación del paseo aleatorio.

Calculemos los primeros valores de Y según la ecuación del paseo aleatorio. Tenemos que partir de un valor inicial hoy (período t=0):

Y0=Initialvalue

Ahora, para mañana (t=1) y el día siguiente (t=2), aplicamos la ecuación del paseo aleatorio. Entonces para t=1:

Y1=φ0+Y0+ε1

Para t=2:

Y2=φ0+Y1+ε2

Sustituyendo Y1 en la ecuación Y2:

Y2=φ0+φ0+Y0+ε1+ε2

Reordenando los términos:

Y2=2∗φ0+Y0+ε1+ε2

Si seguimos haciendo lo mismo hasta el último día N obtenemos:

YN=N∗φ0+Y0+∑t=1Nϵt

Este resultado matemático es algo intuitivo. El valor de un paseo aleatorio en cualquier día N será igual a su valor inicial más N multiplicado por phi0 más la suma de TODOS los choques aleatorios desde el día 1 hasta el día N.

Se espera que la media de todos los shocks diarios sea cero, por lo que algunos días tendremos shocks negativos debido a malas noticias y otros días tendremos shocks positivos debido a buenas noticias.

Dado que se supone que la media de los shocks es cero, entonces también el valor esperado de la suma de todos los shocks debe ser cero. Entonces:

E[∑t=1Nϵt]=0

Simplificamos el valor esperado del último día YN como:

E[YN]=N∗φ0+Y0

Haciendo álgebra simple, vemos que phi0 se puede estimar como:

φ0=E[YN]−Y0N

Para calcular ϕ0 para un Random Walk que se comporta como el logaritmo del S&P, reemplazamos E[YN] por el último valor real YN de los datos:

φ0=(YN−Y0)N

Entonces, ϕ0 = (último valor - primer valor) / # de días.

En R podemos calcular ϕ0 de la siguiente manera:

#Then, ϕ0 = (last value - first value) / # of days.
lastprice = as.numeric(lnsp$lnsp[N])
# lnsp$lnsp[N] refers to the last row N of the vector lnsp$lnsp
firstprice = as.numeric(lnsp$lnsp[1])
# lnsp$lnsp[1] refers to the row 1 of the vector lnsp$lnsp

phi0<- (lastprice - firstprice) / N
cat("The value for phi0 is ",phi0)
## The value for phi0 is  0.000432228

Recuerda que N es el número total de días en el conjunto de datos, por lo que lnsp[N] tiene el último valor diario del registro del S&P500.

Para crear los shocks aleatorios simulados para todos los días, necesitamos estimar sigma, que es la desviación estándar de los shocks.

Primero podemos comenzar a estimar su varianza. Se sabe que la varianza de un paseo aleatorio no se puede determinar a menos que consideremos un número específico de períodos.

Luego, consideremos la ecuación de la serie de paseos aleatorios para el último valor (YN) y luego estimemos su varianza a partir de ahí:

YN=N∗φ0+Y0+∑t=1Nϵt

Usando esta ecuación, podemos calcular la varianza de YN:

Var(YN)=Var(N∗φ0)+Var(Y0)+∑t=1NVar(ϵt)

La varianza de una constante es cero. N∗ϕ0 e Y0 son constantes, por lo que los dos primeros términos son iguales a cero.

Ahora analizamos la varianza del shock:

Se supone que la varianza es homogénea en el tiempo. En otras palabras, la desviación estándar de los shocks es aproximadamente la misma a lo largo del tiempo, entonces:

Var(ϵ1)=Var(ϵ2)=Var(ϵN)=σ2ϵ Entonces, la suma de las varianzas de todas las perturbaciones es en realidad la varianza de las perturbaciones multiplicada por N. Entonces, la varianza de todas las perturbaciones multiplicada por N es en realidad la varianza de YN.

Entonces podemos escribir la varianza de YN como:

Var(YN)=0+0+∑t=1NVar(ϵt)

Var(YN)=N∗Var(ϵ)

σ2Y=N∗Var(ϵ) Para obtener la desviación estándar de YN tomamos la raíz cuadrada de la varianza de YN:

Var(YN)−−−−−−−√=N∗σ2ϵ−−−−−−√

Entonces:

SD(YN)=N−−√∗SD(ϵ)

Usamos el carácter sigma para las desviaciones estándar:

σY=N−−√∗σϵ

Llamamos volatilidad a la desviación estándar de los shocks.

Finalmente expresamos la volatilidad del shock (σε) en términos de la volatilidad de YN (σY):

σϵ=σYN−−√

Entonces podemos estimar sigma como: sigma = StDev(lnsp) / sqrt(N). Hagámoslo en R:

#Then we can estimate sigma as: sigma = StDev(lnsp) / sqrt(N). Let’s do it in R:
sigma<-sd(lnsp$lnsp) / sqrt(N)
cat("The standard deviation of the log is = ",sd(lnsp$lnsp),"\n")
## The standard deviation of the log is =  0.4294932
cat("The standard deviation (volatility) for the shock is = ",sigma)
## The standard deviation (volatility) for the shock is =  0.007278501

5.1.2 Simulando el paseo aleatorio con deriva

Para cada día, creamos un shock aleatorio usando la función rnorm. Creamos este shock con una desviación estándar igual a la volatilidad del shock que calculamos anteriormente (la sigma). Indicamos que la media =0:

Y usando la función plot, podemos ver el shock en el tiempo:

#Simulating the random walk with drift
shock <- rnorm(n=N,mean=0,sd=sigma)
lnsp$shock<-shock
#We can see the shock over time:
plot(shock, type="l", col="blue")

También podemos ver si el shock se comporta como una distribución normal haciendo su histograma:

hist(lnsp$shock)

Como era de esperar, el shock se comporta de manera similar a una variable con distribución normal.

Ahora estamos listos para iniciar la simulación de paseo aleatorio.

Recuerda que podemos expresar un paseo aleatorio como su valor inicial más N veces la deriva (ϕ0) más la suma de todos los shocks aleatorios desde el primer día hasta un período específico N:

YN=N∗φ0+Y0+∑t=1Nϵt

Ahora cambiamos el nombre de YN a rw1.

Podemos calcular los valores para este proceso de paseo aleatorio en R de la siguiente manera:

#We can calculate the values for this random walk process in R as follows:
# I create a column for the day #:
lnsp$day = seq(1,N)
# The seq function returns consequtive numbers from 1 to N
lnsp$rw1 = firstprice + lnsp$day*phi0 + cumsum(lnsp$shock)
#cumsum refers to the cumulative addition of the perturbances 1 to N

La función cumsum obtiene la suma acumulada de una variable desde el primer valor hasta cada uno de los valores de la variable.

Graficamos el Random Walk simulado y el registro real del S&P500:

# Plot the simulated random walk and the real log of the S&P500:
ts.plot(lnsp$lnsp)
lines(seq(1,N),lnsp$rw1, col="blue")

5.1.3 Simulando un paseo aleatorio sin deriva

Ahora podemos hacer una simulación, pero ahora sin la deriva. En este caso, el coeficiente ϕ0 debe ser cero.

Usaremos rw2 para esta serie. Puedes seguir la lógica que hicimos para rw1, pero ahora ϕ0 será igual a cero, por lo que no lo incluimos en la ecuación:

#Simulating a random walk with no drift
lnsp$rw2 = firstprice  + cumsum(lnsp$shock)

Graficamos este paseo aleatorio y el registro del S&P en un gráfico:

#Plot this random walk and the log of the S&P in one plot:
ts.plot(lnsp$lnsp)
# Plot both lines to compare 
lines(x=seq(1,N),y=lnsp$rw2, col="green")

6 RETO 3

RESPONDE LAS SIGUIENTES PREGUNTAS:

¿QUÉ OBSERVAS con la gráfica anterior? EXPLICA CON TUS PALABRAS. Visualizando nuevamente el log del S&P y el rw1:

PODEMOS VISUALIZAR QUE LA GRÁFICA MUESTRA DE COLOR VERDE QUE ES EL RW1 Y LA LINEA DE COLOR NEGRO MUESTRA EL LOGARITMO DEL ÍNDICE S&P 500.

LA LINEA NEGRA MUESTRA UNA TENDENDENCIA POSITIVA A LO ALRGO DEL TIEMPO, PERO SE PUEDEN VISUALIZAR CIERTAS CAIDAS TEMPORALES, PERO ESO NO AFECTA DIRECTAMENTE LA TENDENCIA DE CRECIMIENTO.EN CAMBIO LA LINEA VERDE ES MUY VARIABLE, NO MUESTRA CLARAMENTE EL COMPORTAMIENTO, PERO LA TENDENCIA TIENDE A SER NEGATIVA.

SI VISUALIZAMOS EL COMPORTAMIENTO DE AMBAS GRÁFICAS, PODEMOS DEDUCIR VISUALMENTE QUE EL S&P500 Y RW1 MUESTRAN UNA RELACION NEGATIVA, YA QUE CUANDO SUBE EL S&P500 EL RW1 BAJA Y VICEBERSAMENTE, PODEMOS CONCLUIR QUE EL COMPORTAMIENTO DE AMBAS ES CONTRARIO ENTRE ELLAS.

# Plot the natural log pf S&P500
ts.plot(lnsp$lnsp)
lines(seq(1,N),lnsp$rw1, col="blue")

DESPUÉS DE COMPARAR EL PASEO ALEATORIO SIMULADO CON EL S&P500, ¿EL REGISTRO DEL S&P500 PARECE UN RANDOM WALK? ¿POR QUÉ SÍ O POR QUÉ NO?

NUEVAMENTE LA LINEA NEGRA MUESTRA EL S&P500 Y EL PASEO ALEATORIO ES LA LINEA AZUL Y EL RANDOM WALK ES UN MODELO MATEMÁTICO UTILIZADO PARA DESCRIBIR UN PROCESO EN EL CUAL LOS CAMBIOS OCURREN DE MANERA ALEATORIA E IMPREDECIBLE EN CADA PASO. ENTONCES EL S&P500 NO ES ESTRICTAMENTE UN RANDOM WALK, YA QUE UN RANDOM WALK PURO ES IMPREDECIBLE Y NO TIENE UNA TENDENCIA ESTRUCTURADA, MIENTRAS QUE EL S&P500 MUESTRA UN CRECIMIENTO CONSISTENTE A LARGO PLAZO, LO QUE INDICA UNA TENDENCIA ASCENDENTE QUE NO ES COMPLETAMENTE ALEATORIA. ADEMÁS, EL S&P500 PUEDE EXPERIMENTAR VOLATILIDAD POR EVENTOS MACROECONÓMICOS, QUE AFECTAN SU COMPORTAMIENTO DE MANERA NO COMPLETAMENTE ALEATORIA.

¿CREES QUE PODEMOS UTILIZAR ESTE TIPO DE SIMULACIÓN PARA PREDECIR PRECIOS O ÍNDICES BURSÁTILES? ¿POR QUÉ SÍ O POR QUÉ NO?

LA SIMULACIÓN NO ES LO MÁS IDEAL PARA PREDECIR PRECIOS O ÍNDICES BURSÁTILES A LARGO PLAZO, YA QUE ESTOS MODELOS NO CAPTURAN LAS TENDENCIAS SUBYACENTES, PATRONES CÍCLICOS, NI EL IMPACTO DE EVENTOS ECONÓMICOS QUE AFECTAN A LOS MERCADOS FINANCIEROS REALES. EN EL CASO DE QUE NOS ENFOQUEMOS EN EL MUY CORTO PLAZO, LA HIPÓTESIS DE UN RANDOM WALK PUEDE APROXIMARSE AL COMPORTAMIENTO DE LOS PRECIOS DEBIDO A LA ALTA VOLATILIDAD Y A LA NATURALEZA IMPREDECIBLE DE LOS MOVIMIENTOS EN EL MERCADO.

7 Lectura

Lee la nota: “Introducción a las series temporales” (Introduction to time series.pdf), y con tus propias palabras:

8 RETO 4

RESPONDA A LO SIGUIENTE:

EXPLICA QUÉ ES UNA SERIE ESTACIONARIA.

¿CUÁLES SON LAS CONDICIONES DE UNA SERIE PARA CONSIDERARSE COMO SERIE ESTACIONARIA? UNA SERIE DE TIEMPO ES ESTRICTAMENTE ESTACIONARIA SI SUS PROPIEDADES NO CAMBIAN CON EL TIEMPO. PARA QUE UNA SERIE SEA CONSIDERADA ESTACIONARIA, DEBE CUMPLIR CON TRES CONDICIONES: 1. MEDIA CONSTANTE: LA MEDIA NO DEBE DEPENDER DEL TIEMPO. 2. VARIANZA CONSTANTE: LA VARIANZA DEBE SER ESTABLE Y NO VARIAR CON EL TIEMPO. 3. COVARIANZA CONSTANTE: LA COVARIANZA ENTRE VALORES DE LA SERIE DEBE SER INDEPENDIENTE DEL TIEMPO.

NOTA: LOS APUNTES LOS REALICE DIRECTAMENTE EN MI LIBRETA

FUENTES BIBLIOGRÁFICAS

Briega, R. E. L. (2016, 26 septiembre). Series de tiempo con Python. https://relopezbriega.github.io/blog/2016/09/26/series-de-tiempo-con-python/#:~:text=Un%20tipo%20muy%20importante%20de,tiempo%20para%20la%20serie%20roja.