Problema:

La criptomoneda Ethereum presenta fluctuaciones significativas en su valor a lo largo del tiempo. Estas variaciones, aunque impulsadas por múltiples factores, pueden tener patrones subyacentes que, si se identifican, podrían proporcionar una visión valiosa para futuras tendencias de precios.

Objetivo:

Realizar un análisis de series temporales sobre los datos diarios de Ethereum con un enfoque académico. Identificar patrones y tendencias para prever movimientos de precios y apoyar decisiones de inversión informadas.’

Marco teorico:

  1. Ethereum: Una Revolución en la Tecnología Blockchain Definiendo Ethereum

Ethereum no se puede describir simplemente como una moneda digital o una tecnología emergente. Representa una reconfiguración fundamental de cómo entendemos las transacciones y operaciones digitales. Al mirar su infraestructura, vemos una red global descentralizada compuesta por máquinas distribuidas, todas operando con un protocolo unificado y sin un único centro o propietario. Esta estructura descentralizada representa un alejamiento significativo de las operaciones tradicionales centralizadas.

Sin embargo, es crucial no confundir Ethereum con una simple criptomoneda. Ethereum es un entorno de software que distingue por ejecutar aplicaciones no en servidores individuales, sino a través de la misma red, brindando mayor confiabilidad.

Ether: El Pulso de Ethereum

Aunque Ethereum es la estructura, Ether es el latido del corazón. Es la moneda que energiza la red, recompensando a los usuarios por contribuir con poder computacional. Las tareas computacionales son vitales para mantener la red operativa, y Ether actúa como un incentivo para garantizar una participación continua.

Dinero Programable y Contratos Inteligentes

Ethereum ha llevado a la noción de “dinero programable” a la vanguardia. Dentro de su cadena de bloques, opera con contratos inteligentes que actúan como acuerdos autoejecutables. Estos contratos, esencialmente, cumplen con términos y condiciones sin la necesidad de intermediarios. Esta autonomía no sólo reduce el riesgo de interferencia humana sino que también garantiza la ejecución del contrato siempre que se cumplan las condiciones preestablecidas.

Tokens de Ethereum y la Revolución ERC-20

A diferencia de muchas otras redes blockchain, Ethereum permite la creación de tokens personalizados dentro de su estructura. Estos tokens, respaldados por contratos inteligentes, pueden representar cualquier activo o valor. La versatilidad de este sistema ha dado origen a una multitud de tokens, siendo el ERC-20 uno de los más destacados y utilizados en la actualidad.

Ethereum en Funcionamiento

El funcionamiento interno de Ethereum es una danza compleja pero bien coreografiada de contratos inteligentes y transacciones. Cada vez que se activa una transacción, se ejecuta a través de la Máquina Virtual Ethereum, y cada nodo en la red registra y refleja esta transacción. Esta armonía asegura un registro distribuido y confiable de todas las transacciones.

El Gas: El Combustible de Ethereum

Para garantizar una operación fluida y evitar congestiones, Ethereum utiliza un sistema llamado gas. Este sistema funciona como una tarifa de transacción, donde se asigna un valor a las operaciones basado en su complejidad. Así, las operaciones más complejas y que consumen más recursos tendrán un costo más elevado, asegurando un equilibrio y una gestión eficiente de los recursos de la red.

  1. Métodos de Análisis de Series Temporales: El Enfoque de Prophet Introducción al Análisis de Series Temporales

Antes de sumergirnos en Prophet, es esencial entender el vasto paisaje del análisis de series temporales. Una serie temporal es una sucesión de datos medidos en momentos consecutivos a lo largo del tiempo, generalmente a intervalos uniformes. Estas series se utilizan ampliamente en estadísticas, economía y negocios, y tienen aplicaciones en diversos campos, desde el análisis de las tendencias del mercado de valores hasta la predicción del clima.

El análisis de series temporales tiene como objetivo descomponer estas series para entender o prever una tendencia futura. Para ello, se utilizan diversos métodos y técnicas que van desde modelos estadísticos simples hasta algoritmos complejos de aprendizaje automático.

Prophet: Una Herramienta Revolucionaria para Series Temporales

Prophet, desarrollado por el equipo de Facebook, ha emergido como una herramienta poderosa y versátil para el análisis y pronóstico de series temporales. A diferencia de muchos métodos tradicionales que requieren una configuración detallada y pueden ser fácilmente perturbados por anomalías en los datos, Prophet es robusto ante la falta de datos y cambios en las tendencias, lo que lo hace particularmente útil en el mundo real donde los datos a menudo no son perfectos.

Características distintivas de Prophet:

Flexibilidad: Prophet no asume un modelo lineal o no lineal previo. En su lugar, identifica automáticamente las tendencias al adaptarse a las estacionalidades anuales, semanales y diarias de los datos.

Tratamiento de días festivos: Una característica única de Prophet es su capacidad para modelar los efectos de los días festivos en una serie temporal.

Componentes Adicionales: Además de las tendencias y estacionalidades, Prophet permite incorporar componentes adicionales, como eventos especiales, que pueden influir en las series temporales.

Facilidad de Uso: A pesar de su complejidad subyacente, Prophet es sorprendentemente fácil de usar, incluso para aquellos sin un profundo conocimiento en análisis de series temporales.

Prophet en el Contexto de Ethereum

Dada la naturaleza volátil y dinámica de las criptomonedas, las herramientas tradicionales de análisis de series temporales a menudo no son suficientes para prever sus movimientos con precisión. Aquí es donde Prophet brilla. Al considerar la historia de precios de Ethereum y teniendo en cuenta sus peculiaridades, Prophet puede ofrecer predicciones más precisas y detalladas sobre movimientos futuros, brindando así una herramienta valiosa para inversionistas y analistas.

library(tidyverse)
library(car)
library(urca)
library(forecast)
library(tseries)
library(highcharter)
library(rio)
library(TSstudio)
library(zoo)
library(prophet)

