Почему компонент Trend в этом фильтре Кристиано-Фицджеральда (mFilter's cffilter) так перегружен? - PullRequest
0 голосов
/ 19 ноября 2018

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

Данные : Данные представляют собой ежедневные измерения количества осадков за 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)

enter image description here

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

Вопрос : Является ли mfilter даже «трендом», определяющим то же, что и такая функция, как degpose () или stl ()? Если нет, то как мне тогда об этом думать?

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

1 Ответ

0 голосов
/ 02 декабря 2018

Ответ таков: «no» 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)

enter image description here

...