# BT Question Set P1-T2-20-24-3: AIC and BIC

20.24.3. Eric is a commodity analyst who fit four different candidate AR(p) models to a series of oil prices. For each of the candidate models, he then retrieved the Akaike information criterion (AIC) and the Bayesian information criterion (BIC). The results are displayed below.

.. AIC and BIC values (table below) goes here …

As Eric interprets the results of these criteria (i.e., the AIC and BIC values), which of the following statements is TRUE?

1. Both criteria (AIC and BIC) favor the AR(1) model
2. Both criteria (AIC and BIC) favor the AR(2) model
3. As both criteria are insignificant, any AR(p) model is a bad fit
4. The criteria disagree and therefore the AIC’s preference should prevail because it prefers fewer lags
``````library(tidyverse)
library(scales)
library(gridExtra)
library(forecast)
library(tseries)
library(fpp2)
library(gt)
library(astsa)

# 175
set.seed(175)
ar2 <- arima.sim(model=list(order=c(2,0,0),ar = c(1.5,-.75)),n = 500)
ma2 <- arima.sim(model=list(order=c(0,0,2),ma = c(1.5,-.75)),n = 500)

ar1_fit <- sarima(ar2, p = 1, d = 0, q = 0)``````
``````## initial  value 1.185288
## iter   2 value 0.473121
## iter   3 value 0.473113
## iter   4 value 0.473112
## iter   5 value 0.473108
## iter   6 value 0.473099
## iter   7 value 0.473095
## iter   8 value 0.473094
## iter   9 value 0.473092
## iter  10 value 0.473087
## iter  11 value 0.473080
## iter  12 value 0.473076
## iter  13 value 0.473075
## iter  14 value 0.473075
## iter  15 value 0.473075
## iter  16 value 0.473074
## iter  17 value 0.473073
## iter  18 value 0.473073
## iter  19 value 0.473073
## iter  20 value 0.473073
## iter  21 value 0.473072
## iter  22 value 0.473072
## iter  23 value 0.473072
## iter  24 value 0.473072
## iter  25 value 0.473072
## iter  26 value 0.473072
## iter  27 value 0.473072
## iter  27 value 0.473072
## iter  27 value 0.473072
## final  value 0.473072
## converged
## initial  value 0.475632
## iter   2 value 0.475627
## iter   3 value 0.475615
## iter   4 value 0.475613
## iter   5 value 0.475597
## iter   6 value 0.475583
## iter   7 value 0.475579
## iter   8 value 0.475574
## iter   9 value 0.475573
## iter  10 value 0.475570
## iter  11 value 0.475569
## iter  12 value 0.475569
## iter  13 value 0.475569
## iter  13 value 0.475569
## iter  13 value 0.475569
## final  value 0.475569
## converged``````

``ar2_fit <- sarima(ar2, p = 2, d = 0, q = 0)``
``````## initial  value 1.186082
## iter   2 value 1.063752
## iter   3 value 0.611728
## iter   4 value 0.360300
## iter   5 value 0.180452
## iter   6 value 0.026222
## iter   7 value 0.023222
## iter   8 value 0.022348
## iter   9 value 0.022310
## iter  10 value 0.022284
## iter  11 value 0.022258
## iter  12 value 0.022258
## iter  13 value 0.022258
## iter  14 value 0.022258
## iter  15 value 0.022258
## iter  16 value 0.022258
## iter  17 value 0.022258
## iter  17 value 0.022258
## iter  17 value 0.022258
## final  value 0.022258
## converged
## initial  value 0.028108
## iter   2 value 0.028095
## iter   3 value 0.028087
## iter   4 value 0.028086
## iter   5 value 0.028086
## iter   6 value 0.028085
## iter   7 value 0.028085
## iter   8 value 0.028085
## iter   8 value 0.028085
## final  value 0.028085
## converged``````

``ar3_fit <- sarima(ar2, p = 3, d = 0, q = 0)``
``````## initial  value 1.187086
## iter   2 value 0.966297
## iter   3 value 0.720122
## iter   4 value 0.651535
## iter   5 value 0.270365
## iter   6 value 0.157749
## iter   7 value 0.106223
## iter   8 value 0.068752
## iter   9 value 0.027592
## iter  10 value 0.020453
## iter  11 value 0.020449
## iter  12 value 0.020445
## iter  13 value 0.020430
## iter  14 value 0.020418
## iter  15 value 0.020418
## iter  16 value 0.020418
## iter  17 value 0.020418
## iter  18 value 0.020418
## iter  19 value 0.020418
## iter  20 value 0.020418
## iter  20 value 0.020418
## iter  20 value 0.020418
## final  value 0.020418
## converged
## initial  value 0.027093
## iter   2 value 0.027090
## iter   3 value 0.027084
## iter   4 value 0.027079
## iter   5 value 0.027079
## iter   6 value 0.027078
## iter   7 value 0.027078
## iter   8 value 0.027078
## iter   8 value 0.027078
## iter   8 value 0.027078
## final  value 0.027078
## converged``````