Vistazo a los datos

etherium <- rio::import("https://github.com/EdwinHigueraA/bfi_s/raw/main/Etherium.csv")

cols_to_convert <- c("Open", "High", "Low", "Close")
for (col in cols_to_convert) {
  etherium[[col]] <- as.numeric(gsub(",", "", etherium[[col]]))
}
head(etherium)
##       Date   Open   High    Low  Close
## 1 1/1/2020 128.41 132.86 127.93 131.52
## 2 1/2/2020 131.52 131.52 126.18 127.44
## 3 1/3/2020 127.44 134.58 125.43 132.34
## 4 1/4/2020 132.34 135.58 131.94 133.93
## 5 1/5/2020 133.93 138.25 133.71 135.28
## 6 1/6/2020 135.06 142.86 134.01 141.50
tail(etherium)
##           Date    Open    High     Low   Close
## 1302 7/26/2023 1861.74 1886.65 1848.56 1882.11
## 1303 7/27/2023 1882.10 1884.80 1856.03 1858.85
## 1304 7/28/2023 1858.85 1881.56 1854.95 1876.17
## 1305 7/29/2023 1876.17 1885.00 1870.56 1884.26
## 1306 7/30/2023 1885.00 1885.72 1850.45 1864.68
## 1307 7/31/2023 1864.68 1875.63 1852.00 1853.28
eth_close_ts <- ts(etherium$Close, start = c(2020, 1), frequency = 365)

