Cadenas de Markov

Author

Mayra C. & Jeimy R.

Para la aplicación de las cadenas de Markov en una base de datos sobre las acciones de ciertas compañías, de tienen que tener siervos movimientos de estas en cuenta, los cuales son: Baja, Sube, y Estable.

Para este análisis se utilizo los datos de Yahoo Finance, con los datos de Meta Platforms, Inc (META). En este análisis se plantea el comportamiento de una base de datos que contiene los registros de los movimientos en las acciones de Meta Corporation, en un período de tiempo que va desde el 03 de enero de 2023 hasta el 30 de octubre del año 2024.

De estos datos se pueden utilizar varias variables para realizar el análisis pero el más recomendado es el Adj. Close, ya que contiene la información completa de los movimientos de las acciones

La base usada se puede extraer de: https://finance.yahoo.com/quote/META/history/?period1=1672704000&period2=1730246400

Las librerias

library(markovchain)
Package:  markovchain
Version:  0.9.5
Date:     2023-09-24 09:20:02 UTC
BugReport: https://github.com/spedygiorgio/markovchain/issues
library(Matrix)
library(expm)

Attaching package: 'expm'
The following object is masked from 'package:Matrix':

    expm
library(readxl)

La base

datos_META <- read.csv("~/clases/seminario/datos_META.csv")
head(datos_META, 10)
        Date   Open   High    Low  Close Adj_Close     Volume
1   1/3/2023 122.82 126.37 122.28 124.74    124.37 35,528,500
2   1/4/2023 127.38 129.05 125.85 127.37    126.99 32,397,100
3   1/5/2023 126.13 128.52 124.54 126.94    126.56 25,447,100
4   1/6/2023 128.97 130.33 126.04 130.02    129.63 27,584,500
5   1/9/2023 131.16 132.95 129.28 129.47    129.08 26,649,100
6  1/10/2023 127.27 133.44 127.15 132.99    132.59 28,684,400
7  1/11/2023 130.96 133.85 130.34 132.89    132.49 25,423,000
8  1/12/2023 133.44 137.68 131.76 136.71    136.30 30,757,700
9  1/13/2023 134.97 137.39 134.84 136.98    136.57 22,423,800
10 1/17/2023 136.18 136.75 134.25 135.36    134.95 21,147,600

La base contiene diversas variables las cuales son:

  • Date: la cual poseen la fecha del registro de los datos

  • Open: contiene el valor que poseeian las acciones en el momento de apertura de la bolsa de valores - High: contiene el máximo valor que registrarin las acciones en el día

  • Low: posee el valor más bajo de las acciones ese día

  • Close: posee el valor que tuvieron las acciones en el momento en que se cerró la bolsa de valores

  • Adj_Close: es el precio de cierre de las acciones ajustado, en este se incluye información sobre los dividendos y divisiones de acciones

  • Volume: es el volumen de las acciones negociados durante el día, en otras palabras indica las acciones que cambiaron de dueño en el mercado

Diferencia en los estados

Se usa el código diff para determinar la diferencia entre los estados:

datos_META$Change <- diff(c(NA, datos_META$Adj_Close))

Conversión de los estados a factores

Con la variable state se busca registrar en categorías el comportamiento de las acciones. Entre las categorías tenemos:

  • Subiendo
  • Bajando
  • Estable
datos_META$state <- ifelse(datos_META$Change > 0, "Subiendo",
                           ifelse(datos_META$Change < 0, "Bajando",
                                  "Estable")
                           )
head(datos_META, 10)
        Date   Open   High    Low  Close Adj_Close     Volume Change    state
1   1/3/2023 122.82 126.37 122.28 124.74    124.37 35,528,500     NA     <NA>
2   1/4/2023 127.38 129.05 125.85 127.37    126.99 32,397,100   2.62 Subiendo
3   1/5/2023 126.13 128.52 124.54 126.94    126.56 25,447,100  -0.43  Bajando
4   1/6/2023 128.97 130.33 126.04 130.02    129.63 27,584,500   3.07 Subiendo
5   1/9/2023 131.16 132.95 129.28 129.47    129.08 26,649,100  -0.55  Bajando
6  1/10/2023 127.27 133.44 127.15 132.99    132.59 28,684,400   3.51 Subiendo
7  1/11/2023 130.96 133.85 130.34 132.89    132.49 25,423,000  -0.10  Bajando
8  1/12/2023 133.44 137.68 131.76 136.71    136.30 30,757,700   3.81 Subiendo
9  1/13/2023 134.97 137.39 134.84 136.98    136.57 22,423,800   0.27 Subiendo
10 1/17/2023 136.18 136.75 134.25 135.36    134.95 21,147,600  -1.62  Bajando

Extracción de estados

estad <- datos_META$state
head(estad)
[1] NA         "Subiendo" "Bajando"  "Subiendo" "Bajando"  "Subiendo"

Convertimos la variable estad que se encuentra en una tabla a un data frame

estad = data.frame(estad)

Se elimina la primera fila, siempre en un data frame.

estad_1=estad[-c(1),]

Matriz de transicion

Se genera la matriz de transicion:

T<-createSequenceMatrix(estad_1)
T
         Bajando Estable Subiendo
Bajando       89       0      118
Estable        1       0        1
Subiendo     118       2      129

Matriz de probabilidades

Creamos la matriz de trancision con las probabilidades