``ar4_fit <- sarima(ar2, p = 4, d = 0, q = 0)``
``````## initial  value 1.187677
## iter   2 value 1.182760
## iter   3 value 0.389837
## iter   4 value 0.312734
## iter   5 value 0.257361
## iter   6 value 0.134886
## iter   7 value 0.042493
## iter   8 value 0.035479
## iter   9 value 0.028843
## iter  10 value 0.020356
## iter  11 value 0.020308
## iter  12 value 0.020305
## iter  13 value 0.020305
## iter  14 value 0.020305
## iter  15 value 0.020304
## iter  16 value 0.020304
## iter  17 value 0.020304
## iter  18 value 0.020304
## iter  19 value 0.020304
## iter  20 value 0.020304
## iter  21 value 0.020304
## iter  22 value 0.020304
## iter  22 value 0.020304
## iter  22 value 0.020304
## final  value 0.020304
## converged
## initial  value 0.026957
## iter   2 value 0.026941
## iter   3 value 0.026940
## iter   4 value 0.026938
## iter   5 value 0.026937
## iter   6 value 0.026936
## iter   7 value 0.026936
## iter   8 value 0.026936
## iter   9 value 0.026936
## iter   9 value 0.026936
## iter   9 value 0.026936
## final  value 0.026936
## converged``````

``ma1_fit <- sarima(ma2, p = 0, d = 0, q = 1)``
``````## initial  value 0.620720
## iter   2 value 0.616967
## iter   3 value 0.616503
## iter   4 value 0.616503
## iter   4 value 0.616503
## iter   4 value 0.616503
## final  value 0.616503
## converged
## initial  value 0.616515
## iter   2 value 0.616515
## iter   2 value 0.616515
## iter   2 value 0.616515
## final  value 0.616515
## converged``````

``ma2_fit <- sarima(ma2, p = 0, d = 0, q = 2)``
``````## initial  value 0.620720
## iter   2 value 0.601563
## iter   3 value 0.601097
## iter   4 value 0.601053
## iter   5 value 0.601053
## iter   5 value 0.601053
## iter   5 value 0.601053
## final  value 0.601053
## converged
## initial  value 0.601132
## iter   2 value 0.601132
## iter   2 value 0.601132
## iter   2 value 0.601132
## final  value 0.601132
## converged``````

``ma3_fit <- sarima(ma2, p = 0, d = 0, q = 3)``
``````## initial  value 0.620720
## iter   2 value 0.601584
## iter   3 value 0.601080
## iter   4 value 0.600978
## iter   5 value 0.600977
## iter   5 value 0.600977
## iter   5 value 0.600977
## final  value 0.600977
## converged
## initial  value 0.601058
## iter   2 value 0.601058
## iter   3 value 0.601058
## iter   3 value 0.601058
## iter   3 value 0.601058
## final  value 0.601058
## converged``````

``ma4_fit <- sarima(ma2, p = 0, d = 0, q = 4)``
``````## initial  value 0.620720
## iter   2 value 0.599626
## iter   3 value 0.599377
## iter   4 value 0.599342
## iter   5 value 0.599340
## iter   6 value 0.599340
## iter   7 value 0.599340
## iter   7 value 0.599340
## iter   7 value 0.599340
## final  value 0.599340
## converged
## initial  value 0.599424
## iter   2 value 0.599424
## iter   3 value 0.599424
## iter   3 value 0.599424
## iter   3 value 0.599424
## final  value 0.599424
## converged``````

``print("AIC")``
``## [1] "AIC"``
``ar1_fit\$AIC``
``## [1] 3.801016``
``ar2_fit\$AIC``
``## [1] 2.910047``
``ar3_fit\$AIC``
``## [1] 2.912034``
``ar4_fit\$AIC``
``## [1] 2.915749``
``print("BIC")``
``## [1] "BIC"``
``ar1_fit\$BIC``
``## [1] 3.826304``
``ar2_fit\$BIC``
``## [1] 2.943764``
``ar3_fit\$BIC``
``## [1] 2.95418``
``ar4_fit\$BIC``
``## [1] 2.966324``
``````AIC_ar2 <- c(ar1_fit\$AIC, ar2_fit\$AIC, ar3_fit\$AIC, ar4_fit\$AIC)
BIC_ar2 <- c(ar1_fit\$BIC, ar2_fit\$BIC, ar3_fit\$BIC, ar4_fit\$BIC)
AIC_BIC_ar2 <- cbind(AIC_ar2, BIC_ar2) %>% data.frame()
models <- c("AR(1)", "AR(2)", "AR(3)", "AR(4)")
models_AIC_BIC <- cbind(models, AIC_BIC_ar2)

models_AIC_BIC_gt <- gt(models_AIC_BIC)

models_AIC_BIC_gt <-
models_AIC_BIC_gt %>%
tab_options(
table.font.size = 14
) %>% tab_style(
style = cell_text(weight = "bold"),
locations = cells_body()
# ) %>% tab_style(
#  style = cell_text(color = "cadetblue"),
#  locations = cells_column_labels(
#    columns = vars(model, 'h (lags)', statistic, 'p-value')
#  )
title = md("**AIC and BIC values**"),
subtitle = "Four candidate models: AR(1) ... AR(4)"
) %>% fmt_number(
columns = vars(AIC_ar2, BIC_ar2),
decimals = 5
) %>% tab_source_note(
source_note = md("AIC = Akaike information criterion")
) %>% tab_source_note(
source_note = md("BIC = Bayesian information criterion")
# ) %>% cols_width(
#  vars(model) ~ px(70),
#  vars(statistic, 'p-value') ~ px(90)
) %>% cols_label (
models = md("**model**"),
AIC_ar2 = md("**AIC**"),
BIC_ar2 = md("**BIC**")
) %>% tab_options(
)

models_AIC_BIC_gt``````
AIC and BIC values
Four candidate models: AR(1) ... AR(4)
model AIC BIC
AR(1) 3.80102 3.82630
AR(2) 2.91005 2.94376
AR(3) 2.91203 2.95418
AR(4) 2.91575 2.96632
AIC = Akaike information criterion
BIC = Bayesian information criterion
##### David Harper
###### Founder & CEO of Bionic Turtle

I teach financial risk and enjoy learning data science