eth_close_ts
## Time Series:
## Start = c(2020, 1) 
## End = c(2023, 212) 
## Frequency = 365 
##    [1]  131.52  127.44  132.34  133.93  135.28  141.50  142.54  139.12  136.75
##   [10]  142.96  144.11  144.53  144.17  163.72  165.28  163.23  170.87  176.46
##   [19]  165.71  167.04  168.91  167.55  162.28  163.10  161.29  167.11  171.11
##   [28]  172.37  175.82  184.77  180.64  182.30  191.67  189.48  187.38  206.36
##   [37]  213.35  219.42  223.21  225.20  222.31  237.20  270.00  262.80  282.92
##   [46]  268.28  251.90  260.41  280.87  262.99  259.63  263.06  262.88  271.70
##   [55]  261.86  249.90  223.79  226.19  226.49  223.51  214.38  232.68  223.91
##   [64]  222.80  231.10  240.83  238.78  209.61  198.36  202.76  192.70  128.64
##   [73]  128.62  127.62  120.10  109.21  119.22  116.41  137.25  125.21  135.46
##   [82]  124.20  132.20  139.86  135.45  136.79  137.43  131.17  125.59  134.04
##   [91]  134.68  132.33  140.95  140.69  143.70  142.49  164.09  163.62  172.12
##  [100]  170.73  159.09  154.72  163.91  156.73  159.28  157.77  172.50  170.84
##  [109]  183.47  181.70  171.70  172.61  182.94  189.12  187.87  194.40  196.86
##  [118]  193.67  196.59  217.00  211.80  209.77  214.15  207.98  207.89  205.40
##  [127]  205.59  211.62  214.66  212.07  188.02  186.65  189.99  198.30  202.56
##  [136]  193.24  200.11  208.06  212.65  212.41  210.40  199.05  208.24  208.02
##  [145]  206.41  204.90  202.20  206.29  214.36  219.97  235.38  235.70  241.75
##  [154]  236.64  241.63  241.91  241.00  242.17  241.85  242.10  243.52  247.75
##  [163]  232.37  237.67  236.94  234.12  232.68  233.73  231.10  229.06  229.20
##  [172]  227.58  228.99  244.65  243.52  234.60  233.61  230.27  218.60  224.85
##  [181]  227.30  225.47  231.51  226.29  226.88  229.21  225.09  238.25  238.57
##  [190]  246.24  241.31  239.29  238.71  238.76  238.87  241.35  238.17  232.61
##  [199]  232.53  236.35  235.71  236.40  245.08  245.92  273.34  286.37  305.82
##  [208]  310.92  324.25  319.74  322.64  339.11  345.73  386.82  374.39  390.64
##  [217]  388.46  400.58  396.81  378.01  388.49  393.23  395.53  373.99  386.61
##  [226]  409.80  438.99  432.50  430.72  437.85  427.07  404.40  416.30  395.03
##  [235]  388.71  392.69  401.41  377.40  389.32  379.69  394.21  405.21  423.00
##  [244]  432.33  482.44  436.64  405.90  391.78  333.29  351.89  344.70  335.66
##  [253]  353.69  365.39  368.43  383.27  363.00  376.32  365.56  365.71  392.15
##  [262]  380.61  386.03  369.60  346.59  344.85  321.90  345.66  354.90  353.68
##  [271]  353.33  362.73  357.72  356.64  351.61  346.32  349.07  351.55  351.99
##  [280]  337.25  340.51  351.65  364.05  374.58  373.72  387.64  380.19  376.73
##  [289]  380.56  366.60  367.12  375.92  379.65  368.66  395.25  417.80  409.40
##  [298]  412.01  408.10  392.90  403.95  385.94  389.05  384.31  387.94  396.63
##  [307]  385.91  383.35  401.11  413.65  447.20  435.58  450.45  447.90  451.73
##  [316]  467.16  462.55  472.28  460.06  444.00  459.25  480.99  474.31  472.98
##  [325]  508.87  544.31  573.94  606.93  601.02  578.49  512.59  515.87  543.92
##  [334]  566.54  605.20  604.51  615.43  581.81  592.41  599.42  588.61  566.01
##  [343]  576.17  563.66  549.44  570.91  591.64  586.06  588.63  629.38  641.26
##  [352]  651.36  666.95  634.80  618.46  622.83  597.37  605.10  618.92  647.00
##  [361]  676.41  726.77  723.94  749.13  739.08  729.99  769.00  950.50 1008.06
##  [370] 1086.64 1183.71 1251.50 1190.64 1292.24 1269.99 1035.10 1078.26 1126.30
##  [379] 1189.00 1160.75 1228.99 1260.64 1234.03 1410.55 1323.76 1174.95 1243.67
##  [388] 1248.50 1353.24 1345.18 1335.01 1275.28 1350.38 1375.79 1385.72 1296.00
##  [397] 1348.97 1516.43 1633.45 1642.51 1721.71 1710.88 1602.50 1702.98 1769.73
##  [406] 1727.99 1769.92 1851.59 1814.50 1828.54 1792.02 1753.24 1854.00 1944.68
##  [415] 1957.91 1968.81 1922.80 1799.77 1539.99 1591.57 1526.11 1429.31 1507.11
##  [424] 1416.12 1547.00 1467.94 1595.02 1516.45 1535.09 1642.70 1664.00 1790.92
##  [433] 1825.00 1816.73 1840.50 1758.32 1911.71 1876.05 1791.32 1797.41 1817.47
##  [442] 1774.49 1817.85 1827.61 1800.00 1678.35 1672.34 1615.01 1603.41 1664.68
##  [451] 1718.50 1667.28 1806.40 1840.99 1940.00 1969.99 2092.13 2061.32 2061.67
##  [460] 2104.42 2122.45 1983.56 2054.91 2070.83 2090.86 2144.51 2145.92 2301.00
##  [469] 2369.54 2499.50 2460.83 2390.93 2226.09 2206.66 2307.28 2405.01 2408.00
##  [478] 2323.83 2295.99 2214.89 2463.00 2649.25 2708.01 2712.80 2763.92 2949.51
##  [487] 2969.00 3288.00 3409.65 3467.44 3467.85 3501.77 3852.00 3909.82 3899.32
##  [496] 4140.00 4104.21 3714.20 3990.47 3794.99 3360.34 3440.10 3434.23 2535.67
##  [505] 2761.80 2248.80 2356.38 2073.14 2623.97 2552.11 2791.65 2725.92 2424.99
##  [514] 2237.97 2437.73 2595.82 2577.58 2723.52 2819.99 2702.23 2627.47 2706.96
##  [523] 2651.31 2537.01 2563.27 2467.85 2383.54 2403.58 2562.82 2541.84 2522.43
##  [532] 2402.42 2343.23 2194.37 2225.64 2254.99 1941.23 1930.48 1931.56 2007.27
##  [541] 1867.87 1767.57 1816.34 2135.01 2191.26 2239.11 2117.60 2089.00 2219.55
##  [550] 2350.42 2217.31 2310.85 2362.01 2137.80 2134.85 2095.08 2130.87 2026.57
##  [559] 1949.46 1989.35 1925.09 1902.35 1899.02 1895.28 1819.30 1794.03 1947.62
##  [568] 2016.29 2039.45 2151.04 2157.66 2260.97 2242.77 2301.10 2314.17 2419.57
##  [577] 2490.81 2670.00 2597.51 2487.41 2708.97 2803.67 2911.70 3081.75 2988.72
##  [586] 3071.56 3156.55 3236.20 3061.61 3281.00 3233.92 3261.22 3164.98 3072.00
##  [595] 3007.34 3157.16 3260.97 3226.38 3156.96 3339.98 3216.70 3210.00 3116.84
##  [604] 3264.37 3239.14 3236.00 3342.39 3392.83 3730.00 3811.26 3917.19 3880.55
##  [613] 3972.05 3949.99 3415.04 3473.72 3424.95 3250.96 3293.97 3316.89 3295.57
##  [622] 3377.76 3551.43 3487.77 3378.01 3398.69 3359.13 3019.11 2765.16 3026.36
##  [631] 3142.44 2947.01 2927.45 3088.41 2974.94 2863.28 2820.49 2972.80 3293.01
##  [640] 3428.74 3426.97 3384.30 3533.79 3560.16 3623.58 3554.29 3579.31 3512.75
##  [649] 3493.73 3476.80 3576.00 3759.36 3879.87 3831.77 3700.98 3739.16 3809.34
##  [658] 4107.96 4089.19 3975.35 4089.33 4063.12 4180.80 4262.82 3984.14 4257.60
##  [667] 4409.10 4311.57 4269.50 4310.99 4505.48 4618.00 4517.22 4453.68 4488.09
##  [676] 4629.00 4773.85 4800.00 4557.49 4743.20 4655.12 4652.40 4576.79 4572.81
##  [685] 4257.79 4253.17 4022.41 4279.00 4433.39 4369.45 4078.51 4351.45 4257.24
##  [694] 4500.00 4078.31 4080.89 4256.95 4453.80 4627.16 4569.99 4545.44 4218.61
##  [703] 4066.10 4153.22 4324.65 4292.32 4418.54 4167.70 3999.61 4022.39 4122.34
##  [712] 3770.01 3854.24 4066.00 4030.84 3913.17 3976.42 3922.25 3914.36 4023.92
##  [721] 4015.75 4112.67 4067.43 4121.52 4087.98 4061.30 3807.82 3724.98 3733.98
##  [730] 3687.67 3749.75 3813.67 3727.99 3826.65 3557.41 3426.38 3216.50 3080.64
##  [739] 3188.77 3073.50 3232.52 3370.80 3271.94 3332.60 3337.18 3331.00 3168.54
##  [748] 3164.35 3114.58 3083.99 2614.44 2448.91 2422.90 2442.65 2414.06 2419.99
##  [757] 2359.79 2537.68 2620.00 2558.81 2680.71 2790.00 2647.75 2657.49 2957.62
##  [766] 3027.15 2996.00 3151.38 3118.37 3240.00 3114.29 2927.28 2880.00 2875.03
##  [775] 2915.92 3099.47 3136.48 2896.67 2783.64 2742.00 2599.40 2583.87 2604.01
##  [784] 2620.70 2633.01 2709.14 2827.20 2606.65 2821.51 2954.79 2963.89 2804.50
##  [793] 2608.32 2655.49 2627.79 2484.17 2560.80 2708.44 2604.00 2573.60 2586.98
##  [802] 2547.01 2524.55 2625.59 2774.50 2807.99 2952.01 2956.80 2877.47 2911.51
##  [811] 3001.61 2981.96 3104.85 3128.32 3144.00 3238.88 3417.28 3395.20 3413.71
##  [820] 3299.98 3443.19 3471.20 3495.00 3510.17 3436.17 3235.47 3238.51 3247.98
##  [829] 3226.04 3290.16 2992.28 2987.70 3105.73 3011.47 3030.16 3034.06 3045.70
##  [838] 3005.18 3094.31 3085.00 3001.41 2971.28 2961.98 2941.25 2996.74 2828.63
##  [847] 2864.84 2948.97 2806.13 2788.47 2812.70 2827.69 2774.37 2943.42 2754.37
##  [856] 2704.81 2673.55 2539.33 2286.10 2321.92 2031.16 1925.01 2043.75 1997.47
##  [865] 2128.88 2030.99 2051.90 1962.74 2011.38 1957.64 1972.76 2004.77 1996.35
##  [874] 1967.21 1959.09 1826.05 1744.16 1790.25 1793.03 1952.14 1948.13 1794.22
##  [883] 1824.05 1758.06 1774.69 1809.74 1860.47 1844.73 1796.12 1792.44 1677.39
##  [892] 1521.84 1477.97 1243.08 1187.30 1177.44 1096.86 1095.00  902.25 1138.58
##  [901] 1119.96 1121.57 1051.16 1134.20 1215.09 1207.44 1247.70 1202.24 1160.55
##  [910] 1107.93 1011.67 1067.88 1062.79 1083.27 1120.44 1154.34 1160.63 1237.75
##  [919] 1242.36 1219.84 1177.50 1136.62 1046.00 1075.93 1191.48 1256.28 1345.60
##  [928] 1343.41 1473.04 1559.60 1524.00 1586.73 1525.01 1523.82 1611.43 1520.86
##  [937] 1379.02 1601.64 1756.28 1733.17 1702.82 1721.29 1622.95 1650.30 1641.88
##  [946] 1590.67 1679.93 1715.00 1722.52 1799.85 1698.01 1842.60 1902.53 1933.74
##  [955] 1991.91 1942.57 1904.74 1885.13 1850.20 1876.87 1687.80 1531.94 1618.24
##  [964] 1578.05 1649.28 1683.37 1707.80 1557.41 1480.58 1483.47 1546.83 1557.62
##  [973] 1572.96 1580.77 1568.51 1552.16 1571.36 1598.42 1579.95 1641.59 1644.75
##  [982] 1720.62 1734.07 1759.33 1724.26 1607.50 1603.66 1504.22 1436.00 1462.59
##  [991] 1370.86 1357.73 1342.61 1313.67 1324.18 1301.98 1342.22 1293.03 1325.05
## [1000] 1324.42 1351.26 1338.25 1331.30 1309.66 1303.74 1323.92 1362.09 1346.06
## [1009] 1363.88 1332.01 1325.20 1320.90 1307.39 1282.78 1298.57 1294.30 1302.20
## [1018] 1280.85 1311.01 1330.45 1314.44 1293.99 1281.77 1302.46 1316.05 1330.22
## [1027] 1351.91 1473.00 1554.46 1527.81 1561.00 1627.40 1595.49 1566.34 1575.52
## [1036] 1513.45 1541.15 1647.04 1631.71 1604.04 1575.70 1335.07 1105.81 1320.71
## [1045] 1265.94 1255.72 1216.60 1226.43 1244.39 1206.04 1205.70 1208.80 1210.00
## [1054] 1139.38 1092.64 1130.19 1168.79 1195.20 1199.67 1209.93 1216.21 1172.11
## [1063] 1219.38 1296.99 1276.85 1290.99 1260.76 1277.23 1259.46 1256.66 1231.63
## [1072] 1278.18 1259.91 1268.94 1264.92 1275.15 1320.19 1310.85 1264.65 1194.61
## [1081] 1179.27 1182.99 1176.05 1216.55 1211.12 1215.00 1221.85 1218.69 1218.33
## [1090] 1216.70 1210.24 1186.77 1195.20 1197.20 1199.52 1202.11 1221.34 1210.65
## [1099] 1252.16 1251.32 1266.32 1264.20 1269.72 1317.74 1339.75 1342.74 1427.58
## [1108] 1456.07 1538.04 1552.35 1579.41 1581.50 1528.20 1545.03 1637.84 1660.63
## [1117] 1628.25 1632.14 1599.45 1617.97 1602.99 1598.72 1567.24 1643.21 1557.18
## [1126] 1576.74 1635.79 1640.80 1657.36 1678.81 1622.40 1638.37 1667.49 1652.81
## [1135] 1541.00 1507.00 1535.60 1511.92 1486.15 1555.78 1665.44 1682.03 1695.34
## [1144] 1688.00 1686.12 1700.70 1641.12 1619.33 1646.58 1602.99 1574.00 1642.65
## [1153] 1627.28 1605.47 1656.70 1641.69 1558.69 1556.43 1571.74 1566.31 1550.40
## [1162] 1552.67 1432.87 1426.20 1475.61 1562.36 1672.75 1708.72 1652.89 1658.91
## [1171] 1743.94 1796.69 1799.55 1760.30 1798.20 1736.07 1817.20 1750.00 1732.01
## [1180] 1761.52 1707.60 1774.61 1803.13 1795.10 1817.14 1817.06 1789.24 1780.58
## [1189] 1879.00 1905.27 1865.02 1853.74 1855.68 1857.01 1885.87 1895.20 1908.85
## [1198] 2008.64 2107.57 2089.25 2122.92 2078.22 2092.83 1981.65 1938.10 1838.38
## [1207] 1868.86 1848.21 1837.70 1860.78 1865.73 1919.58 1895.84 1904.53 1892.35
## [1216] 1809.79 1870.08 1874.03 1878.06 1990.86 1898.07 1913.16 1840.91 1848.64
## [1225] 1858.80 1796.09 1788.28 1804.40 1799.10 1826.27 1821.41 1826.20 1796.79
## [1234] 1812.70 1817.13 1806.42 1818.16 1854.86 1804.97 1809.86 1835.42 1827.72
## [1243] 1854.69 1893.48 1904.12 1865.88 1869.00 1905.58 1888.02 1904.47 1804.84
## [1252] 1876.99 1841.52 1853.42 1835.97 1744.18 1770.55 1739.10 1737.99 1639.49
## [1261] 1668.06 1725.64 1728.16 1729.94 1730.08 1787.30 1877.35 1888.03 1907.34
## [1270] 1876.83 1893.40 1852.34 1891.64 1831.27 1849.91 1927.83 1923.46 1918.45
## [1279] 1959.62 1941.90 1910.07 1883.21 1865.67 1848.98 1869.41 1891.95 1874.76
## [1288] 1871.99 1984.00 1916.38 1932.03 1928.67 1890.35 1894.84 1899.00 1887.27
## [1297] 1894.77 1888.50 1891.99 1850.79 1861.73 1882.11 1858.85 1876.17 1884.26
## [1306] 1864.68 1853.28
eth_close_zoo <- as.zoo(eth_close_ts)
eth_close_df <- fortify.zoo(eth_close_zoo)
eth_close_df$Year <- floor(eth_close_df$Index)
eth_close_df$Days <- round((eth_close_df$Index - eth_close_df$Year) * 365.25)

