Перейти к содержанию

522 гр., по выбору. Статистический анализ временных рядов

Место и время проведения: ?
Преподаватель: Голяндина Нина Эдуардовна


“Those who have the knowledge, don’t predict. Those who predict, don’t have knowledge.” – Lao Tzu, 6th Century BC Chinese philosopher
Вот спрашивают - а с чего это китайская цитата на английском. А нет ответа.


Примерное не совсем полное содержание семинара содержится в теоретических вопросах прошлых лет здесь

Вопросы к зачету 2025.


Задания нужно делать заранее в R (RMarkdown); приходите на занятия с ноутбуком. Выступления на занятиях по сделанным заданиям являются необходимым условием для зачета. Нужно показывать численные результаты, код и объяснять теорию. Мы будем обсуждать сделанное.
Обращаю внимание, что каждый раз нужно перерабатывать свою работу на основе (1) обсуждения показов заданий на предыдущих парах и (2) на новом материале. Для структурирования работы можно использовать приведенные выше теоретические вопросы, так как работа должна поддерживать с практической точки зрения почти все из них.

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

Полезный ресурс по временным рядам в R - http://r-statistics.co/Time-Series-Analysis-With-R.html

Некоторые материалы лекций см. здесь

Конспект лекций по SSA за 2010 год(обозначения старые).

Электронная книга R.Hyndman Forecasting: Principles and Practice (включая экспоненциальное сглаживание и ARIMA)


К зачету

TBA

Семинары 2026

19.05.2026 - Seasonal ARIMA. Экспоненциальные сглаживания (ETS) - ссылка на книгу Hyndman выше, 2D-SSA. Задание на 26.05.2025: (1) Постройте на основе модели auto.arima прогноз своего реального ряда с предсказательным интервалом. Используйте параметры trace, stepwise. Сравните с прогнозом по SSA (на отрезанном периоде) по точности MSE. Для обоих методов рисуйте прогноз вместе с доверительными интервалами. Код подсматривайте здесь https://ssa-with-r-book.github.io/03-chapter3.html. (2) Добавить к прогнозам то же самое по экспоненциальному сглаживанию (модель подбирает функция ets). (3) Взять какое-то изображение и сделать с ним что-нибудь (не?)осмысленное с помощью 2D-SSA.

