Logistics

Piazza

Multiplicative Seasonal ARIMA Models

Multiplicative Seasonal ARMA Models (no I)

ARMA\((p, q) \times (P, Q)_s\)

For example, an ARMA\((0,1) \times (1, 0)_{12}\) is \[ x_t = \Phi x_{t-12} + w_t + \theta w_{t-1} \] where \(\Phi\) and \(\theta\) are parameters to be fitted.

Multiplicative Seasonal ARIMA Models

For example, an ARIMA\((0, 1, 1) \times (0, 1, 1)_{12}\) is \[ (1 - B^{12})(1-B)x_t = (1+\Theta B^{12})(1+\theta B) w_t \]

Example

Fit fit fit

Textbook library

?astsa::sarima
d = cbind(
  x = AirPassengers,
  lx = log(AirPassengers),
  dlx = diff(log(AirPassengers)),
  ddlx = diff(diff(log(AirPassengers)), 12)
)
plot(d)

astsa::acf2(d[,"ddlx"], 50)

##       [,1]  [,2]  [,3]  [,4] [,5] [,6]  [,7]  [,8] [,9] [,10] [,11] [,12] [,13]
## ACF  -0.34  0.11 -0.20  0.02 0.06 0.03 -0.06  0.00 0.18 -0.08  0.06 -0.39  0.15
## PACF -0.34 -0.01 -0.19 -0.13 0.03 0.03 -0.06 -0.02 0.23  0.04  0.05 -0.34 -0.11
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
## ACF  -0.06  0.15 -0.14  0.07  0.02 -0.01 -0.12  0.04 -0.09  0.22 -0.02  -0.1
## PACF -0.08 -0.02 -0.14  0.03  0.11 -0.01 -0.17  0.13 -0.07  0.14 -0.07  -0.1
##      [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37]
## ACF   0.05 -0.03  0.05 -0.02 -0.05 -0.05  0.20 -0.12  0.08 -0.15 -0.01  0.05
## PACF -0.01  0.04 -0.09  0.05  0.00 -0.10 -0.02  0.01 -0.02  0.02 -0.16 -0.03
##      [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49]
## ACF   0.03 -0.02 -0.03 -0.07  0.10 -0.09  0.03 -0.04 -0.04  0.11 -0.05  0.11
## PACF  0.01  0.05 -0.08 -0.17  0.07 -0.10 -0.06 -0.03 -0.12 -0.01 -0.05  0.09
##      [,50]
## ACF  -0.02
## PACF  0.13

Fit ARIMA\((0,1,0)\times (0, 1, 0)_{12}\)

astsa::sarima(d[,"lx"], 0, 1, 0, 0, 1, 0, 12)

## $fit
## 
## Call:
## stats::arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, 
##     Q), period = S), include.mean = !no.constant, transform.pars = trans, fixed = fixed, 
##     optim.control = list(trace = trc, REPORT = 1, reltol = tol))
## 
## 
## sigma^2 estimated as 0.002086:  log likelihood = 218.41,  aic = -434.83
## 
## $degrees_of_freedom
## [1] 131
## 
## $ttable
##      Estimate p.value
## 
## $AIC
## [1] -3.062183
## 
## $AICc
## [1] -3.062183
## 
## $BIC
## [1] -3.041935

Fit ARIMA\((0,1,0)\times (0, 1, 1)_{12}\)

astsa::sarima(d[,"lx"], 0, 1, 0, 0, 1, 1, 12)
## initial  value -3.086228 
## iter   2 value -3.200050
## iter   3 value -3.215680
## iter   4 value -3.216510
## iter   5 value -3.216776
## iter   6 value -3.226344
## iter   7 value -3.227350
## iter   8 value -3.227520
## iter   9 value -3.227646
## iter  10 value -3.227647
## iter  10 value -3.227647
## final  value -3.227647 
## converged
## initial  value -3.218690 
## iter   2 value -3.218772
## iter   3 value -3.218779
## iter   3 value -3.218779
## iter   3 value -3.218779
## final  value -3.218779 
## converged

## $fit
## 
## Call:
## stats::arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, 
##     Q), period = S), include.mean = !no.constant, transform.pars = trans, fixed = fixed, 
##     optim.control = list(trace = trc, REPORT = 1, reltol = tol))
## 
## Coefficients:
##          sma1
##       -0.6021
## s.e.   0.0784
## 
## sigma^2 estimated as 0.001536:  log likelihood = 235.78,  aic = -467.56
## 
## $degrees_of_freedom
## [1] 130
## 
## $ttable
##      Estimate     SE t.value p.value
## sma1  -0.6021 0.0784 -7.6773       0
## 
## $AIC
## [1] -3.292663
## 
## $AICc
## [1] -3.292462
## 
## $BIC
## [1] -3.252167

Fit ARIMA\((0,1,1)\times (0, 1, 0)_{12}\)

