Почему функция STL дает значительные сезонные колебания со случайными данными

11

Я составил следующий код с функцией stl (Сезонная декомпозиция временных рядов по Лесс):

plot(stl(ts(rnorm(144), frequency=12), s.window="periodic"))

Это показывает значительное сезонное изменение со случайными данными, помещенными в коде выше (функция rnorm). Изменения в значимости видны каждый раз, когда это выполняется, хотя картина иная. Два таких шаблона показаны ниже:

введите описание изображения здесь

введите описание изображения здесь

Как мы можем положиться на функцию STL на некоторых данных, когда она показывает сезонные колебания. Нужно ли рассматривать это сезонное изменение с учетом некоторых других параметров? Спасибо за ваше понимание.

Код был взят с этой страницы: Является ли этот метод подходящим для проверки сезонных эффектов в данных о количестве самоубийств?

rnso
источник
1
Это происходит потому, что в случайных данных есть «шаблоны», если у вашей методики подбора достаточно параметров.
bill_080
3
Термин «значимый» здесь, по-видимому, не отражает какого-либо рода проверки значимости.
Ник Кокс
1
Stl - это непараметрический метод, основанный на данных, поэтому нет способа количественно оценить отсутствие сезонных неопределенностей с помощью проверки значимости.
синоптик

Ответы:

12

Разложение Лёсса предназначено для сглаживания ряда, применяя к данным средние значения, так что оно разбивается на составляющие, например, трендовые или сезонные, которые представляют интерес для анализа данных. Но эта методология не предназначена для проведения формальной проверки на наличие сезонности .

Хотя в вашем примере stlвозвращается сглаженный шаблон сезонной периодичности, этот шаблон не имеет отношения к объяснению динамики ряда. Чтобы увидеть это, мы можем сравнить дисперсию каждого компонента с дисперсией исходного ряда.

set.seed(123)
x <- ts(rnorm(144, sd=1), frequency=12)
a <- stl(x, s.window="periodic")
apply(a$time.series, 2, var) / var(x)
#   seasonal      trend  remainder 
# 0.07080362 0.07487838 0.81647852 

Мы можем видеть, что именно остаток объясняет большую часть дисперсии в данных (как и следовало ожидать для процесса белого шума).

Если мы возьмем ряд с сезонностью, то относительная дисперсия сезонного компонента будет гораздо более актуальной (хотя у нас нет простого способа проверить это, так как лесс не параметрический).

y <- diff(log(AirPassengers))
b <- stl(y, s.window="periodic")
apply(b$time.series, 2, var) / var(y)
#    seasonal       trend   remainder 
# 0.875463620 0.001959407 0.117832537 

Относительные отклонения указывают на то, что сезонность является основным компонентом, объясняющим динамику ряда.


Неосторожный взгляд на сюжет stlможет быть обманчивым. Хороший шаблон, возвращаемый функцией, stlможет заставить нас подумать, что в данных может быть выявлена ​​соответствующая сезонная модель, но при ближайшем рассмотрении можно обнаружить, что на самом деле это не так. Если цель состоит в том, чтобы принять решение о наличии сезонности, разложение лесса может быть полезным в качестве предварительного взгляда, но оно должно быть дополнено другими инструментами.

javlacalle
источник
В вашем примере с AirPassengers нет тенденции к выходу, тогда как на графике есть четкая тенденция (AirPassengers). Тенденция доходит до 0,86 (с сезонным значением только 0,1), если оператор «diff (log (AirPassengers)))» удален. Что нужно сделать?
рпсо
Я привел пример, который численно понятен. На практике простого сравнения дисперсий сглаженных компонентов может быть недостаточно, чтобы прийти к выводу о наличии сезонности. Например, как вы обнаружили в этом случае, если тренд не удаляется путем взятия различий, дисперсия тренда доминирует над дисперсией сезонного компонента. Вопрос в том, достаточно ли велика относительная дисперсия 0,1, чтобы считать этот компонент актуальным? Проблема в том, что, основываясь на лессе, не существует простого способа проверить, является ли дисперсия компонента существенной.
Javlacalle
Как я уже сказал, в этом и других случаях нам следует использовать другие методы для проверки наличия сезонности. Смотрите, например, вторую часть моего ответа здесь . Как только мы пришли к выводу, что в данных присутствует сезонность, мы можем использовать лесс для получения структуры этого компонента.
Javlacalle
Просто для большей ясности, как относительная дисперсия показывает, какую роль играет разложение в общих данных? IE 70% сезонный, 20% тренд. и т. д.
Тед Мосби
1
@TedMosby Дисперсия - это показатель изменчивости / дисперсии в данных. Сумма дисперсий компонентов (например, тренд, сезонность) и дисперсия остатка складываются в дисперсию исходного ряда. Таким образом, сравнивая дисперсию компонента с дисперсией исходного ряда, мы можем получить представление о том, насколько релевантен компонент (т. Е. Насколько изменчивость данных объясняется компонентом).
javlacalle
2

В том же духе я видел использование моделей Фурье для несезонных данных, принуждая сезонную структуру к подгонке и прогнозируемым значениям, вызывая аналогичный (удушье!) Результат. Подход предполагаемой модели дает пользователю то, что он навязывает / предполагает, что не всегда то, что хорошая аналитика предложила бы / предоставила.

IrishStat
источник
1
stl()не основано на идеях Фурье. Хотя я еще не видел никого, кто бы защищал «бессмысленный» анализ, заметьте, что любая подходящая модель семьи может рассматриваться как навязанная или предполагаемая. Вопрос состоит в том, насколько далеко любая процедура дает пользователям возможность понять, работает ли она и как она работает для определенного набора данных.
Ник Кокс
@NickCox совершенно верно ....
IrishStat