Introduccion -Solana

Solana es un proyecto de código abierto altamente funcional que se basa en la naturaleza sin permiso de la tecnología blockchain para proporcionar soluciones financieras descentralizadas (DeFi). Si bien la idea y el trabajo inicial en el proyecto comenzaron en 2017, Solana fue lanzada oficialmente en marzo de 2020 por la Fundación Solana con sede en Ginebra, Suiza. El protocolo Solana está diseñado para facilitar la creación de aplicaciones descentralizadas (DApp). Su objetivo es mejorar la escalabilidad introduciendo un consenso de prueba de historia (PoH) combinado con el consenso de prueba de participación (PoS) subyacente de la cadena de bloques.

SOLANA “Noviembre - Abril” y pronosticos

Etapas

  1. Identificación del Modelo.
  2. Estacionariedad
  3. Ajustar el modelo.
  4. Diagnostico del modelo.
  5. Pronósticos.

Cargar los datos

datos <- read.csv("NOV_ABRIL.csv", header = TRUE)

Convertir los datos a una serie de tiempo

serie_tiempo <- ts(datos$Close, start = c(2022, 11), end = c(2023, 4), frequency = 365)

Paso 1: Identificación del Modelo

Realizar un gráfico de la serie de tiempo

title <- "Serie de Tiempo NOV-ABRIL"
xlab <- "Tiempo"
ylab <- "Precio"

plot(serie_tiempo, type = "l", main = title, xlab = xlab, ylab = ylab)

#Podemos observar que esta no es una serie estacionaria, es decir, no hay parámetros que se repitan, y la serie no se desenvulve sobre un eje. En pocas palabras, su comportamiento estadístico cambia a lo largo del tiempo Podemos observar, que a diferencia del ruido blanco en esta serie, se presenta una caminata aleatoria. Medidas como la media, varianza y/o covarianza pueden afectar la serie analizada, pues no se permanecen constantes en el tiempo. Por ejemplo, podríamos concluir que la varianza de los datos es muy dispersa en esta serie pues no fue constante a lo largo del tiempo. 

Calcular la autocorrelación y la autocorrelación parcial

acf(serie_tiempo)

#Como podemos observar, la gráfica nos confirma una vez más que la serie no es estacionario y tampoco tiene correalación pues la serie se sale de las líneas azules. Por lo que el modelo apropiado para pronósticar sería con Arima, no se podría poronósticar con Sarima.

Paso 2: Estacionariedad

Realizar una prueba de Dickey-Fuller aumentada para verificar la estacionariedad

adf.test(serie_tiempo)
## Augmented Dickey-Fuller Test 
## alternative: stationary 
##  
## Type 1: no drift no trend 
##      lag    ADF p.value
## [1,]   0 -0.185   0.591
## [2,]   1 -0.175   0.593
## [3,]   2 -0.130   0.607
## [4,]   3 -0.168   0.595
## [5,]   4 -0.148   0.601
## [6,]   5 -0.216   0.582
## Type 2: with drift no trend 
##      lag   ADF p.value
## [1,]   0 -2.27  0.2207
## [2,]   1 -2.23  0.2358
## [3,]   2 -2.20  0.2487
## [4,]   3 -2.32  0.2031
## [5,]   4 -2.27  0.2213
## [6,]   5 -2.65  0.0882
## Type 3: with drift and trend 
##      lag   ADF p.value
## [1,]   0 -2.27   0.464
## [2,]   1 -2.23   0.480
## [3,]   2 -2.20   0.494
## [4,]   3 -2.31   0.445
## [5,]   4 -2.26   0.464
## [6,]   5 -2.64   0.306
## ---- 
## Note: in fact, p.value = 0.01 means p.value <= 0.01
# El resultado de la prueba indica que la serie de tiempo no es estacionaria en ninguno de los tres casos: Es decir que la serie de tiempo tiene alguna forma de dependencia de tiempo y no podemos simplemente modelarla como un proceso estacionario.  El p-valor del test ADF es mayor que 0.05 en todos los casos, lo que indica que no podemos rechazar la hipótesis nula de que la serie de tiempo no es estacionaria. 

Paso 3: Ajustar el modelo

Ajustar un modelo ARIMA con los parámetros seleccionados por la función auto.arima()

nov_abril_arima <- auto.arima(serie_tiempo)
summary(nov_abril_arima)
## Series: serie_tiempo 
## ARIMA(2,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1     ar2     ma1     mean
##       0.0609  0.8791  0.9859  18.4288
## s.e.  0.0302  0.0301  0.0108   1.8781
## 
## sigma^2 = 1.368:  log likelihood = -565.5
## AIC=1141   AICc=1141.17   BIC=1160.42
## 
## Training set error measures:
##                      ME     RMSE       MAE        MPE     MAPE MASE        ACF1
## Training set 0.01913789 1.163185 0.7608277 -0.3383808 4.151026  NaN -0.04445972
# El modelo ARIMA ajustado a la serie de tiempo es un ARIMA(2,0,1) con media no nula. Los coeficientes estimados son: ar1 = 0.0609, ar2 = 0.8791, ma1 = 0.9859 y la media es 18.4288. El modelo es una buena elección y tiene un error medio absoluto (MAE) de 0.7608.

Paso 4: Diagnóstico del modelo

Realizar un gráfico de los residuos

checkresiduals(nov_abril_arima)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,0,1) with non-zero mean
## Q* = 127.08, df = 69, p-value = 2.605e-05
## 
## Model df: 3.   Total lags used: 72

Paso 5: Pronósticos

Realizar pronósticos utilizando el modelo ajustado