05.05.2026 - обсуждали ARIMA и MSSA. Задание на 12.05.2026: (1) Определение модели авторегрессии для модельных данных модельные ряды (возьмите пару вариантов, варианты (1,5), (2,6), (3,7), (4,8), (9,10), (12,13), (10,15), (11,14)), построение прогноза с доверительными интервалами. Для определения модели используйте ACF, PACF, для оценивания параметров arima или лучше Arima (пакет forecast https://otexts.com/fpp2/arima-r.html, там же прогноз), потом еще автоматический подбор модели по AIC auto.arima. (Тест на единичный корень называется Dickey–Fuller test for unit roots.) Если ряд надо дифференцировать, то перед построением acf и pacf используйте diff. (2) Постройте на основе модели auto.arima прогноз своего реального ряда с предсказательным интервалом. Используйте параметры trace, stepwise. (3) Рассмотрите два модельных ряда и на основе соответствия корней характеристических полиномов сигналов и размера шума предугадайте, что точнее, прогноз по SSA или MSSA, и проверьте моделированием. (4) по-моему, не показывали еще то, как на основе оцененных сигнальных корней предсказать поведение долгосрочного прогноза.

28.04.2026 - обсуждали доверительные/предсказательные интервалы для SSA прогноза и заполнение пропусков, а также AR. Задание на 05.05.2026: (1) Построить бутстреп-доверительные/предсказательные интервалы (vforecast, forecast), сравнить разные виды SSA прогноза, разный выбор параметров… (2) сделать в своем ряде искусственную «дырку» и заполнить ее gapfill и igapfill, сравнить по величине ошибки (3) смоделировать искусственные ряды и сравнить среднюю ошибку gapfill и igapfill, если группа пропусков в середине, и если в конце (прогноз). (4) погенерируйте процессы AR(p) (arima.sim) и попробуйте оценить порядок с помощью ACF-PACF; посмотрите, насколько адекватно оцениваются коэффициенты. Для оценивания параметров для модели заданного порядка используйте arima или лучше Arima (пакет forecast https://otexts.com/fpp2/arima-r.html, там же прогноз). Посмотрите, как выглядит прогноз с доверительными интервалами.

21.04.2026 - Задание на 28.04.2026 (1) Улучшить разделимость с помощью eossa, функция eossa_new. (2) сделать SSA прогноз улучшенного разложения (rforecast, vforecast) отдельно сигнала, тренда и сезонности. По корням прогнозирующей ЛРФ посмотрите, как будет вести себя долгосрочный прогноз, проверьте, построив его. Делайте анализ ряда, предварительно отрезав для сравнения 1-2 периода с конца ряда. Можно укоротить ряд до улучшения разделимости, чтобы два раза не делать разный SSA.

14.04.2026 - Задание на 21.04.2026 (0) долги за прошлое занятие (1) Примените итерации Cadzow для модельного ряда и для своего ряда (2) Нужно пройти от ряда к явному виду сигнала, добавив к модельным сигналам шум. Разница в следующем: большая длина окна, выбор компонент, относящихся к сигналу, неминимальная (но min-norm) ЛРФ, нахождение сигнальных корней по ESPRIT (parestimate), превращение близких корней в кратный корень усреднением, оценка коэффициентов перед слагаемыми по lm по всему ряду. (3) сделайте вариант с прошлого раза в отсутствии шума с малым r после применения итераций Cadzow. (4) Попробуйте найти явный вид сигнала для своего реального ряда. (5) Проверьте, что метод, который собирает корни не меньше 1 по модулю, для ряда и перевернутого (inverse) ряда, работает (проверить просто визуально по plot, который, примененный к lrr (и/или roots), рисует корни на круге.) Помогут фрагменты 3.1.1, 3.1.2, 3.5.9-3.5.11 https://ssa-with-r-book.github.io/02-chapter2-part2.html

07.04.2026 - Задание на 14.04.2026 (1) посмотреть, как SSA с проекциями выделяет полиномиальный тренд, сравнить с полиномиальной регрессией. Взять линейный тренд и какой-нибудь полиномом большей степени (используйте двух этапное выделение тренда - сначала SSA с проекциями, а потом полиномиальная регрессия к результату). https://ssa-with-r-book.github.io/02-chapter2-part2.html#fragment-287-hotel-ssa-with-projection-linear-trend-detection (2) Сгенерировать ряды конечного ранга с разными наборами корней характеристического полинома, включая кратные (без шума). Потом подать ряд на вход, построить линейную рекуррентную формулу (L = r+1 и (r+1)-й собственный вектор), найти корни ее х.п. (lrr, roots (корни полинома по lrr)), по ним построить регрессоры и найти коэффициенты C_{mj}, решая линейную систему (а можно и по lm). Проверить, что полученная явная формула ряда действительно описывает исходный ряд.

31.03.2026 - про Toeplitz SSA. Д.з. Задание на 07.04.2026 (1) Применить Toeplitz SSA на модельных примерах, когда он лучше Basic, когда хуже (2) Найти огибающую модулированной гармоники и оценить поведение дисперсии шума с помощью выделения тренда (было 24.03).

24.03.2026 - про разные способы выделения тренда. Д.з. Задание на 31.03.2026 (1) попробовать выделить тренд с помощью автоматической группировки в SSA. (2) улучшить разделимость с помощью fossa (DerivSSA) https://ssa-with-r-book.github.io/02-chapter2-part2.html#fragment-286-us-unemployment-improvement-by-derivssa.и iossa, после этого еще раз построить разложение, вручную и с автогруппировкой. (3) построить разложения с помощью classical seasonal desomposition и stl. Для всех разложений не забывайте рисовать тренд на фоне ряда и строить периодограмму остатка.

17.03.2026 - про разные способы выделения тренда. Д.з. Задание на 24.03.2026 (1) построить еще тренды полиномиальные, с помощью loess и HP фильтра (там в случае отсутствия периодичности эмпирически подходящая lambda = 100. Частота в квадрате от второй производной, умноженная на lambda, примерно равна 100. Поэтому для периода 12 получаем lambda = 14400). Все тренды, включая сглаживание и SSA-тренды, должны с помощью регулировки параметров давать похожие тренды; (2) Для loess проверить устойчивость к выбросам в варианте с итерациями; (3) посмотреть, как работает box-cox transformation.

10.03.2026 - про асимптотическую разделимость, матрица w-корреляций. Д.з. Задание на 17.03.2026 1) доделать задание с прошлого раза, если что-то было не доделано и 2) посмотреть на SSA разложение как на линейные фильтры (импульсная характеристика фильтра, порождаемого собственным векторов, имеет вид (3.26)) - посмотрите на АЧХ фильтров, используемых для восстановления тренда, периодики для фильтра средних точек. 3) посмотреть, как работает последовательный SSA - сначала с маленькой длиной окна выделяется тренд, потом из остатка с большой длиной окна выделяется периодика.

