Почему компонент Trend этого фильтра Кристиано-Фитцджеральда (фильтр mFilter) так переоборудован?

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

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

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

US1ORLA0076 <- read_csv("US1ORLA0076_cf.csv")
head(US1ORLA0076)

  water_date  PRCP prcp_log
  <date>     <dbl>    <dbl>
1 2006-12-22  0.09   0.0899
2 2006-12-23  0.75   0.693 
3 2006-12-24  1.63   1.26  
4 2006-12-25  0.06   0.0600
5 2006-12-26  0.36   0.353 
6 2006-12-27  0.63   0.594 

Затем я применяю полосовой фильтр Кристиано-Фитцджеральда (предназначенный для пропускания длин волн размером от полугода до года, то есть одиночные годовые волны), используя следующую команду из пакет mFilter.

library(mFilter)

US1ORLA0076_cffilter  <- cffilter(US1ORLA0076$prcp_log,pl=180,pu=365,root=FALSE,drift=FALSE,
                                  type=c("asymmetric"),
                                  nfix=NULL,theta=1)

При этом создается объект S3, содержащий, среди прочего, вектор значений «тренда» и вектор значений «цикла», например:

head(US1ORLA0076_cffilter$trend)
          [,1]
[1,] 0.1482724
[2,] 0.7501137
[3,] 1.3202868
[4,] 0.1139883
[5,] 0.4051551
[6,] 0.6453462

head(US1ORLA0076_cffilter$cycle)
            [,1]
[1,] -0.05839342
[2,] -0.05696651
[3,] -0.05550995
[4,] -0.05402422
[5,] -0.05250982
[6,] -0.05096727

На участке:

plot(US1ORLA0076_cffilter)

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

Меня смущает этот вывод. Цикл выглядит примерно так, как я ожидал. В тренде нет. Вместо того, чтобы быть постепенно изменяющейся линией, представляющей общий тренд данных после определения сезонности, она, похоже, тщательно отслеживает исходные данные, т.е.

Вопрос. Определяет ли mfilter «тренд» так же, как и такие функции, как decopose () или stl ()? Если нет, то как мне тогда думать об этом?

Вопрос: я неправильно откалибровал cffilter () и что я могу изменить, чтобы улучшить определение компонента тренда?


person Clayton Glasser    schedule 18.11.2018    source источник


Ответы (1)


Ответ: «нет» mfilter () не определяет «тренд» так же, как некоторые функции декомпозиции, такие как stl (). В более общем плане он определяет его как «вещь, от которой отклоняется цикл». Установив полосу пропускания 180-365 для пропускного фильтра, я выделил годовой циклический компонент, который был вычтен из данных, оставив позади все остальное, которое определяется здесь как «тренд» и может рассматриваться как вид остатка.

Чтобы идентифицировать «тенденцию», как она проявляется в пакете декомпозиции, таком как stl () или decomp (), используя тот же метод, можно применить полосовой фильтр, аналогичный приведенному выше, но с периодом колебаний, определенным между (для этого набор данных) 366-3652, который будет охватывать частотный диапазон, отражающий весь 10-летний период, за исключением внутригодовых периодов, таких как годовая сезонность.

#Overall trend captured with similar code (and slightly different data):
US1ORLA0076_cffilter_trend  <- cffilter(US1ORLA0076$prcp_log,pl=366,pu=3652,root=FALSE,drift=FALSE,
                                        type=c("asymmetric"),
                                        nfix=1,theta=1)

plot(US1ORLA0076_cffilter_trend)

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

person Clayton Glasser    schedule 02.12.2018