# Realizar pronóstico para los precios de mayo de 2023
library(forecast)
#pulpo <- forecast(nov_abril_arima, n.ahead = 31)
# Mostrar el pronóstico
#plot(pulpo, main="Pronóstico de precios de SOL para mayo de 2023")

#pronostico <- predict(pulpo,n.ahead=31)
#plot(pronostico)

#De acuerdo a esta grafica se puede pronosticar que para el mes de mayo de 2023 el precio de Solana va a caer.

SOLANA “Octubre-Marzo” y pronosticos de Abril

Cargar los datos

datos <- read.csv("SOLANA _octmarzo.csv", header = TRUE)

Convertir los datos a una serie de tiempo

serie_tiempo1 <- ts(datos$Close, start = c(2022, 10), end = c(2023, 3), frequency = 365)

Paso 1: Identificación del Modelo

Realizar un gráfico de la serie de tiempo

plot(serie_tiempo1, main = "Serie de Tiempo OCT-MARZO")

#Podemos observar que esta no es una serie estacionaria, pues no se desenvuelve sobre un mismo eje". Es una caminata aleatoria, que no es estacionaria, pue sus parámetros se ven afectados por el tiempo.

Calcular la autocorrelación y la autocorrelación parcial

acf(serie_tiempo1)

# Confirmando la gráfica anterior con esta para observar si la serie de tiempo tiene autocorrelación, graficamos esta nueva gráfica, la cual nos muestra que no hay estacionariedad pues los parámetros se salen de las lineas azules, tampoco hay ruido blanco.

Paso 2: Estacionariedad

Realizar una prueba de Dickey-Fuller aumentada para verificar la estacionariedad

adf.test(serie_tiempo1)
## Augmented Dickey-Fuller Test 
## alternative: stationary 
##  
## Type 1: no drift no trend 
##      lag   ADF p.value
## [1,]   0 -1.32   0.207
## [2,]   1 -1.32   0.208
## [3,]   2 -1.45   0.162
## [4,]   3 -1.49   0.146
## [5,]   4 -1.40   0.177
## [6,]   5 -1.48   0.149
## Type 2: with drift no trend 
##      lag   ADF p.value
## [1,]   0 -2.57  0.1011
## [2,]   1 -2.82  0.0597
## [3,]   2 -3.01  0.0367
## [4,]   3 -3.29  0.0175
## [5,]   4 -2.93  0.0450
## [6,]   5 -3.17  0.0233
## Type 3: with drift and trend 
##      lag   ADF p.value
## [1,]   0 -2.57  0.3359
## [2,]   1 -2.81  0.2329
## [3,]   2 -3.01  0.1493
## [4,]   3 -3.29  0.0724
## [5,]   4 -2.93  0.1839
## [6,]   5 -3.18  0.0917
## ---- 
## Note: in fact, p.value = 0.01 means p.value <= 0.01
# Los p-values son mayores que 0.05 para la mayoria de los datos de las pruebas, lo que indica que no se puede rechazar la hipótesis nula de que la serie de tiempo no es estaci

Paso 3: Ajustar el modelo

Ajustar un modelo ARIMA con los parámetros seleccionados por la función auto.arima()

oct_marzo_arima <- auto.arima(serie_tiempo1)
summary(oct_marzo_arima)
## Series: serie_tiempo1 
## ARIMA(5,0,2) with non-zero mean 
## 
## Coefficients:
##           ar1     ar2     ar3      ar4      ar5     ma1     ma2     mean
##       -0.0389  0.8577  0.2625  -0.1095  -0.0682  1.1344  0.2613  19.5236
## s.e.   0.5890  0.2057  0.4330   0.0561   0.0903  0.5874  0.4575   2.0962
## 
## sigma^2 = 2.874:  log likelihood = -696.28
## AIC=1410.55   AICc=1411.07   BIC=1445.5
## 
## Training set error measures:
##                       ME     RMSE      MAE        MPE     MAPE MASE
## Training set -0.03349432 1.676161 1.040257 -0.9205814 5.427986  NaN
##                      ACF1
## Training set -0.001877264
# El modelo ARIMA(5,0,2) con media no nula ajustado a la serie de tiempo "serie_tiempo1" muestra que los coeficientes ar1, ar2, ar3, ar4, ar5, ma1 y ma2 son significativos en el modelo

Paso 4: Diagnóstico del modelo

Realizar un gráfico de los residuos

checkresiduals(oct_marzo_arima)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(5,0,2) with non-zero mean
## Q* = 152.11, df = 65, p-value = 6.101e-09
## 
## Model df: 7.   Total lags used: 72

Paso 5: Pronósticos

Realizar pronósticos utilizando el modelo ajustado

# Realizar pronóstico para los precios de abril de 2023
library(forecast)
#leon <- forecast(oct_marzo_arima, n.ahead = 30)
# Mostrar el pronóstico
#plot(leon, main="Pronóstico de precios de SOL para abril de 2023")

#pronostico <- predict(leon,n.ahead=30)
#plot(pronostico)

#En esta grafica se puede comprobar de acuerdo a la prediccion para abril de 2023 que si sube el precio ya que aqui la prediccion muestra eso y si paso en realidad de acuerdo la grafica del pronostico de mayo donde se puede ver que en abril hubo un aumento en la grafica

Conclusiones

# Recomendaciones de inversion para Solana, como toda criptomoneda es altamente volatil en el mercado y su inversion siempre es riesgosa, desde noviembre del 2021 Solana ha caido un 97% desde su mas alto precio, tambien cayo del ranking de capitalizacion de mercado hasta el lugar #10, cuando se encontro en algun momento en el top 5. De acuerdo a los pronosticos realizados con la serie de tiempo, no es recomendable ya que se pronostica una caida en el siguiente mes.