Понимание Фурье для сезонности - PullRequest
0 голосов
/ 08 ноября 2018

Я использую auto.arima из пакета прогноза в R, чтобы определить оптимальные K-члены для рядов Фурье.

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

Используя набор данных из пакета прогноза, я смог извлечь оптимальное количество терминов Фурье:

library(forecast)

##Public dataset from the forecast package
head(gas)

##Choose Optimal Amount of K-Terms
bestfit <- list(aicc=Inf)
for(i in 1:6)
{
  fit <- auto.arima(gas, xreg=fourier(gas, K=i), seasonal=FALSE)
  if(fit$aicc < bestfit$aicc)
    bestfit <- fit
  else break;
  optimal_k_value<-max(i)
  print(i)
}

##Extract Fourier Terms 
seasonality<-data.frame(fourier(gas, K=optimal_k_value))

##Convert Gas TS Data to Dataframe
gas_df <- data.frame(gas, year = trunc(time(gas)), 
                 month = month.abb[cycle(gas)])

##Extract True Seasonality by Taking Sum of Rows
seasonality$total<- rowSums(seasonality)

##Combine Seasonality to Month and Year
final_df<-cbind(gas_df, seasonality$total)

Будет ли столбец seasonality$total рассматриваться как "переменная сезонности" для последующего моделирования или мне нужно добавить к нему коэффициенты?

1 Ответ

0 голосов
/ 08 ноября 2018

Нет, seasonality$total не является переменной сезонности. Чтобы увидеть это, обратите внимание, что каждый столбец fourier(gas, K = optimal_k_value) - это просто сезонный компонент, идущий от -1 до 1, так что они являются просто sin (...) и cos (...) без каких-либо коэффициентов. Очевидно, что разные сезонные компоненты должны иметь разные коэффициенты, поэтому не следует просто их суммировать.

Дополнительный комментарий 1 : поскольку i - это всегда просто одно число, нет смысла использовать max(i), достаточно просто optimal_k_value <- i.

Дополнительный комментарий 2 : Я предлагаю проверить

plot(resid(auto.arima(gas, xreg = fourier(gas, K = optimal_k_value), seasonal = FALSE)))

С одной стороны, сезонность может быть ниже годовой (кажется, что fourier не позволяет учесть это), хотя, возможно, вы собираетесь моделировать ее отдельно как тренд. Также может быть хорошей идеей разделить данные на что-то вроде до и после 1970 года.

...