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:
- 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.
- 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.
Vistaso 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]]))
}## 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
## 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
## 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())##
## Augmented Dickey-Fuller Test
##
## data: eth_close_ts
## Dickey-Fuller = -1.689, Lag order = 10, p-value = 0.7099
## alternative hypothesis: stationary
##
## 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)Dickey Fuller del paquete tseries
##
## 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
##
## 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
Tranformacion 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
##
## 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
## [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. Transformacion 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
##
## 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
## [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-Ljung test
##
## data: et
## X-squared = 12.838, df = 7, p-value = 0.07616
##
## 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
##
## 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
## 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)4.Modelado con Prophet - Con LOG
## 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)5.Red Neuronal
tamano_total <- length(S)
tamano_train <- round(tamano_total * 0.75, digits = 0)
train <- 1:tamano_train
test <- (tamano_train+1):tamano_totallibrary(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$yRed De Elman
library(RSNNS)
set.seed(42)
fit <- elman(inputs[train,], outputs[train], size = c(10, 3), learnFuncParams = c(0.1), maxit = 2000)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:
Comparacion 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
)## 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:
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.
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.
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.
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.