03.03.2026 - про асимптотическую разделимость, матрица w-корреляций. Д.з. Задание на 10.03.2026 1) проверить асимптотическую отделимость, увеличивая длину ряда и выводя ошибку MSE восстановления (если добавляется шум, то нужно усреднять по 100-1000 реализациям). (2) Построить разложение по SSA реального ряда на тренд, сезонность и шум. Тренд рисовать на фоне исходного ряда. Построить периодограмму остатка, чтобы убедиться, что сигнал выделен полностью.

24.02.2026 - про фильтры, АЧХ. Д.з. Задание на 03.03.2026: (1) разобраться с фильтрами, их АЧХ, и применить к модельным и реальным данным (для реальных данных попробовать выделить тренд скользящим средним). В том числе, построить периодограмму до применения фильтра и после. Код для АЧХ см. http://statmod.ru/wiki/study:spring2019:ts_pract за 1 марта (поменяйте неправильные символы типа стрелочек и кавычек на текстовые варианты или попросите ChatGPT/deepseek написать вам код на R для АЧХ). (2) сгенерировать белый и с помощью скользящего среднего, примененного к периодограмме, оценить спектральную плотность.
(3) (по SSA) воспользоваться пакетом Rssa: проверить теорию SSA по разделимости на модельных рядах - посмотреть, какой ранг у экспонент, полиномов, косинусов и их произведений (пользуйтесь svd.method = “svd” в функции ssa; если s <- ssa(…), то доступ к сингулярным числам svd разложения идет через s\$sigma); построить примеры, когда есть/нет точная разделимость, есть/нет разделимость по вкладу. Посмотреть, как выглядят собственные векторы, по ним сделать группировку и найти слагаемые ряда. Применить к вашему реальному ряду. Примеры кода см. https://ssa-with-r-book.github.io/01-chapter2-part1.html (фрагменты 2.1.1-2.1.3). Нарисовать на одном графике тренды, которые выделены скользящим средним и SSA для реального ряда.

17.02.2026 - о типах рядов и их структуре. Периодограммы. Задание на 24.02.2026: 1) на примере синуса показать эффект (не)растекания в периодограммах (taper=0), 2) сгенерировать белый шум и построить его периодограммы. (в 1) и 2) показать, как меняются периодограммы при увеличении длины ряда; научиться строить периодограммы без лог-шкалы по оси Y, использовать demean, detrend), 3) найти реальный временной ряд, состоящий из тренда, периодичности и шума, построить периодограмму и объяснить ее.
Функции для периодограммы - spec.pgram (без сглаживания), periodogram. Напоминаю про тип данных ts с параметром frequency.
Вот тут пример, но разложение делать не надо https://habr.com/ru/articles/505738/, только ДО него.

Семинары 2025

20.05.2025 - Экспоненциальные сглаживания (ETS), ссылка на книгу Hyndman выше. MSSA. 2D-SSA. Последнее задание на 27.05.2025: (1) Добавить к прогнозам с дов. интервалами и их ошибками по SSA и ARIMA то же самое по экспоненциальному сглаживанию (модель подбирает функция ets). (2) Генерировать систему временных рядов сколько-то (много) раз и проверить, что в случае согласованных сигналов точность MSSA выше точности SSA (в среднем). Посмотреть, как от уровня шума во втором ряде зависит, является ли он поддерживающим. (3) Взять какое-то изображение и сделать с ним что-нибудь (не?)осмысленное с помощью 2D-SSA.

13.05.2025 - Seasonal ARIMA. обнаружение разладки. Задание на 20.05.2025: (1) Постройте на основе модели auto.arima прогноз своего реального ряда с предсказательным интервалом. Используйте параметры trace, stepwise. Сравните с прогнозом по SSA (на отрезанном периоде) по точности. Для обоих методов рисуйте прогноз вместе с доверительными интервалами. Код подсматривайте здесь https://ssa-with-r-book.github.io/03-chapter3.html. (2) сгенерировать ряды с разладками разного типа, построить матрицу неоднородностей (hmatr), из нее взять строковую и диагональную функции разладки и нарисовать, синхронизировав с рядом. Объяснить. (3) Сделать то же самое для реального ряда - там все будет неочевидно, но просто посмотреть.