eth_close_df$Date <- as.Date(paste0(eth_close_df$Year, "-01-01")) + eth_close_df$Days
hchart(eth_close_df, "line", hcaes(x = Date, y = eth_close_zoo)) %>% 
  hc_add_theme(hc_theme_darkunica())
autoplot(eth_close_ts)#

plot(decompose(eth_close_ts))

### Pruebas de Raíz Unitaria 
### Dickey- Fuller    y  Phillips Perron


adf.test(eth_close_ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  eth_close_ts
## Dickey-Fuller = -1.689, Lag order = 10, p-value = 0.7099
## alternative hypothesis: stationary
pp.test(eth_close_ts)
## 
##  Phillips-Perron Unit Root Test
## 
## data:  eth_close_ts
## Dickey-Fuller Z(alpha) = -5.0704, Truncation lag parameter = 7, p-value
## = 0.8269
## alternative hypothesis: stationary
# Identificación
par(mfrow=c(3,3))
plot(eth_close_ts,type="o")
acf(eth_close_ts, lag.max=40)
pacf(eth_close_ts, lag.max=40)
plot(diff(eth_close_ts),type="o")
abline(h=2*sqrt(var(diff(eth_close_ts))),col="red",lty=2)
abline(h=-2*sqrt(var(diff(eth_close_ts))),col="red",lty=2)
acf(diff(eth_close_ts), lag.max=40)
pacf(diff(eth_close_ts), lag.max=40)
plot(diff(eth_close_ts,),type="o")
acf(diff(eth_close_ts,365), lag.max=40)
pacf(diff(eth_close_ts,365), lag.max=40)

plot(ur.df(diff(eth_close_ts,365),type="none",lag=12))

Dickey Fuller del paquete tseries

adf.test(diff(eth_close_ts,365))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff(eth_close_ts, 365)
## Dickey-Fuller = -1.6038, Lag order = 9, p-value = 0.746
## alternative hypothesis: stationary

test phillips- perron

plot(ur.pp(diff(eth_close_ts,365),type="Z-tau",
     model="constant", lags="long"))

pp.test(diff(eth_close_ts,365))
## 
##  Phillips-Perron Unit Root Test
## 
## data:  diff(eth_close_ts, 365)
## Dickey-Fuller Z(alpha) = -5.6193, Truncation lag parameter = 7, p-value
## = 0.7963
## alternative hypothesis: stationary
ts_cor(diff(eth_close_ts,365), lag.max=40)
ts_cor(diff(eth_close_ts,30), lag.max=40)
ts_cor(diff(eth_close_ts,15), lag.max=40)

Transformación y modelado de los datos:

1. Transformación Logarítmica

eth_close_log <- log(eth_close_ts)

autoplot(eth_close_log) + ggtitle("Log-Transformed Ethereum Prices")

Arima LOG

model_log <- arima(eth_close_log, order=c(2,1,1))
summary(model_log)
## 
## Call:
## arima(x = eth_close_log, order = c(2, 1, 1))
## 
## Coefficients:
##          ar1     ar2      ma1
##       0.5573  0.0596  -0.5795
## s.e.  0.2445  0.0282   0.2440
## 
## sigma^2 estimated as 0.002163:  log likelihood = 2153.93,  aic = -4299.86
## 
## Training set error measures:
##                      ME       RMSE        MAE        MPE      MAPE      MASE
## Training set 0.00184675 0.04648725 0.03188681 0.02807493 0.4629673 0.9981464
##                      ACF1
## Training set -0.002175796
BIC(model_log)
## [1] -4279.16
eth_close_diff_log <- diff(eth_close_log)

par(mfrow=c(3,1))
plot(eth_close_diff_log, main="Log-Transformed & Differenced Ethereum Prices")
acf(eth_close_diff_log, lag.max=40, main="ACF of Log-Transformed & Differenced Ethereum Prices")
pacf(eth_close_diff_log, lag.max=40, main="PACF of Log-Transformed & Differenced Ethereum Prices")

2. Transformación Box-Cox

lambda <- BoxCox.lambda(eth_close_ts)
eth_close_boxcox <- BoxCox(eth_close_ts, lambda)

autoplot(eth_close_boxcox) + ggtitle("Box-Cox Transformed Ethereum Prices")

ARIMA - Box cox

model_box <- arima(eth_close_boxcox, order=c(3,1,2))
summary(model_box)
## 
## Call:
## arima(x = eth_close_boxcox, order = c(3, 1, 2))
## 
## Coefficients:
##           ar1      ar2     ar3     ma1     ma2
##       -0.4584  -0.8862  0.0246  0.4235  0.8806
## s.e.   0.0665   0.0465  0.0298  0.0609  0.0442
## 
## sigma^2 estimated as 736.3:  log likelihood = -6164.1,  aic = 12340.21
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.4744995 27.12496 16.40088 0.09487953 2.698286 0.9890188
##                       ACF1
## Training set -0.0009303598
BIC(model_box)
## [1] 12371.26

Profundidad del modelo Logarítmico

et <- residuals(model_log)

par(mfrow=c(2,2))
plot(et, main="Residuales del modelo")
acf(et, main="ACF de Residuales")
pacf(et, main="PACF de Residuales")
qqnorm(et, main="QQ Plot de Residuales")
qqline(et)

Test de los supuestos del modelo

Box.test(et,lag=7,type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  et
## X-squared = 12.838, df = 7, p-value = 0.07616
jarque.bera.test(et)
## 
##  Jarque Bera Test
## 
## data:  et
## X-squared = 3797.5, df = 2, p-value < 2.2e-16
#### Test de Aleatoriedad

#$H_0:$ Residuales exhiben un comport. de Aleatoriedad
#$H_a:$ Residuales no exhiben estructura (Tendencia, o cualquier otro comportamiento predecible)
runs.test(as.factor(sign(et)), alternative="two.sided")
## 
##  Runs Test
## 
## data:  as.factor(sign(et))
## Standard Normal = 1.0006, p-value = 0.317
## alternative hypothesis: two.sided

Pronóstico Inicial

forecast_log <- forecast(model_log, h=60, fan = T)
plot(forecast(model_log,h=60, fan=T))
lines(fitted(model_log), col="red")

3.Modelado con Prophet - Sin LOG

eth_prophet <- data.frame(ds = eth_close_df$Date, y = eth_close_df$eth_close_zoo)
m <- prophet(eth_prophet)
## Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
future <- make_future_dataframe(m, periods = 60)
forecast <- predict(m, future)
forecast_prophet <- predict(m, future)
plot(m, forecast)

prophet_plot_components(m, forecast)

4.Modelado con Prophet - Con LOG

eth_prophet_2 <- data.frame(ds = eth_close_df$Date, y = log(eth_close_df$eth_close_zoo))
m2 <- prophet(eth_prophet_2)
## Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
future2 <- make_future_dataframe(m2, periods = 60)
forecast2 <- predict(m2, future2)
forecast_prophet_log <- predict(m2, future2)
plot(m2, forecast2)

prophet_plot_components(m2, forecast2)

5.Red Neuronal

Z <- as.ts(etherium$Close)
S <- (Z - min(Z)) / (max(Z) - min(Z))
plot(S)

tamano_total <- length(S)
tamano_train <- round(tamano_total * 0.75, digits = 0)

train <- 1:tamano_train
test <- (tamano_train+1):tamano_total
library(zoo)
slogN <- data.frame(y = S, 
                    lag.1 = stats::lag(S, -1), 
                    lag.2 = stats::lag(S, -2), 
                    lag.3 = stats::lag(S, -3), 
                    lag.4 = stats::lag(S, -4), 
                    lag.5 = stats::lag(S, -5), 
                    lag.6 = stats::lag(S, -6), 
                    lag.7 = stats::lag(S, -7), 
                    lag.8 = stats::lag(S, -8), 
                    lag.9 = stats::lag(S, -9), 
                    lag.10 = stats::lag(S, -10), 
                    lag.11 = stats::lag(S, -11), 
                    lag.12 = stats::lag(S, -12))

slogN <- na.omit(slogN)



inputs <- as.data.frame(slogN[,-1])
outputs <- slogN$y

Red De Elman

library(RSNNS)
set.seed(42)
fit <- elman(inputs[train,], outputs[train], size = c(10, 3), learnFuncParams = c(0.1), maxit = 2000)
plotIterativeError(fit, main = "Iterative Error for Elman with 10,3 Neurons")

y <- as.vector(outputs[test])
plot(y, type = "l", ylim = range(c(y, predict(fit, newdata = inputs[test,]))))
lines(predict(fit, newdata = inputs[test,]), col = "red")

predictions <- predict(fit, newdata = inputs)
predictions_desnorm <- predictions * (max(Z) - min(Z)) + min(Z)
plot(Z, type = "l", col = "blue", lwd = 2, main = "Predicciones vs Datos Reales", xlab = "Tiempo", ylab = "Valor")
lines(predictions_desnorm, col = "red", lwd = 2)
legend("topright", legend = c("Real", "Predicción"), col = c("blue", "red"), lty = 1, cex = 0.8)

library(RSNNS)

slogN <- cbind(y = S, sapply(1:12, function(lag) stats::lag(S, -lag)))
slogN <- na.omit(slogN)

inputs <- slogN[,-1]
outputs <- slogN[,1]


predicciones <- numeric(60)
ultimos_datos <- as.matrix(tail(inputs, 12))

for(i in 1:60){
  pred <- predict(fit, newdata = t(ultimos_datos[1, ])) 
  predicciones[i] <- pred[1]
 
  ultimos_datos[1:(nrow(ultimos_datos) - 1), ] <- ultimos_datos[2:nrow(ultimos_datos), ]
 
  ultimos_datos[nrow(ultimos_datos), 1] <- pred[1]
}



# Desnormalizar las predicciones:
predicciones_desnorm <- predicciones * (max(Z) - min(Z)) + min(Z)


plot(Z, type = "l", col = "blue", lwd = 2, main = "Predicciones vs Datos Reales", xlab = "Tiempo", ylab = "Valor")
lines(c(rep(NA, length(Z)), predicciones_desnorm), col = "red", lwd = 2)
legend("topright", legend = c("Real", "Predicción"), col = c("blue", "red"), lty = 1, cex = 0.8)

Ingreso de Datos reales:

etherium_real <- rio::import("https://github.com/EdwinHigueraA/bfi_s/raw/main/Etherium_real.csv")

cols_to_convert <- c("Open", "High", "Low", "Close")
for (col in cols_to_convert) {
  etherium_real[[col]] <- as.numeric(gsub(",", "", etherium_real[[col]]))
}

Comparación General de los modelos:

etherium_real$Date <- as.Date(etherium_real$Date, format="%m/%d/%Y")

ultimos_60_dias <- etherium_real$Close
fechas_correctas <- tail(etherium_real$Date, length(ultimos_60_dias))

forecast_log_values <- head(forecast_log$mean, length(ultimos_60_dias))
forecast_prophet_values <- head(forecast_prophet$yhat[(length(etherium$Close)+1):(length(etherium$Close)+60)], length(ultimos_60_dias))
forecast_prophet_log_values <- head(exp(forecast_prophet_log$yhat[(length(etherium$Close)+1):(length(etherium$Close)+60)]), length(ultimos_60_dias))
predicciones_desnorm_values <- head(predicciones_desnorm, length(ultimos_60_dias))


fechas <- etherium_real$Date[1:length(ultimos_60_dias)]


tabla_predicciones <- data.frame(
  Fecha = fechas,
  Real = ultimos_60_dias,
  Log = forecast_log_values,
  Prophet = forecast_prophet_values,
  ProphetLog = forecast_prophet_log_values,
  RedNeuronal = predicciones_desnorm_values,
  Cercania = ultimos_60_dias - predicciones_desnorm_values
)
tabla_predicciones$Fecha <- fechas_correctas
tabla_predicciones
##         Fecha    Real      Log  Prophet ProphetLog RedNeuronal     Cercania
## 1  2023-08-01 1849.42 7.524545 2006.976   2311.231    1891.193  -41.7729308
## 2  2023-08-02 1841.11 7.524087 2035.005   2355.522    1896.795  -55.6848536
## 3  2023-08-03 1843.43 7.523821 2056.411   2395.202    1890.330  -46.8995480
## 4  2023-08-04 1820.65 7.523646 2069.579   2426.876    1894.643  -73.9928273
## 5  2023-08-05 1832.41 7.523532 2096.834   2470.893    1854.549  -22.1389299
## 6  2023-08-06 1828.82 7.523459 2119.794   2505.000    1867.138  -38.3178785
## 7  2023-08-07 1825.17 7.523411 2141.366   2540.437    1886.209  -61.0394675
## 8  2023-08-08 1863.42 7.523380 2170.290   2584.606    1861.716    1.7037069
## 9  2023-08-09 1851.60 7.523360 2196.350   2619.568    1879.574  -27.9736103
## 10 2023-08-10 1848.25 7.523347 2214.882   2646.465    1886.843  -38.5930249
## 11 2023-08-11 1843.93 7.523338 2224.286   2661.779    1867.294  -23.3644505
## 12 2023-08-12 1846.64 7.523333 2246.921   2688.036    1857.200  -10.5597499
## 13 2023-08-13 1853.18 7.523329 2264.454   2701.135    1853.357   -0.1770255
## 14 2023-08-14 1843.10 7.523327 2279.854   2713.659    1851.772   -8.6717339
## 15 2023-08-15 1827.97 7.523325 2301.933   2733.736    1851.998  -24.0279245
## 16 2023-08-16 1807.39 7.523324 2320.565   2742.673    1851.363  -43.9726895
## 17 2023-08-17 1715.99 7.523324 2331.180   2742.342    1855.837 -139.8470142
## 18 2023-08-18 1657.64 7.523323 2332.284   2729.803    1854.929 -197.2886170
## 19 2023-08-19 1671.39 7.523323 2346.341   2728.692    1852.510 -181.1201387
## 20 2023-08-20 1688.54 7.523323 2355.130   2714.836    1855.030 -166.4895500
## 21 2023-08-21 1672.50 7.523323 2361.727   2701.510    1853.321 -180.8206784
## 22 2023-08-22 1630.52 7.523322 2375.054   2697.068    1852.242 -221.7222887
## 23 2023-08-23 1684.34 7.523322 2385.081   2683.311    1854.412 -170.0719294
## 24 2023-08-24 1648.30 7.523322 2387.331   2662.559    1855.865 -207.5649735
## 25 2023-08-25 1649.52 7.523322 2380.389   2632.336    1856.438 -206.9184185
## 26 2023-08-26 1646.92 7.523322 2386.789   2615.609    1856.634 -209.7141335
## 27 2023-08-27 1653.31 7.523322 2388.361   2589.174    1856.580 -203.2701721
## 28 2023-08-28 1645.84 7.523322 2388.221   2565.786    1856.612 -210.7723253
## 29 2023-08-29 1727.69 7.523322 2395.312   2553.258    1856.089 -128.3989274
## 30 2023-08-30 1703.25 7.523322 2399.614   2534.211    1856.128 -152.8777908
## 31 2023-08-31 1647.42 7.523322 2396.638   2510.718    1856.427 -209.0072348
## 32 2023-09-01 1629.34 7.523322 2384.949   2480.251    1856.181 -226.8409135
## 33 2023-09-02 1634.45 7.523322 2387.043   2464.194    1856.347 -221.8969916
## 34 2023-09-03 1642.73 7.523322 2384.705   2440.399    1856.496 -213.7660146
## 35 2023-09-04 1627.10 7.523322 2380.996   2420.586    1856.261 -229.1608770
## 36 2023-09-05 1629.31 7.523322 2384.797   2411.842    1856.062 -226.7518069
## 37 2023-09-06 1628.00 7.523322 2386.023   2397.471    1855.976 -227.9762515
## 38 2023-09-07 1638.72 7.523322 2380.122   2379.119    1855.952 -217.2316473
## 39 2023-09-08 1636.05 7.523322 2365.594   2354.094    1855.961 -219.9114331
## 40 2023-09-09 1633.73 7.523322 2364.882   2342.443    1855.964 -222.2336698
## 41 2023-09-10 1619.14 7.523322 2359.721   2322.928    1856.026 -236.8857394
## 42 2023-09-11 1540.25 7.523322 2353.137   2306.510    1856.029 -315.7788149
## 43 2023-09-12 1599.23 7.523322 2353.987   2299.823    1855.993 -256.7630271
## 44 2023-09-13 1604.73 7.523322 2352.178   2286.862    1856.017 -251.2865129
## 45 2023-09-14 1628.99 7.523322 2343.167   2269.144    1855.999 -227.0088985
## 46 2023-09-15 1621.50 7.523322 2325.480   2244.108    1855.979 -234.4793270
## 47 2023-09-16 1635.44 7.523322 2321.603   2230.920    1856.004 -220.5644904
## 48 2023-09-17 1617.37 7.523322 2313.332   2209.436    1856.031 -238.6610517
## 49 2023-09-18 1638.02 7.523322 2303.769   2190.235    1856.044 -218.0236334
## 50 2023-09-19 1642.87 7.523322 2301.861   2179.761    1856.047 -213.1772681
## 51 2023-09-20 1623.35 7.523322 2297.617   2163.019    1856.045 -232.6950313
## 52 2023-09-21 1588.24 7.523322 2286.607   2141.701    1856.044 -267.8044721
## 53 2023-09-22 1591.06 7.523322 2267.475   2113.655    1856.036 -264.9760844
## 54 2023-09-23 1593.68 7.523322 2262.826   2097.177    1856.035 -262.3549660
## 55 2023-09-24 1590.66 7.523322 2254.575   2073.535    1856.039 -265.3794395
## 56 2023-09-25 1586.68 7.523322 2245.935   2052.900    1856.037 -269.3574823
## 57 2023-09-26 1586.61 7.523322 2245.960   2041.499    1856.039 -269.4294395
## 58 2023-09-27 1594.33 7.523322 2244.747   2025.463    1856.042 -261.7122354
## 59 2023-09-28 1657.07 7.523322 2237.940   2006.525    1856.039 -198.9691599
## 60 2023-09-29 1667.04 7.523322 2224.232   1982.767    1856.036 -188.9955252
library(ggplot2)

grafico <- ggplot(tabla_predicciones, aes(x=Fecha)) + 
  geom_line(aes(y=Real, colour="Real")) + 
  geom_line(aes(y=Log, colour="Log")) + 
  geom_line(aes(y=Prophet, colour="Prophet")) + 
  geom_line(aes(y=ProphetLog, colour="Prophet Log")) + 
  geom_line(aes(y=RedNeuronal, colour="Red Neuronal")) +
  labs(title="Comparación de Predicciones vs Datos Reales", x="Fecha", y="Valor") +
  scale_color_manual(name="Leyenda", values=c("Real"="black", "Log"="red", "Prophet"="green", "Prophet Log"="blue", "Red Neuronal"="purple")) +
  theme_minimal() +
  theme(legend.position="bottom")
grafico

# Funciones para calcular RMSE y MAE
rmse <- function(error) {
  sqrt(mean(error^2))
}

mae <- function(error) {
  mean(abs(error))
}

# Error para cada modelo
error_log <- tabla_predicciones$Real - tabla_predicciones$Log
error_prophet <- tabla_predicciones$Real - tabla_predicciones$Prophet
error_prophet_log <- tabla_predicciones$Real - tabla_predicciones$ProphetLog
error_red_neuronal <- tabla_predicciones$Real - tabla_predicciones$RedNeuronal

# RMSE
rmse_log <- rmse(error_log)
rmse_prophet <- rmse(error_prophet)
rmse_prophet_log <- rmse(error_prophet_log)
rmse_red_neuronal <- rmse(error_red_neuronal)

# MAE
mae_log <- mae(error_log)
mae_prophet <- mae(error_prophet)
mae_prophet_log <- mae(error_prophet_log)
mae_red_neuronal <- mae(error_red_neuronal)

# Creando un dataframe con los resultados
metricas <- data.frame(
  Modelo = c("Log", "Prophet", "Prophet Log", "Red Neuronal"),
  RMSE = c(rmse_log, rmse_prophet, rmse_prophet_log, rmse_red_neuronal),
  MAE = c(mae_log, mae_prophet, mae_prophet_log, mae_red_neuronal)
)

metricas
##         Modelo      RMSE       MAE
## 1          Log 1685.1039 1682.3991
## 2      Prophet  629.9770  604.5810
## 3  Prophet Log  763.0617  738.1842
## 4 Red Neuronal  192.1020  170.0808

Conclusiones y Próximos Pasos:

  1. Observamos que la predicción realizada mediante el modelo de red neuronal, empleando el método de Elman de errores iterativos, se alinea estrechamente con los datos reales en varios puntos clave.

  2. Es esencial investigar más a fondo la configuración de los hiperparámetros del modelo con el objetivo de mejorar aún más la precisión de las predicciones.

  3. La capacidad predictiva a largo plazo presenta desafíos; parece que predecir más allá de 15 días podría no ser fiable. Por lo tanto, es crucial reconsiderar y ajustar la distribución de los datos de entrenamiento y test.

  4. Con miras a la optimización del modelo, sería beneficioso explorar y comparar con otros métodos, como el método de Jordan, para evaluar su eficacia en este contexto.