Es un atleta colombiano nacido en Bogotá, destacado en pruebas de fondo. Sus principales carreras han sido en 10000 metros planos, 10 kilómetros en ruta, media maratón y últimamente enfocándose en la maratón. Ha venido escalando a nivel internacional representado a Colombia, su última gran aparición fue en los juegos olímpicos de verano de 2020. Cada 2 años se nota que el atleta busca subir la carga de sus entrenamientos y esto se debe a que desea buscar las marcas mínimas para poder participar a Juegos Panamericanos y Olímpicos.
Su ultima carrera fue en Sevilla el 18 de febrero de 2024 en la distancia de maratón, donde buscaba bajar de 2:08:10 y tener un cupo para la maratón de los juegos olímpicos. Sin embargo, tuvo que retirarse y buscara en otra ocasión ese cupo.
Durante su preparación para las carreras, corre diariamente cierta cantidad de kilómetros y diferentes entrenamientos medidos por pruebas de lactatos. Los resultados fueron extraídos de STRAVA, el cual es una app que se conecta a través de garmin connect que es quien toma los datos del reloj y/o pulsometro. De aquí se miden los kms, watts, pace, etc.
Esta serie de tiempo consiste en los kms acumulados en 7 dias del atleta Iván Darío González González ,es decir cada semana, empezando la semana 1 el 31 de diciembre del 2018 y terminando el 12 de febrero de 2024 (269 datos).
## Time Series:
## Start = 2018.98083556918
## End = 2019.07665772327
## Frequency = 52.18
## [1] 2018.981 2019.000 2019.019 2019.038 2019.057 2019.077
Se evidencia por medio del anterior gráfico que la serie a simple vista NO pareciera que presente tendencia y varianza marginal. Tampoco pareciera ser muy necesaria estabilizar varianza por medio de la transformación de Box-cox, sin embargo, veamos:
## [1] -3
## [1] -5
Como bien se sospechaba, al ser el valor de \(\lambda=0.95\) ,muy cercano a 1 se puede decir que no es necesaria la transformación mencionada.
Conforme al gráfico descriptivo anterior, se puede observar que la serie no parece tener una tendencia lineal creciente tan clara, es decir, sin embargo procederemos a modelarla como sigue:
\[\mu_t=\beta_0 + \beta_1 t \] Procedemos a estimar los parámetros de la tendencia determinista, con la cual obtenemos:
##
## Call:
## lm(formula = ivan ~ time(ivan), na.action = NULL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -132.340 -32.164 6.263 39.507 141.374
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11038.950 4060.776 -2.718 0.00699 **
## time(ivan) 5.524 2.009 2.750 0.00637 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 48.76 on 266 degrees of freedom
## Multiple R-squared: 0.02764, Adjusted R-squared: 0.02398
## F-statistic: 7.561 on 1 and 266 DF, p-value: 0.006373
Así, \(\beta_0=-11000.586\) y \(\beta_1=5.504\) ambos significativos.
Eliminamos la tendencia con la predicción de la recta resultando la serie de la siguiente forma:
Veamos cómo se comporta la autocorrelación en el gráfico de autocorrelación simple antes y después de quitar la tendencia.
Muestra una correlacion en un rezago de 1 y ademas parece tener un patrón es decir tal vez tenga un ciclo.
El promedio móvil es un método útil para descubrir ciertos rasgos en una serie de tiempo, como tendencias a largo plazo y componentes estacionales.En particular, si \(x_t\) representa las observaciones, entonces una forma de estimar la tendencia de la serie es:
\[m_t=\sum_{i=-k}^{k}a_jx_{t-j}\] Con \(a_j \geq 0\), \(\sum_{i=-k}^{k}a_j=1\).
Por medio de la función decompose se descompone una serie de tiempo en componentes estacionales, de tendencia e irregulares utilizando promedios móviles. Se ocupa del componente estacional aditivo o multiplicativo.
Seguiremos explorando otras formas dado que aunque decompose nos da idea del comportamiento de la tendencia y el componente estacional no resulta ser del todo confiable.
Se procede primero a realizar un ajuste de un modelo de la tendencia aplicando regresión LOESS utilizando un ajuste local cuadrático a nuestra serie.
## 'data.frame': 268 obs. of 2 variables:
## $ Fecha: Date, format: "2018-12-31" "2019-01-07" ...
## $ datos: num 17.3 86.4 107.3 163.1 153.5 ...
## # A tibble: 268 × 3
## Fecha datos datos_ajus
## <date> <dbl> <dbl>
## 1 2018-12-31 17.3 113.
## 2 2019-01-07 86.4 113.
## 3 2019-01-14 107. 113.
## 4 2019-01-21 163. 113.
## 5 2019-01-28 154. 113.
## 6 2019-02-04 131 113.
## 7 2019-02-11 146. 113.
## 8 2019-02-18 176. 113.
## 9 2019-02-25 99.2 113.
## 10 2019-03-04 170. 113.
## # ℹ 258 more rows
Nos dice que hay un poco de tendencia y esta es creciente arriba.
## tbl_ts [268 × 2] (S3: tbl_ts/tbl_df/tbl/data.frame)
## $ Fecha: Date[1:268], format: "2018-12-31" "2019-01-07" ...
## $ datos: num [1:268] 17.3 86.4 107.3 163.1 153.5 ...
## - attr(*, "key")= tibble [1 × 1] (S3: tbl_df/tbl/data.frame)
## ..$ .rows: list<int> [1:1]
## .. ..$ : int [1:268] 1 2 3 4 5 6 7 8 9 10 ...
## .. ..@ ptype: int(0)
## - attr(*, "index")= chr "Fecha"
## ..- attr(*, "ordered")= logi TRUE
## - attr(*, "index2")= chr "Fecha"
## - attr(*, "interval")= interval [1:1] 7D
## ..@ .regular: logi TRUE
En la cual se evidencia un mejor ajuste a la tendencia que presenta la serie.
La diferenciación ordinaria de orden 1 elimina una tendencia lineal la cual se identificó al inicio.
Se observa que no es necesario diferenciar nuevamente por lo que ya no se muestra una tendencia en la serie, conforme a la figura presentada.
Se puede observar que hay una ligera tendencia y que con diferenciación se logra remover bastante bien.
Índice AMI (average mutual information): ayuda a cuantificar la cantidad de conocimiento obtenido sobre el valor de \(X_{t+d}\) al observar \(X_t\). Equivalentemente, el AMI es una medida de qué tanto el conocimiento de \(X\) reduce la incertidumbre acerca de \(Y\).
## $time.lag
## [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
## [26] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
## [51] 50 51 52
##
## $mutual.information
## [1] 2.08049544 0.18637757 0.04883233 0.08883336 0.05287532 0.06146781
## [7] 0.06327098 0.07235017 0.07337034 0.04537722 0.11765413 0.08458638
## [13] 0.06468029 0.08963434 0.07644598 0.04707373 0.04932059 0.05393744
## [19] 0.07886689 0.08635156 0.08062092 0.07815911 0.06431285 0.07589076
## [25] 0.05613649 0.06507543 0.07304325 0.09291690 0.02874878 0.04072128
## [31] 0.03745030 0.07828308 0.06256930 0.11698211 0.01744561 0.06891602
## [37] 0.05794747 0.08257354 0.07686856 0.07905979 0.06658347 0.01151891
## [43] 0.05316289 0.02155420 0.05090962 0.02078122 0.01803718 0.02068842
## [49] 0.02584216 0.07970100 0.03376378 0.04747632 0.04362813
##
## $units
## [1] "Bits"
##
## $n.partitions
## [1] 6
##
## attr(,"class")
## [1] "mutualInf"
Nos podría indicar un patrón estacional de periodo 19, lo cual se explorará con más detalle en el análisis siguiente.
El periodo estacional, \(s\), se define como número de observaciones que forman el ciclo estacional.
Note que hay semanas donde muchas subseries están centradas alrededor de valores diferentes usando el objeto ts.
El gráfico de cajas confirma la presencia de un ciclo estacional.
El periodograma puede verse como una herramienta para la detección de posibles ciclos(ocultos) deterministas en una serie temporal.
Del estudio de la estacionalidad de la serie de tiempo, se pudo ver que ésta componente es cíclica, la cual puede representarse por ejemplo mediante funciones periódicas.
## [1] "El valor de la frecuencia donde se mC!ximiza el periodograma para la serie es: 0.485185185185185"
## [1] "El periodo correspondiente es aproximadamente: 2.06106870229008"
El periodograma no parece ser informativo en cuanto al periodo de la serie. Pues no es muy claro al respecto. Se podría pensar en múltiples patrones estacionales.
Vamos a empezar el análisis estacionalidad ilustrando el número de kilómetros promedio que recorrió Ivan cada semana para un periódo comprendido desde el 31 de Diciembre de 2018 hasta el 12 de Febrero de 2024.
Podemos observar que el valor medio de los kilometros recorridos es diferente en cada semana, lo que nos indicaría presencia de estacionalidad por semana.
Ahora hagamos la exploración por mes
## # A tibble: 12 × 3
## month mean sd
## <fct> <dbl> <dbl>
## 1 Jan 157. 47.2
## 2 Feb 130. 36.1
## 3 Mar 130. 37.2
## 4 Apr 95.7 44.4
## 5 May 123. 41.7
## 6 Jun 139. 52.0
## 7 Jul 117. 57.0
## 8 Aug 132. 57.8
## 9 Sep 126. 49.6
## 10 Oct 114. 48.3
## 11 Nov 136. 35.6
## 12 Dec 116. 60.7
Cabe anotar que se define el periodo en \(s=52\) dado que cada 52 semanas se vuelve a presentar el mismo valor medio.
La idea en estos casos es introducir \(51(s − 1)\) variables impulso o dummy \(I^{(j)}_t\) que tomen 1 en una semana y cero en el resto.
## # A tibble: 4 × 8
## .model sigma2 log_lik AIC AICc BIC ar_roots ma_roots
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <list> <list>
## 1 Fourier1/2Ivandiff 2603. -1429. 2862. 2862. 2869. <cpl [1]> <cpl [0]>
## 2 Fourier1/4Ivandiff 3068. -1451. 2904. 2904. 2908. <cpl [0]> <cpl [0]>
## 3 Fourier0Ivandiff 3068. -1451. 2904. 2904. 2908. <cpl [0]> <cpl [0]>
## 4 DummyIvandiff 2814. -1411. 2927. 2953. 3114. <cpl [0]> <cpl [0]>
## # A tibble: 1 × 6
## .model term estimate std.error statistic p.value
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Fourier1/2Ivandiff ar1 -0.393 0.0563 -6.98 2.33e-11
Conforme a los criterios de información se puede decir que el modelo de Fourior 1/2 el cual corresponde a un modeelo de la forma: \(Z_t = \mu + A \sin(\omega_t) + B \cos(\omega_t) + a_t\). Con \(\omega=2\pi/52=\pi/26\). es que el mejor se ajusta al componente estacional de la serie.