06.05.2025 - ARIMA. Задание на 13.05.2025: 0) погенерируйте процессы ARIMA и попробуйте оценить порядок с помощью ACF-PACF, а также auto.arima, посмотрите, насколько адекватно оцениваются коэффициенты. (1) Определение модели авторегрессии для модельных данных модельные ряды (возьмите пару примеров, варианты (1,5), (2,6), (3,7), (4,8), (9,10), (12,13), (10,15), (11,14)), построение прогноза с доверительными интервалами. Для определения модели используйте ACF, PACF, для оценивания параметров arima или лучше Arima (пакет forecast https://otexts.com/fpp2/arima-r.html, там же прогноз), потом еще автоматический подбор модели по AIC auto.arima. (Тест на единичный корень называется Dickey–Fuller test for unit roots.) Если ряд надо дифференцировать, то перед построением acf и pacf используйте diff. (2) Постройте на основе модели auto.arima прогноз своего реального ряда с предсказательным интервалом. Используйте параметры trace, stepwise.

29.04.2025 - обсуждали доверительные/предсказательные интервалы для SSA прогноза и заполнение пропусков. Задание на 06.05.2025: (1) Построить бутстреп-доверительные/предсказательные интервалы (vforecast, forecast), сравнить разные виды SSA прогноза, разный выбор параметров… (2) сделать в своем ряде искусственную “дырку” и заполнить ее gapfill и igapfill, сравнить (3)смоделировать искусственные ряды и сравнить среднюю ошибку gapfill и igapfill, если группа пропусков в середине, и если в конце (прогноз).

22.04.2025 - обсуждали сезонные разложения и SSA прогноз. Задание на 29.04.2025: (1) сделать разложение ряда методами SSA (с улучшением разделимости), classical seasonal decomposition (decompose), STL (stl). В каждом случае рисовать тренд на фоне ряда и проверять остаток на белый шум (периодограмма и ACF). (2) сделать SSA прогноз (rforecast, vforecast) отдельно сигнала, тренда и сезонности. По корням прогнозирующей ЛРФ посмотрите, как будет вести себя долгосрочный прогноз, проверьте, построив его. Делайте анализ ряда, предварительно отрезав для сравнения 1-2 периода с конца ряда. Можно укоротить ряд до пункта (1), чтобы два раза не делать разный SSA.

08.04.2025 - Обсудили ESPRIT и eossa Задание на 15.04.2024 Улучшить разделимость с помощью eossa, функция eossa_new. Можете попробовать поменять метод кластеризации корней (distance), если покажется, что его можно улучшить.

01.04.2025 - Обсудили методы оценки параметров на основе ЛРФ, а также iossa. Задание на 08.04.2024 (1) По сигналу без шума построить его вещественную аналитическую формулу, можно использовать функции из Rssa - lrr, roots (корни полинова по lrr) для модельных рядов, где ЛРФ - минимальная, т.е. L = r+1 (или (r+1)-й собственный вектор). Ранг ряда r определяется по числу ненулевых собственных чисел, лучше задавать svd.method = “svd”, он точнее. Добавьте пример с кратными корнями. (2) Усложнение задание - нужно пройти от ряда к явному виду сигнала, добавив к модельным сигналам шум. Разница в следующем: большая длина окна, выбор компонент, относящихся к сигналу, неминимальная ЛРФ, нахождение сигнальных корней по ESPRIT (parestimate), превращение близких корней в кратный корень усреднением, оценка коэффициентов перед слагаемыми по lm по всему ряду. (3) сделайте вариант ‘(1)’ после применения итераций Cadzow. (4) Попробуйте найти явный вид сигнала для своего реального ряда. (5) Проверьте, что метод, который собирает корни не меньше 1 по модулю, для ряда и перевернутого (inverse) ряда, работает (проверить просто визуально по plot, который, примененный к lrr (и/или roots), рисует корни на круге.) Помогут фрагменты 3.1.1, 3.1.2, 3.5.9-3.5.11 https://ssa-with-r-book.github.io/02-chapter2-part2.html
(6) Примените iossa для какого-нибудь модельного примера без обычной слабой разделимости; напоминаю, что в iossa важно задавать правильно nested.groups - их размеры должна соответствовать рангам отделяемых слагаемых, а включаемые в них компоненты должны быть больше похожи на то, что вы ожидаете получить после улучшения.

25.03.2025 - Задание на 01.04.2025 (1) Попробовать перед auto-ssa улучшить разделимость с помощью fossa (DerivSSA) https://ssa-with-r-book.github.io/02-chapter2-part2.html#fragment-286-us-unemployment-improvement-by-derivssa. (2) Сгенерировать ряды конечного ранга с разными наборами корней характеристического полинома, включая кратные. Потом подать ряд на вход, построить линейную рекуррентную формулу, найти корни ее х.п., по ним построить регрессоры и найти коэффициенты C_{mj}, решая линейную систему (а можно и по lm). Проверить, что полученная явная формула ряда действительно описывает исходный ряд.

18.03.2025 - Задание на 25.03.2025 (1) построить еще тренды с помощью loess и HP фильтра (там в случае отсутствия периодичности эмпирически подходящая lambda = 100. Частота в квадрате от второй производной, умноженная на lambda, примерно равна 100. Поэтому для периода 12 получаем lambda = 14400). Для loess проверить устойчивость к выбросам в варианте с итерациями; (2) посмотреть, как работает box-cox transformation; (3) попробовать выделить тренд с помощью автоматической группировки в SSA. (4) посмотреть, как SSA с проекциями выделяет полиномиальный тренд.

11.03.2025 - Задание на 18.03.2025 с помощью выделения тренда построить огибающую для модулированной синусоиды. Если огибающая - косинус с маленькой частотой, то тренд хорошо выделяется SSA, включить это в примеры. Также для шума с меняющейся дисперсией получить поведение этой дисперсии (нарисовать шум с наложенным доверительным интервалом). (и SSA фильтр, кто не делал)

04.03.2025 - смотрели задания по фильтрам и трендам, аддитивная и мультипликативная модель. Задание на 11.03.2025: (l) добавить к трендам с прошлого раза полиномиальные тренды и (2) посмотреть на SSA как на применение адаптивного фильтра.

25.02.2025 - про фильтры, АЧХ. Д.з. Задание на 04.03.2025: (1) разобраться с фильтрами, их АЧХ, и применить к модельным и реальным данным (для реальных данных попробовать выделить тренд скользящим средним). В том числе, построить периодограмму до применения фильтра и после. Код для АЧХ см. http://statmod.ru/wiki/study:spring2019:ts_pract за 1 марта (поменяйте неправильные символы типа стрелочек и кавычек на текстовые варианты или попросите ChatGPT/deepseek написать вам код на r для АЧХ). (2) сгенерировать белый и красный шумы и с помощью скользящего среднего, примененного к периодограмме, оценить спектральную плотность.
(3) (по SSA) воспользоваться пакетом Rssa: проверить теорию SSA по разделимости на модельных рядах - посмотреть, какой ранг у экспонент, полиномов, косинусов и их произведений (пользуйтесь svd.method = “svd” в функции ssa; если s <- ssa(…), то доступ к сингулярным числам svd разложения идет через s\$sigma); построить примеры, когда есть/нет точная разделимость, есть/нет разделимость по вкладу. Посмотреть, как выглядят собственные векторы, по ним сделать группировку и найти слагаемые ряда. Применить к вашему реальному ряду. Примеры кода см. https://ssa-with-r-book.github.io/01-chapter2-part1.html (фрагменты 2.1.1-2.1.3). Нарисовать на одном графике тренды, которые выделены скользящим средним и SSA для реального ряда.

18.02.2025 - Смотрели задания по периодограммам.

11.02.2025 - о типах рядов и их структуре. Периодограммы. Задание на 18.02.2025: 1) на примере синуса показать эффект растекания в периодограммах (taper=0), 2) сгенерировать белый и красный шум и построить их периодограммы. (в 1) и 2) показать, как меняются периодограммы при увеличении длинs ряда; научиться строить периодограммы без лог-шкалы по оси Y, использовать demean, detrend), 3) найти реальный временной ряд, состоящий их тренда, периодичности и шума, построить периодограмму и объяснить ее.
Функции для периодограммы - spec.pgram (без сглаживания), periodogram. Напоминаю про тип данных ts.
Вот тут пример, но разложение делать не надо https://habr.com/ru/articles/505738/, только ДО него.

Литература и ссылки

  1. Ссылка на R-пакет Rssa, версия R будет нужна не меньше 3.2
  2. Статьи-tutorial для Rssa:
    • Nina Golyandina, Anton Korobeynikov, Anatoly Zhigljavsky “Singular spectrum analysis with R”, 2018. Сайт с примерами в R из книги http://ssa-with-r-book.github.io
    • Базовый метод (примеры частично не работают с новой версией пакета v1): N.Golyandina, A.Korobeynikov. Basic Singular Spectrum Analysis and Forecasting with R. Computational Statistics and Data Analysis. Volume 71, March 2014, pp.934-954. Версия в Arxiv
  3. Многомерные обобщения метода и общая схема: N.Golyandina, A.Korobeynikov, A.Shlemov, K.Usevich. Multivariate and 2D Extensions of Singular Spectrum Analysis with the Rssa Package. Journal of Statistical Software, v.67, Issue 2, 2015, pp.1-78. Открытый доступ к статье с кодом примеров: J.Stat.Soft.
  4. (не будет использоваться в курсе) Программа CaterpillarSSA (Windows). Для получения рег.ключа к студенческой версии мне нужно прислать запрос.