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

Место и время проведения: пятница, вторая пара, 4399.
(лекции по пятницам, 3 пара) Преподаватель: Голяндина Нина Эдуардовна



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


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


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

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

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

24 мая

Последнее занятие (срок для отправки четвертого отчета - 24 мая). Все показывают задания по ARIMA, ETS и прогнозу (можно и заполнение пропусков gapfill, igapfill, по желанию Фрагменты 3.3.1-3.3.3). Упорядочиваем тех, у кого меньше двух выступлений, по числу посещений. Будем рассчитывать время так, чтобы 4 человека точно успели: Горбачук, Романова, Высоков, Третьякова. Остальные — как получится (если останется время или кто-то из перечисленных выше откажется).

17 мая

1) Промоделированные данные по ARIMA (вариант - номер в списке). Нужно понять, какая модель и оценить параметры. Результаты до занятия нужно будет скопировать в ответы на сообщение на стене в группе vk (сделаю накануне).
2) ARIMA - самим смоделировать разные модели (например, arima.sim), попробовать определить модель по acf и pacf, оценить параметры (например, arima), определить модель с помощью AIC/BIC (например, arima.auto), сделать прогноз в оцененной модели с доверительными интервалами. Используйте пакет forecast. Можно все это проделать на данных из пункта 1). Проверьте адекватность модели по остаткам.
3) Определив модель по AIC-BIC, сделать прогноз с доверительными интервалами по Seasonal ARIMA для своих реальных данных.
4) Построить прогноз с помощью методов SSA (rforecast, vforecast) и строить доверительные интервалы методом бутстреп (bforecast, forecast в Rssa). Вот ссылка на пример https://ssa-with-r-book.github.io/03-chapter3.html#fragment-321-forecasting-of-co2.
5) Сравните прогнозы по ARIMA и SSA. Вот некоторый пример сравнения, где параметры подбираются автоматически https://ssa-with-r-book.github.io/03-chapter3.html#fragment-3518-sweetwhite--comparison-of-ssa-arima-and-ets (для SSA можно подбирать вручную)
Если пример модельный, то продолжение сигнала известно и можно с ним сравнивать прогноз. А если ряд реальный, то можно отрезать какое-то число последних точек и сравнивать результат с ними, например, попадают ли в доверительный/предсказательный интервал.(Может быть, еще допишу пояснения и ссылки)

11 мая Задание по практике по прогнозу будет на 17 мая, а на доп. занятии 11-го расскажу теорию по ARIMA. Поэтому практическое задание будет как про прогнозу по SSA, так и по ARIMA.

10 мая До 10 мая нужно прислать отчет номер 3, начиная с автоматической идентификации. Новое:
(1) улучшение разложения с помощью iossa и fossa. Обращаю внимание, что в fossa компоненты могут переставиться согласно частотам. Примеры
https://ssa-with-r-book.github.io/01-chapter2-part1.html#fragment-251-separation-of-two-sine-waves-with-equal-amplitudes
https://ssa-with-r-book.github.io/01-chapter2-part1.html#fragment-241-noisy-sum-of-three-sinusoids-iterative-o-ssa
https://ssa-with-r-book.github.io/02-chapter2-part2.html#fragment-286-us-unemployment-improvement-by-derivssa
https://ssa-with-r-book.github.io/02-chapter2-part2.html#fragment-282-fort-basic-ssa-and-iterative-o-ssa-trends
Статья https://arxiv.org/abs/1308.4022
(2) Нужно построить явную формулу для сигнала. Начать нужно с того примера, который предлагалось сделать к 26 апреля (найти и нарисовать корни для модельного ряда). Этот пример нужно продолжить - найти еще корни с помощью ESPRIT и потом найти коэффициенты C_i перед соответствующими слагаемыми решением линейной системы. Должно совпасть с тем, как ряд генерировался. Затем добавьте к сигналу шум и получите примерную формулу (корни находятся по ESPRIT, а коэффициенты C_i методом наименьших квадратов). После того как это все получится, сделайте то же самое для сигнала в реальном ряде. Там нужно, чтобы сигнал был выделен за одно разложение, где важно, что сигнал отделился от шума, но не так важно, отделился ли тренд от сезонности или нет. После того как формула для ряда будет получена, проверьте, что ряд, полученный по этой формуле, похож на выделенный сигнал. Если не получится построить формулу для всего сигнала, то постройте формулу для сезонности - ее уже можно выделить любым способом, последовательным, iossa, fossa,…. Пример:
https://ssa-with-r-book.github.io/03-chapter3.html#fragment-3511-fort-estimation-of-parametric-real-valued-form (в примере предполагается, что корни перед этим как-то оценены).

26 апреля

Добавилась автоматическая идентификация (grouping.auto) - по матрице взвешенных корреляций, а также идентификация тренда по периодограмме.
Совсем новое задание - сгенерировать какой-нибудь непростой ряд в виде суммы произведений полиномов, экспонент и косинусов, понять, какой у него ранг, какие должны быть корни характеристического полинома и проверить свое понимание с помощью Rssa. А именно, выбрать нужную длину окна, построить LRR (lrr), нарисовать корни plot(roots(…)).

19 апреля

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

12 апреля

Специально ничего нового (только умение находить огибающие для косинуса и шума добавилось). Задание то же, что к 5 апреля, но с учетом обсуждений 5 апреля, и нужно сделать все задание целиком. Напоминаю, что тренд рисуется на фоне ряда и что нужно смотреть на остатки.