astsa::sarima(d[,"lx"], 0, 1, 1, 0, 1, 0, 12)
## initial  value -3.086228 
## iter   2 value -3.150775
## iter   3 value -3.151783
## iter   4 value -3.151788
## iter   4 value -3.151788
## final  value -3.151788 
## converged
## initial  value -3.151684 
## iter   2 value -3.151684
## iter   2 value -3.151684
## iter   2 value -3.151684
## final  value -3.151684 
## converged

## $fit
## 
## Call:
## stats::arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, 
##     Q), period = S), include.mean = !no.constant, transform.pars = trans, fixed = fixed, 
##     optim.control = list(trace = trc, REPORT = 1, reltol = tol))
## 
## Coefficients:
##           ma1
##       -0.3870
## s.e.   0.0887
## 
## sigma^2 estimated as 0.001828:  log likelihood = 226.99,  aic = -449.98
## 
## $degrees_of_freedom
## [1] 130
## 
## $ttable
##     Estimate     SE t.value p.value
## ma1   -0.387 0.0887 -4.3626       0
## 
## $AIC
## [1] -3.168869
## 
## $AICc
## [1] -3.168668
## 
## $BIC
## [1] -3.128373

Fit ARIMA\((0,1,1)\times (0, 1, 1)_{12}\)

astsa::sarima(d[,"lx"], 0, 1, 1, 0, 1, 1, 12)
## initial  value -3.086228 
## iter   2 value -3.267980
## iter   3 value -3.279950
## iter   4 value -3.285996
## iter   5 value -3.289332
## iter   6 value -3.289665
## iter   7 value -3.289672
## iter   8 value -3.289676
## iter   8 value -3.289676
## iter   8 value -3.289676
## final  value -3.289676 
## converged
## initial  value -3.286464 
## iter   2 value -3.286855
## iter   3 value -3.286872
## iter   4 value -3.286874
## iter   4 value -3.286874
## iter   4 value -3.286874
## final  value -3.286874 
## converged

## $fit
## 
## Call:
## stats::arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, 
##     Q), period = S), include.mean = !no.constant, transform.pars = trans, fixed = fixed, 
##     optim.control = list(trace = trc, REPORT = 1, reltol = tol))
## 
## Coefficients:
##           ma1     sma1
##       -0.4018  -0.5569
## s.e.   0.0896   0.0731
## 
## sigma^2 estimated as 0.001348:  log likelihood = 244.7,  aic = -483.4
## 
## $degrees_of_freedom
## [1] 129
## 
## $ttable
##      Estimate     SE t.value p.value
## ma1   -0.4018 0.0896 -4.4825       0
## sma1  -0.5569 0.0731 -7.6190       0
## 
## $AIC
## [1] -3.404219
## 
## $AICc
## [1] -3.403611
## 
## $BIC
## [1] -3.343475

Fit ARIMA\((1, 1, 0)\times (1, 1, 0)_{12}\)

astsa::sarima(d[,"lx"], 1, 1, 0, 1, 1, 0, 12)
## initial  value -3.078654 
## iter   2 value -3.270484
## iter   3 value -3.271877
## iter   4 value -3.272052
## iter   5 value -3.272052
## iter   5 value -3.272052
## iter   5 value -3.272052
## final  value -3.272052 
## converged
## initial  value -3.253139 
## iter   2 value -3.254101
## iter   3 value -3.254125
## iter   4 value -3.254125
## iter   4 value -3.254125
## iter   4 value -3.254125
## final  value -3.254125 
## converged

## $fit
## 
## Call:
## stats::arima(x = xdata, order = c(p, d, q), seasonal = list(order = c(P, D, 
##     Q), period = S), include.mean = !no.constant, transform.pars = trans, fixed = fixed, 
##     optim.control = list(trace = trc, REPORT = 1, reltol = tol))
## 
## Coefficients:
##           ar1     sar1
##       -0.3745  -0.4637
## s.e.   0.0808   0.0808
## 
## sigma^2 estimated as 0.001457:  log likelihood = 240.41,  aic = -474.82
## 
## $degrees_of_freedom
## [1] 129
## 
## $ttable
##      Estimate     SE t.value p.value
## ar1   -0.3745 0.0808 -4.6319       0
## sar1  -0.4637 0.0808 -5.7374       0
## 
## $AIC
## [1] -3.343795
## 
## $AICc
## [1] -3.343187
## 
## $BIC
## [1] -3.283051

Moral of the story

  • Stabilize the variance with log transform if needed
  • The seasonality \(s\) is from common sense. Daily, weekly, Monthly, Quaterly, yearly?
  • Plot the ACF, PACF of tranformed and differenced data
  • Try possible ARIMA\((p, d, q) \times (P, D, Q)_{s}\).
    • Look at the residual’s ACF, Q-Qplot
    • Look at the t-test of fitted parameters and the AIC things.