transition_matrix<-markovchainFit(data=estad_1)$estimate
transition_matrix
MLE Fit 
 A  3 - dimensional discrete Markov Chain defined by the following states: 
 Bajando, Estable, Subiendo 
 The transition matrix  (by rows)  is defined as follows: 
           Bajando     Estable  Subiendo
Bajando  0.4299517 0.000000000 0.5700483
Estable  0.5000000 0.000000000 0.5000000
Subiendo 0.4738956 0.008032129 0.5180723

Aqui se pueden observar los valores de las probabilidadessegun los estados de las acciones, Bajando, Estable, Subiendo. En la matriz se puede observar que las filas contienen el estado actual de las acciones, las columnas son las que nos hablan del estado al que pueden trancisionarlos datos. Ademas las probbilidades nos hablan de las frecuencias relatiivas segun los valores de las acciones observado en el periodo de tiempo.

En el caso de las aciones se observa podemos hablar de las siguientes probabilidades:

  • Si las acciones se encuentran a la baja, existe un 42.99% de que siga bajando, por otro lado si el las acciones se encuentra estable hay un 50% de probabilidad que bajen, ademas existe un 47.39% de que su valor aumente.

  • No existe la probabilidad de que pase de estar a la baja a estar estable, asi como no existe probabilidad que se mantenga en un estado estable, por lo que este es transitorio. Asi se observa que la probabilidad que pase de estar subiendo a estable es del 0.08%

  • Si las acciones se encuentran a la baja la probabilidad de que suban es de 57.0%, por otro lado la probabilidad que el valor pase de un estado estable a subir su valor es del 50% y la probabilidad de que se mantenga subiendo es del 51.8%

Dígrafo

plot(transition_matrix)

Se puede observar que en el gráfico posee 3 nodos los cuales corresponden a cada uno de los estados en qué se encuentran presentes en la matriz de transición.

Además posee flechas indican la dirección de la transición de un estado a otro, los números presentes en cada una de las flechas Representan la probabilidad de un estado a otro. Por ejemplo:

  • Desde bajando hacia subiendo se tiene una probabilidad de 0.47

  • Bajando a estable una probabilidad de 0.5

  • Subiendo a bajando una probabilidad de 0.57Secuencia Simulada de estados

Secuencia Simulada de estados

Esta es una representación de la posible trayectoria de los estados en el tiempo para las acciones de META, si el estado inicial se encuentra dentro del estado Bajando, para esto se utilizo la matriz de transición.

Este código nos permite observar a largo plazo el comportamiento de cada estado donde se buscaque las probabilidades sean constantes.

accion_inicial <- "Bajando"
secuencia <- markovchainSequence(n = 10, markovchain = transition_matrix, t0 = "Bajando")
print(secuencia)
 [1] "Subiendo" "Bajando"  "Subiendo" "Subiendo" "Bajando"  "Bajando" 
 [7] "Subiendo" "Subiendo" "Subiendo" "Subiendo"

En este se busca predecir la secuencia futura de estados a partir de un estado inicial en una cadena de Markov. En este caso se buscan los datos para predecir si el inicio de los datos se encuentra en el estado “Bajando” ¿cuales son los resultados de los tres pasos adelante ?

predict(transition_matrix, newdata="Bajando",n.ahead=3)
[1] "Subiendo" "Subiendo" "Subiendo"

En este caso la probabilidad nos arroja el resultado (“Subiendo”, “Subiendo”,“Subiendo”), por lo tanto si se comienza en un estado bajo la cadena de markov posee una alta probabilidad de ir hacia el estado “Subiendo”,en los próximos 3 registros.

Vector estacionario

steadyStates(transition_matrix)
       Bajando    Estable  Subiendo
[1,] 0.4540561 0.00435015 0.5415937

En el vector estacionario podemos observar los resultado de las probabilidades en el largo plazo, un 45.4% del tiempo se encontrará bajando el valor de las acciones y un 54% del tiempo se encontrará siguiendo una trayectoria ascendente. Por último se observa que 0.44% del tiempo se encontrará estable el valor de las acciones.

Conclusiones

El análisis realizado muestra que las probabilidades de que el precio de las acciones pase de una alza a una baja son mayores que las de que se mantenga estable. Esto indica la existencia de un proceso de recuperación que suele ser rápido y beneficioso. Además, se observa que, cuando el precio está en aumento, es más probable que continúe subiendo. Por lo tanto, para los inversores interesados en comprar acciones, una estrategia viable sería invertir cuando el valor disminuya, ya que generalmente la recuperación posterior es rápida y confiable.

Asimismo, se identificó que la probabilidad de que el precio continúe subiendo mientras ya está en alza es significativamente alta, lo que sugiere que esta tendencia podría mantenerse durante un periodo prolongado. Esto brinda una oportunidad para los inversores que buscan aprovechar periodos de crecimiento sostenido en el precio de las acciones.

Por otro lado, la probabilidad de que las acciones se mantengan estables es de apenas un 0.44%, lo que refleja la alta volatilidad de las acciones de Meta. Esta volatilidad podría desincentivar a ciertos inversores, especialmente a aquellos que prefieren activos con mayor estabilidad en los precios.

El uso de cadenas de Markov ha permitido obtener una visión más precisa del comportamiento de las acciones de Meta. Estos resultados son valiosos tanto para inversores a corto como a largo plazo, ya que permiten diseñar estrategias basadas en patrones identificados. A nivel empresarial, estos hallazgos subrayan la importancia de desarrollar tácticas que atraigan a más inversores, aprovechando las oportunidades que ofrece la dinámica de sus acciones.