13 votos

Detectar la tendencia creciente/decreciente de series temporales en R.

Tengo muchas series temporales con periodos: día, semana o mes. Con la función stl() o con loess(x ~ y) puedo ver cómo lucen las tendencias de las series temporales particulares. Necesito detectar si la tendencia de la serie temporal está aumentando o disminuyendo. ¿Cómo puedo manejar eso?

Intenté calcular los coeficientes de regresión lineal con lm(x ~ y) y jugar con el coeficiente de pendiente. (Si |pendiente|>2 y pendiente>0 entonces tendencia ascendente, en otro caso si |pendiente|>2 y pendiente<0 - decreciente). Tal vez hay otro método más efectivo para la detección de tendencias. ¡Gracias!

Por ejemplo: Tengo timeserie1, timeserie2. Necesito un algoritmo simple que me diga que timeserie2 es una serie creciente, y en timeserie1, la tendencia no está aumentando ni disminuyendo. ¿Qué criterios debo usar?

timeserie1:

1774 1706 1288 1276 2350 1821 1712 1654 1680 1451 1275 2140 1747 1749 1770 1797 1485 1299 2330 1822
1627 1847 1797 1452 1328 2363 1998 1864 2088 2084  594  884 1968 1858 1640 1823 1938 1490 1312 2312
1937 1617 1643 1468 1381 1276 2228 1756 1465 1716 1601 1340 1192 2231 1768 1623 1444 1575 1375 1267
2475 1630 1505 1810 1601 1123 1324 2245 1844 1613 1710 1546 1290 1366 2427 1783 1588 1505 1398 1226
1321 2299 1047 1735 1633 1508 1323 1317 2323 1826 1615 1750 1572 1273 1365 2373 2074 1809 1889 1521
1314 1512 2462 1836 1750 1808 1585 1387 1428 2176 1732 1752 1665 1425 1028 1194 2159 1840 1684 1711
1653 1360 1422 2328 1798 1723 1827 1499 1289 1476 2219 1824 1606 1627 1459 1324 1354 2150 1728 1743
1697 1511 1285 1426 2076 1792 1519 1478 1191 1122 1241 2105 1818 1599 1663 1319 1219 1452 2091 1771
1710 2000 1518 1479 1586 1848 2113 1648 1542 1220 1299 1452 2290 1944 1701 1709 1462 1312 1365 2326
1971 1709 1700 1687 1493 1523 2382 1938 1658 1713 1525 1413 1363 2349 1923 1726 1862 1686 1534 1280
2233 1733 1520 1537 1569 1367 1129 2024 1645 1510 1469 1533 1281 1212 2099 1769 1684 1842 1654 1369
1353 2415 1948 1841 1928 1790 1547 1465 2260 1895 1700 1838 1614 1528 1268 2192 1705 1494 1697 1588
1324 1193 2049 1672 1801 1487 1319 1289 1302 2316 1945 1771 2027 2053 1639 1372 2198 1692 1546 1809
1787 1360 1182 2157 1690 1494 1731 1633 1299 1291 2164 1667 1535 1822 1813 1510 1396 2308 2110 2128
2316 2249 1789 1886 2463 2257 2212 2608 2284 2034 1996 2686 2459 2340 2383 2507 2304 2740 1869  654
1068 1720 1904 1666 1877 2100  504 1482 1686 1707 1306 1417 2135 1787 1675 1934 1931 1456 1363 2027
1740 1544 1727 1620 1232 1199

timeserie2:

 122  155  124   97  155  134  115  122  162  115  102  163  135  120  139  160  126  122  169  154
 121  134  143  100  121  182  139  145  135  147   60   58  153  145  130  126  143  129   98  171
 145  107  133  115  113   96  175  128  106  117  124  107  114  172  143  111  104  132  110   80
 159  131  113  123  123  104  101  179  127  105  133  127  101   97  164  134  124   90  110  102
  90  186   79  145  130  115   79  104  191  137  114  131  109   95  119  173  158  137  128  119
 109  120  182  140  133  113  121  110  122  159

1 votos

Tu segundo ejemplo no tiene una tendencia, por lo que no deberías estar detectando una. En el período 230, los datos tienen un cambio de nivel (es decir, 0,0,0,0,0,1,1,1,1,1,1, etc.) que es diferente a una tendencia. Además, hay un cambio en la varianza alrededor de 200 que se puede identificar utilizando el test de Tsay. Ver más aquí www.unc.edu/~jbhill/tsay.pdf

2 votos

@Tom Sí, lo que dices es evidente en un gráfico de los datos. (De hecho, un gráfico muestra tres cambios abruptos de nivel separados, no solo uno). Sin embargo, caracterizar esto como diferente de una "tendencia" no hace justicia a tu análisis, el cual sé que revelará detalles sutiles en el comportamiento de esta serie temporal. Me gustaría sugerir que el O.P. estaría mejor servido por caracterizaciones claras del comportamiento de los datos en lugar de por discusiones sobre posibles definiciones de "tendencia". Ella pide una alternativa a probar una pendiente de mínimos cuadrados, y eso es una de facto indicación de lo que ella entiende por "tendencia".

