Действительно хороший способ найти периодичность в любой регулярной серии данных - это проверить спектр ее мощности после устранения любой общей тенденции . (Это хорошо подходит для автоматического скрининга, когда общая мощность нормализуется до стандартного значения, такого как единица.) Предварительное удаление тренда (и необязательное различие для удаления последовательной корреляции) необходимо, чтобы избежать смешивания периодов с другими видами поведения.
Спектр мощности представляет собой дискретное преобразование Фурье функции автоковариации соответственно сглаженной версии исходного ряда. Если вы думаете о временных рядах как о выборке физической формы волны, вы можете оценить, какая часть полной мощности волны передается на каждой частоте. Спектр мощности (или периодограмма ) показывает зависимость мощности от частоты. Циклические (то есть повторяющиеся или сезонные модели) будут отображаться в виде больших пиков, расположенных на своих частотах.
В качестве примера рассмотрим этот (смоделированный) временной ряд остатков от ежедневного измерения, проведенного за один год (365 значений).
0
Вот еще один график с теми же данными, нарисованный, чтобы помочь нам увидеть возможные периодические модели.
Если вы выглядите очень усердно, вы можете различить шумный, но повторяющийся паттерн, который встречается 11-12 раз. Длинные последовательности значений выше нуля и ниже нуля, по крайней мере, предполагают некоторую положительную автокорреляцию, показывая, что этот ряд не является полностью случайным.
Вот периодограмма, показанная для частот до 91 (одна четверть общей длины серии). Он был построен с окном Уэлча и нормирован на единицу площади (для всей периодограммы, а не только для части, показанной здесь).
Мощность выглядит как «белый шум» (небольшие случайные колебания) плюс два заметных пика. Их трудно пропустить, не так ли? Большее происходит в период 12, а меньшее - в 52. Таким образом, этот метод обнаружил в этих данных месячный цикл и недельный цикл. Это действительно все, что нужно сделать. Чтобы автоматизировать обнаружение циклов («сезонность»), просто отсканируйте периодограмму (которая представляет собой список значений) для относительно больших локальных максимумов.
Пришло время раскрыть, как эти данные были созданы.
Значения генерируются из суммы двух синусоидальных волн, одна с частотой 12 (квадрат амплитуды 3/4) и другая с частотой 52 (квадрат амплитуды 1/4). Это то, что обнаружены пики на периодограмме. Их сумма показана в виде толстой черной кривой. Iid Затем был добавлен нормальный дисперсионный шум 2, как показано светло-серыми полосами, простирающимися от черной кривой до красных точек. Этот шум привел низкоуровневые покачивания внизу периодограммы, которые в противном случае были бы просто равны 0. Полностью две трети общего изменения значений непериодичны и случайны, что очень шумно: поэтому так сложно разглядеть периодичность, просто посмотрев на точки. Тем не менее (отчасти потому, что данных так много) найти частоты с помощью периодограммы легко, и результат очевиден.
Инструкции и полезные советы по вычислению периодограмм появляются на сайте « Числовые рецепты» : ищите раздел «Оценка спектра мощности с использованием БПФ». R
имеет код для оценки периодограммы . Эти иллюстрации были созданы в Mathematica 8; периодограмма была вычислена с помощью функции «Фурье».