5 апреля

Сделать разложение ряда на тренд, периодику(и) и шум для реального ряда (decompose, stl (более новая функция - stlplus из одноименного пакета, которая умеет, в частности, работать с пропусками), SSA) и для модельного (SSA). Лучше начать с модельного ряда.
Модельные данные - распределите ряды (каждый берет длинный ряд и короткий с номером +6) - (1 и 7), (2 и 8), …, (6 и 12) для анализа с помощью SSA. Можно по списку по модулю 6.
Можно применять последовательный анализ - сначала выделить тренд, сохранить остаток, а потом уже загрузить остаток и разделять его на периодики и шум.
Если тренд похож на линейный, то для его выделения имеет смысл использовать SSA с двойным центрированием. Пример использования:
s ← ssa(co2, column.projector = «centering», row.projector = «centering»)
plot(reconstruct(s, groups = list(trend = seq_len(nspecial(s)))))

Периоды синусов можно оценить с помощью parestimate
pe ← parestimate(s, groups = list(c(2, 3, 5, 6)), method = «esprit»).

Дедлайн по отчету - присылайте все, включая выделение тренда (но пока без сезонного разложения). Отчет присылайте в html, с плавающим оглавлением.

29 марта

В дополнение к предыдущему, все готовят выделение тренда разными способами и с разных точек зрения - как фильтрация, как подавление шума, наличие смещения, как выделение гладкой компоненты, локальная и глобальная регрессия, устойчивость к outliers. Соответствующая теория включается в подготовку практического задания.

22 марта

Какое-то время буду рассказывать о новом, а в остальное время будем обсуждать ваши показы дополненных обработок временных рядов. При доработке задания, обратите внимание на препроцессинг (нужен или нет - если нужен, то какой), на модель временного ряда, аддитивная или мультипликативная.

15 марта

Половину времени буду рассказывать о новом, а половину пары будут показывать задания те, кто не успел 1 марта.

1 марта

Общее задание: Провести анализ ряда - выделить тренд, исследовать частотные характеристики ряда и остатка после выделения тренда. При этом использовать фильтры, АЧХ и периодограмму (R: spec.pgram - для периодограммы; научитесь строить периодограмму как с лог-шкалой по оси Y, так и с обычной шкалой.)

Ряды можно найти самостоятельно, например, на таком ресурсе https://research.stlouisfed.org/fred2/categories/32447, а можно использовать ряды из этого архива (в одном файле несколько рядов). Для демонстрации каких-то эффектов можно дополнительно промоделировать ряд.

Я отдельно не рассказывала, но можно выделять тренд не только сглаживанием, то и с помощью регрессии, линейной или нелинейной (где по моменту времени 1,2,3,… в качестве независимой переменной предсказывается значение временного ряда в этой точке).

Все делают всё, но конкретно для рассказа обращают внимание на что-то конкретное:

  1. ts в R, как задается временной ряд и временная шкала. (Балагуров, Высоков)
  2. Автокорреляции - построить, проинтерпретировать. (Лунев, Рукавишникова)
  3. Сглаживание временного ряда и выделение тренда. Использование фильтров для частотной фильтрации. Смоделировать ряд с броуновским движением и взять реальный ряд с детерминированным трендом. Сравнить результаты. (Федоров)
  4. Промоделировать красный и белый шум и построить оценки спектральной плотности сглаживанием периодограммы. (Сандул)
  5. Выделение тренда и подавление шума. Использование фильтра (скользящего среднего). Зависимость результата от длины окна. (Третьякова)
  6. Выделение тренда у ряда с сезонностью (выбор длины окна в скользящем среднем). (Понизова, Бакшинская)
  7. Частотный анализ ряда с помощью периодограммы; анализ остатка после того, как выделили тренд/сгладили. (Приньков, Волканова)
  8. Амплитудно-частотная характеристика фильтра (АЧХ). Взять несколько фильтров, разность соседних точек, сумма соседних точек, …. Построить АЧХ, проинтерпретировать, показать, как действует, на конкретном временном ряде. (Страшко, Горбачук)
  9. Растекание частоты в периодограмме. Подправка длины ряда для ее устранения. (Зенкова, Петраков)
  10. Выделение тренда с помощью параметрической регрессии. (Романова, Федяев)

R код АЧХ (хотя наверняка есть и в каком-то пакете, но тут - в лоб)

afc ← function(filter, omega) {
k ← seq_along(filter) - 1
h ← function(o) sum(rev(filter) * exp(-k*1i * o))
abs(sapply(omega, h))
}

freq ← seq(0, pi, 0.001)
filt ← rep(1, 100)
filt ← c(-1,1)
filt ← c(-1,2,-1)
omega ← freq/2/pi
plot(afc(filt, freq) ~ omega, type = «l»)

15 и 22 февраля

Рассказ теории. В целом о временных рядах и задачах. Периодограмма, фильтры.

К зачету

TODO

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

  • Ссылка на R-пакет Rssa,

версия R будет нужна не меньше 3.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

  • Многомерные обобщения метода и общая схема:

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.

Для получения рег.ключа к студенческой версии мне нужно прислать запрос.

study/spring2019/ts_pract.txt · Последнее изменение: 2019/05/19 12:41 — nina
Наверх
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0