10voto

Aksakal Puntos 11351

Puedes aplicar un filtro de desplazamiento de fase cero y eliminar todas las frecuencias superiores a un umbral determinado; esto te daría una "tendencia" de alguna manera.

Por ejemplo, mira esta pregunta, "¿Cómo ejecuto un filtro pasa alto o pasa bajo en puntos de datos en R?" Muestran cómo usar un filtro de paso bajo Butterworth. El problema con ese filtro es que no es de desplazamiento de fase cero, es decir, como ves, la fase del componente de baja frecuencia se desplaza en relación a la señal original. Es posible que desees encontrar un filtro que no desplace la fase. Si se tratara de datos económicos, te recomendaría el filtro de Christiano según "The Band Pass Filter" de Lawrence J. Christiano y Terry J. Fitzgerald (1999). Para datos físicos, debe haber una gran cantidad de filtros de desplazamiento de fase cero disponibles.

ACTUALIZACIÓN:

Aquí tienes un ejemplo de aplicación del filtro de paso banda bajo al LOG de la segunda serie temporal. El LOG es necesario para igualar la varianza.

ACTUALIZACIÓN2:

Aquí tienes una descomposición de muestra en el dominio de frecuencia con bandas de frecuencia: irregular [2-19], cíclica [20-99] y tendencia [100-$\infty$] (en longitudes de período). Las bandas de frecuencia deben elegirse cuidadosamente en función de la comprensión del fenómeno subyacente.

1 votos

Estuve reflexionando sobre esta respuesta durante un tiempo y finalmente me di cuenta de que debes estar usando la palabra "tendencia" de la misma manera en que muchos estadísticos usarían "suavizar". Entonces todo tiene sentido. Deberíamos esperar que la persona que realizó la publicación pronto aclare lo que quiere decir por "tendencia".

0 votos

Sí, estoy usando "tendencia" en el sentido de descomposición de series temporales: y = tendencia + cíclico + estacional + irregular, por ejemplo es.wikipedia.org/wiki/Descomposición_de_series_temporales la tendencia sería un componente de "frecuencia muy baja" en este contexto. qué tan bajo depende del problema

1 votos

No parece ser del todo así. Cuando filtras los componentes de alta frecuencia estás eliminando parte de lo "irregular" (interpretado como ruido) y tal vez una pequeña parte de la porción cíclica, pero la tendencia, los componentes cíclicos a medio y largo plazo y los componentes estacionales seguirán presentes.

5voto

Owen Fraser-Green Puntos 642

La detección de tendencias en una serie temporal puede hacerse de manera simple o más agresiva. Una serie puede tener valores que exhiben una tendencia, por ejemplo 1,2,3,4,5, y luego un cambio en la tendencia en uno o más puntos en el tiempo, por ejemplo 7,9,11,13,15,... Otro ejemplo es 1,1,1,1,1,2,3,4,5,6 donde no hay tendencia presente en las primeras 5 lecturas, y luego surge una tendencia. Una serie como 1,1,1,1,1,2,2,2,2,2 se dice que tiene un cambio de nivel (cambio en la intercepción). AUTOBOX es un software que de forma única (hasta donde yo sé) incorpora análisis para detectar, probar e incorporar tendencias temporales. Yo fui uno de los desarrolladores y extendí los análisis en esta área en particular. El procedimiento que estás intentando usar (incorrectamente en mi opinión) es presuntivo del modelo, es decir, sin impulsos, sin cambios de nivel, sin impulsos estacionales, sin estructura ARIMA, varianza de error constante, etc. Otro posible mal ejemplo de un modelo asumido es usar $[1-B]y(t)=\theta_0 +[MA/AR]a(t)$, ya que nuevamente, se está asumiendo una estructura particular.

La idea aquí es que el modelo ARIMA podría ser incorrecto o que $\theta_0$ esté cambiando (por lo tanto, diferentes tendencias) en diferentes puntos en el tiempo.

La idea completa es dejar que los datos "hablen" y que el análisis "escuche" y detecte el "modelo correcto" o al menos un "modelo útil".

Orson Bean - o tal vez fue alguien más - una vez dijo, "Una tendencia es una tendencia... hasta que se dobla, y cuando la tendencia se dobla, la tendencia ha terminado". Las tendencias locales en series temporales requieren la identificación de los puntos de quiebre y luego la estimación de la tendencia local. Algunos materiales/referencias útiles se pueden encontrar en http://www.autobox.com/OLDWEB/udontsay.html

Si deseas publicar algunos datos, por favor hazlo, y te enviaré algún resultado de vuelta.

3 votos

Una tendencia es una tendencia es una tendencia pero la pregunta es, ¿se doblará? ¿Cambiará su curso a través de alguna fuerza imprevista y llegará a un final prematuro? Alexander Cairncross

0 votos

Gracias por la respuesta. Estudiaré tu información. También he publicado algunos datos.

0 votos

De hecho, no puedo usar otro software. Debo hacerlo con R. Así que necesito un algoritmo simple, que indique verdadero/falso. Verdadero si en la serie temporal hay una tendencia creciente/decreciente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X