Autoregressive Moving Average (ARMA): Sunspots data
In [1]:
1 2 3 4 5 6 7 | <span class = "kn" > from < / span> <span class = "nn" >__future__< / span> <span class = "kn" > import < / span> <span class = "n" >print_function< / span> <span class = "kn" > import < / span> <span class = "nn" >numpy< / span> <span class = "kn" >as< / span> <span class = "nn" >np< / span> <span class = "kn" > from < / span> <span class = "nn" >scipy< / span> <span class = "kn" > import < / span> <span class = "n" >stats< / span> <span class = "kn" > import < / span> <span class = "nn" >pandas< / span> <span class = "kn" >as< / span> <span class = "nn" >pd< / span> <span class = "kn" > import < / span> <span class = "nn" >matplotlib.pyplot< / span> <span class = "kn" >as< / span> <span class = "nn" >plt< / span> <span class = "kn" > import < / span> <span class = "nn" >statsmodels.api< / span> <span class = "kn" >as< / span> <span class = "nn" >sm< / span> |
In [2]:
1 | <span class = "kn" > from < / span> <span class = "nn" >statsmodels.graphics.api< / span> <span class = "kn" > import < / span> <span class = "n" >qqplot< / span> |
Sunpots Data
In [3]:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >sunspots< / span><span class = "o" >.< / span><span class = "n" >NOTE< / span><span class = "p" >)< / span> |
In [4]:
1 | <span class = "n" >dta< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >sunspots< / span><span class = "o" >.< / span><span class = "n" >load_pandas< / span><span class = "p" >()< / span><span class = "o" >.< / span><span class = "n" >data< / span> |
In [5]:
1 2 | <span class = "n" >dta< / span><span class = "o" >.< / span><span class = "n" >index< / span> <span class = "o" > = < / span> <span class = "n" >pd< / span><span class = "o" >.< / span><span class = "n" >Index< / span><span class = "p" >(< / span><span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >datetools< / span><span class = "o" >.< / span><span class = "n" >dates_from_range< / span><span class = "p" >(< / span><span class = "s" > '1700' < / span><span class = "p" >,< / span> <span class = "s" > '2008' < / span><span class = "p" >))< / span> <span class = "k" > del < / span> <span class = "n" >dta< / span><span class = "p" >[< / span><span class = "s" > "YEAR" < / span><span class = "p" >]< / span> |
In [6]:
1 | <span class = "n" >dta< / span><span class = "o" >.< / span><span class = "n" >plot< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >));< / span> |
In [7]:
1 2 3 4 5 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax1< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 211 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_acf< / span><span class = "p" >(< / span><span class = "n" >dta< / span><span class = "o" >.< / span><span class = "n" >values< / span><span class = "o" >.< / span><span class = "n" >squeeze< / span><span class = "p" >(),< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax1< / span><span class = "p" >)< / span> <span class = "n" >ax2< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 212 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_pacf< / span><span class = "p" >(< / span><span class = "n" >dta< / span><span class = "p" >,< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax2< / span><span class = "p" >)< / span> |
In [8]:
1 2 | <span class = "n" >arma_mod20< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >ARMA< / span><span class = "p" >(< / span><span class = "n" >dta< / span><span class = "p" >,< / span> <span class = "p" >(< / span><span class = "mi" > 2 < / span><span class = "p" >,< / span><span class = "mi" > 0 < / span><span class = "p" >))< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >arma_mod20< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >)< / span> |
In [9]:
1 | <span class = "n" >arma_mod30< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >ARMA< / span><span class = "p" >(< / span><span class = "n" >dta< / span><span class = "p" >,< / span> <span class = "p" >(< / span><span class = "mi" > 3 < / span><span class = "p" >,< / span><span class = "mi" > 0 < / span><span class = "p" >))< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> |
In [10]:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >arma_mod20< / span><span class = "o" >.< / span><span class = "n" >aic< / span><span class = "p" >,< / span> <span class = "n" >arma_mod20< / span><span class = "o" >.< / span><span class = "n" >bic< / span><span class = "p" >,< / span> <span class = "n" >arma_mod20< / span><span class = "o" >.< / span><span class = "n" >hqic< / span><span class = "p" >)< / span> |
In [11]:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >)< / span> |
In [12]:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >aic< / span><span class = "p" >,< / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >bic< / span><span class = "p" >,< / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >hqic< / span><span class = "p" >)< / span> |
- Does our model obey the theory?
In [13]:
1 | <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >stats< / span><span class = "o" >.< / span><span class = "n" >durbin_watson< / span><span class = "p" >(< / span><span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >resid< / span><span class = "o" >.< / span><span class = "n" >values< / span><span class = "p" >)< / span> |
Out[13]:
In [14]:
1 2 3 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 111 < / span><span class = "p" >)< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >resid< / span><span class = "o" >.< / span><span class = "n" >plot< / span><span class = "p" >(< / span><span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax< / span><span class = "p" >);< / span> |
In [15]:
1 | <span class = "n" >resid< / span> <span class = "o" > = < / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >resid< / span> |
In [16]:
1 | <span class = "n" >stats< / span><span class = "o" >.< / span><span class = "n" >normaltest< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "p" >)< / span> |
Out[16]:
In [17]:
1 2 3 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 111 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >qqplot< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "p" >,< / span> <span class = "n" >line< / span><span class = "o" > = < / span><span class = "s" > 'q' < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax< / span><span class = "p" >,< / span> <span class = "n" >fit< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >)< / span> |
In [18]:
1 2 3 4 5 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax1< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 211 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_acf< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "o" >.< / span><span class = "n" >values< / span><span class = "o" >.< / span><span class = "n" >squeeze< / span><span class = "p" >(),< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax1< / span><span class = "p" >)< / span> <span class = "n" >ax2< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 212 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_pacf< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "p" >,< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax2< / span><span class = "p" >)< / span> |
In [19]:
1 2 3 4 | <span class = "n" >r< / span><span class = "p" >,< / span><span class = "n" >q< / span><span class = "p" >,< / span><span class = "n" >p< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >acf< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "o" >.< / span><span class = "n" >values< / span><span class = "o" >.< / span><span class = "n" >squeeze< / span><span class = "p" >(),< / span> <span class = "n" >qstat< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >)< / span> <span class = "n" >data< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >c_< / span><span class = "p" >[< / span><span class = "nb" > range < / span><span class = "p" >(< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span><span class = "mi" > 41 < / span><span class = "p" >),< / span> <span class = "n" >r< / span><span class = "p" >[< / span><span class = "mi" > 1 < / span><span class = "p" >:],< / span> <span class = "n" >q< / span><span class = "p" >,< / span> <span class = "n" >p< / span><span class = "p" >]< / span> <span class = "n" >table< / span> <span class = "o" > = < / span> <span class = "n" >pd< / span><span class = "o" >.< / span><span class = "n" >DataFrame< / span><span class = "p" >(< / span><span class = "n" >data< / span><span class = "p" >,< / span> <span class = "n" >columns< / span><span class = "o" > = < / span><span class = "p" >[< / span><span class = "s" > 'lag' < / span><span class = "p" >,< / span> <span class = "s" > "AC" < / span><span class = "p" >,< / span> <span class = "s" > "Q" < / span><span class = "p" >,< / span> <span class = "s" > "Prob(>Q)" < / span><span class = "p" >])< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >table< / span><span class = "o" >.< / span><span class = "n" >set_index< / span><span class = "p" >(< / span><span class = "s" > 'lag' < / span><span class = "p" >))< / span> |
- This indicates a lack of fit.
- In-sample dynamic prediction. How good does our model do?
In [20]:
1 2 | <span class = "n" >predict_sunspots< / span> <span class = "o" > = < / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >predict< / span><span class = "p" >(< / span><span class = "s" > '1990' < / span><span class = "p" >,< / span> <span class = "s" > '2012' < / span><span class = "p" >,< / span> <span class = "n" >dynamic< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >predict_sunspots< / span><span class = "p" >)< / span> |
In [21]:
1 2 3 | <span class = "n" >fig< / span><span class = "p" >,< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >subplots< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span> <span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >dta< / span><span class = "o" >.< / span><span class = "n" >ix< / span><span class = "p" >[< / span><span class = "s" > '1950' < / span><span class = "p" >:]< / span><span class = "o" >.< / span><span class = "n" >plot< / span><span class = "p" >(< / span><span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax< / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >arma_mod30< / span><span class = "o" >.< / span><span class = "n" >plot_predict< / span><span class = "p" >(< / span><span class = "s" > '1990' < / span><span class = "p" >,< / span> <span class = "s" > '2012' < / span><span class = "p" >,< / span> <span class = "n" >dynamic< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax< / span><span class = "p" >,< / span> <span class = "n" >plot_insample< / span><span class = "o" > = < / span><span class = "bp" > False < / span><span class = "p" >)< / span> |
In [22]:
1 2 | <span class = "k" > def < / span> <span class = "nf" >mean_forecast_err< / span><span class = "p" >(< / span><span class = "n" >y< / span><span class = "p" >,< / span> <span class = "n" >yhat< / span><span class = "p" >):< / span> <span class = "k" > return < / span> <span class = "n" >y< / span><span class = "o" >.< / span><span class = "n" >sub< / span><span class = "p" >(< / span><span class = "n" >yhat< / span><span class = "p" >)< / span><span class = "o" >.< / span><span class = "n" >mean< / span><span class = "p" >()< / span> |
In [23]:
1 | <span class = "n" >mean_forecast_err< / span><span class = "p" >(< / span><span class = "n" >dta< / span><span class = "o" >.< / span><span class = "n" >SUNACTIVITY< / span><span class = "p" >,< / span> <span class = "n" >predict_sunspots< / span><span class = "p" >)< / span> |
Out[23]:
Exercise: Can you obtain a better fit for the Sunspots model? (Hint: sm.tsa.AR has a method select_order)
Simulated ARMA(4,1): Model Identification is Difficult
In [24]:
1 | <span class = "kn" > from < / span> <span class = "nn" >statsmodels.tsa.arima_process< / span> <span class = "kn" > import < / span> <span class = "n" >arma_generate_sample< / span><span class = "p" >,< / span> <span class = "n" >ArmaProcess< / span> |
In [25]:
1 2 3 4 | <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >random< / span><span class = "o" >.< / span><span class = "n" >seed< / span><span class = "p" >(< / span><span class = "mi" > 1234 < / span><span class = "p" >)< / span> <span class = "c" > # include zero-th lag</span> <span class = "n" >arparams< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >array< / span><span class = "p" >([< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 75 < / span><span class = "p" >,< / span> <span class = "o" > - .< / span><span class = "mi" > 65 < / span><span class = "p" >,< / span> <span class = "o" > - .< / span><span class = "mi" > 55 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 9 < / span><span class = "p" >])< / span> <span class = "n" >maparams< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >array< / span><span class = "p" >([< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 65 < / span><span class = "p" >])< / span> |
Let's make sure this model is estimable.
In [26]:
1 | <span class = "n" >arma_t< / span> <span class = "o" > = < / span> <span class = "n" >ArmaProcess< / span><span class = "p" >(< / span><span class = "n" >arparams< / span><span class = "p" >,< / span> <span class = "n" >maparams< / span><span class = "p" >)< / span> |
In [27]:
1 | <span class = "n" >arma_t< / span><span class = "o" >.< / span><span class = "n" >isinvertible< / span><span class = "p" >()< / span> |
In [28]:
1 | <span class = "n" >arma_t< / span><span class = "o" >.< / span><span class = "n" >isstationary< / span><span class = "p" >()< / span> |
- What does this mean?
In [29]:
1 2 3 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 111 < / span><span class = "p" >)< / span> <span class = "n" >ax< / span><span class = "o" >.< / span><span class = "n" >plot< / span><span class = "p" >(< / span><span class = "n" >arma_t< / span><span class = "o" >.< / span><span class = "n" >generate_sample< / span><span class = "p" >(< / span><span class = "n" >size< / span><span class = "o" > = < / span><span class = "mi" > 50 < / span><span class = "p" >));< / span> |
In [30]:
1 2 3 4 | <span class = "n" >arparams< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >array< / span><span class = "p" >([< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 35 < / span><span class = "p" >,< / span> <span class = "o" > - .< / span><span class = "mi" > 15 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 55 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 1 < / span><span class = "p" >])< / span> <span class = "n" >maparams< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >array< / span><span class = "p" >([< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span> <span class = "o" >.< / span><span class = "mi" > 65 < / span><span class = "p" >])< / span> <span class = "n" >arma_t< / span> <span class = "o" > = < / span> <span class = "n" >ArmaProcess< / span><span class = "p" >(< / span><span class = "n" >arparams< / span><span class = "p" >,< / span> <span class = "n" >maparams< / span><span class = "p" >)< / span> <span class = "n" >arma_t< / span><span class = "o" >.< / span><span class = "n" >isstationary< / span><span class = "p" >()< / span> |
In [31]:
1 | <span class = "n" >arma_rvs< / span> <span class = "o" > = < / span> <span class = "n" >arma_t< / span><span class = "o" >.< / span><span class = "n" >generate_sample< / span><span class = "p" >(< / span><span class = "n" >size< / span><span class = "o" > = < / span><span class = "mi" > 500 < / span><span class = "p" >,< / span> <span class = "n" >burnin< / span><span class = "o" > = < / span><span class = "mi" > 250 < / span><span class = "p" >,< / span> <span class = "n" >scale< / span><span class = "o" > = < / span><span class = "mf" > 2.5 < / span><span class = "p" >)< / span> |
In [32]:
1 2 3 4 5 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax1< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 211 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_acf< / span><span class = "p" >(< / span><span class = "n" >arma_rvs< / span><span class = "p" >,< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax1< / span><span class = "p" >)< / span> <span class = "n" >ax2< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 212 < / span><span class = "p" >)< / span> <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >graphics< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >plot_pacf< / span><span class = "p" >(< / span><span class = "n" >arma_rvs< / span><span class = "p" >,< / span> <span class = "n" >lags< / span><span class = "o" > = < / span><span class = "mi" > 40 < / span><span class = "p" >,< / span> <span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax2< / span><span class = "p" >)< / span> |
- For mixed ARMA processes the Autocorrelation function is a mixture of exponentials and damped sine waves after (q-p) lags.
- The partial autocorrelation function is a mixture of exponentials and dampened sine waves after (p-q) lags.
In [33]:
1 2 3 4 5 6 | <span class = "n" >arma11< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >ARMA< / span><span class = "p" >(< / span><span class = "n" >arma_rvs< / span><span class = "p" >,< / span> <span class = "p" >(< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span><span class = "mi" > 1 < / span><span class = "p" >))< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "n" >resid< / span> <span class = "o" > = < / span> <span class = "n" >arma11< / span><span class = "o" >.< / span><span class = "n" >resid< / span> <span class = "n" >r< / span><span class = "p" >,< / span><span class = "n" >q< / span><span class = "p" >,< / span><span class = "n" >p< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >acf< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "p" >,< / span> <span class = "n" >qstat< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >)< / span> <span class = "n" >data< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >c_< / span><span class = "p" >[< / span><span class = "nb" > range < / span><span class = "p" >(< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span><span class = "mi" > 41 < / span><span class = "p" >),< / span> <span class = "n" >r< / span><span class = "p" >[< / span><span class = "mi" > 1 < / span><span class = "p" >:],< / span> <span class = "n" >q< / span><span class = "p" >,< / span> <span class = "n" >p< / span><span class = "p" >]< / span> <span class = "n" >table< / span> <span class = "o" > = < / span> <span class = "n" >pd< / span><span class = "o" >.< / span><span class = "n" >DataFrame< / span><span class = "p" >(< / span><span class = "n" >data< / span><span class = "p" >,< / span> <span class = "n" >columns< / span><span class = "o" > = < / span><span class = "p" >[< / span><span class = "s" > 'lag' < / span><span class = "p" >,< / span> <span class = "s" > "AC" < / span><span class = "p" >,< / span> <span class = "s" > "Q" < / span><span class = "p" >,< / span> <span class = "s" > "Prob(>Q)" < / span><span class = "p" >])< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >table< / span><span class = "o" >.< / span><span class = "n" >set_index< / span><span class = "p" >(< / span><span class = "s" > 'lag' < / span><span class = "p" >))< / span> |
In [34]:
1 2 3 4 5 6 | <span class = "n" >arma41< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >ARMA< / span><span class = "p" >(< / span><span class = "n" >arma_rvs< / span><span class = "p" >,< / span> <span class = "p" >(< / span><span class = "mi" > 4 < / span><span class = "p" >,< / span><span class = "mi" > 1 < / span><span class = "p" >))< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "n" >resid< / span> <span class = "o" > = < / span> <span class = "n" >arma41< / span><span class = "o" >.< / span><span class = "n" >resid< / span> <span class = "n" >r< / span><span class = "p" >,< / span><span class = "n" >q< / span><span class = "p" >,< / span><span class = "n" >p< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >acf< / span><span class = "p" >(< / span><span class = "n" >resid< / span><span class = "p" >,< / span> <span class = "n" >qstat< / span><span class = "o" > = < / span><span class = "bp" > True < / span><span class = "p" >)< / span> <span class = "n" >data< / span> <span class = "o" > = < / span> <span class = "n" >np< / span><span class = "o" >.< / span><span class = "n" >c_< / span><span class = "p" >[< / span><span class = "nb" > range < / span><span class = "p" >(< / span><span class = "mi" > 1 < / span><span class = "p" >,< / span><span class = "mi" > 41 < / span><span class = "p" >),< / span> <span class = "n" >r< / span><span class = "p" >[< / span><span class = "mi" > 1 < / span><span class = "p" >:],< / span> <span class = "n" >q< / span><span class = "p" >,< / span> <span class = "n" >p< / span><span class = "p" >]< / span> <span class = "n" >table< / span> <span class = "o" > = < / span> <span class = "n" >pd< / span><span class = "o" >.< / span><span class = "n" >DataFrame< / span><span class = "p" >(< / span><span class = "n" >data< / span><span class = "p" >,< / span> <span class = "n" >columns< / span><span class = "o" > = < / span><span class = "p" >[< / span><span class = "s" > 'lag' < / span><span class = "p" >,< / span> <span class = "s" > "AC" < / span><span class = "p" >,< / span> <span class = "s" > "Q" < / span><span class = "p" >,< / span> <span class = "s" > "Prob(>Q)" < / span><span class = "p" >])< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >table< / span><span class = "o" >.< / span><span class = "n" >set_index< / span><span class = "p" >(< / span><span class = "s" > 'lag' < / span><span class = "p" >))< / span> |
Exercise: How good of in-sample prediction can you do for another series, say, CPI
In [35]:
1 2 3 | <span class = "n" >macrodta< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >macrodata< / span><span class = "o" >.< / span><span class = "n" >load_pandas< / span><span class = "p" >()< / span><span class = "o" >.< / span><span class = "n" >data< / span> <span class = "n" >macrodta< / span><span class = "o" >.< / span><span class = "n" >index< / span> <span class = "o" > = < / span> <span class = "n" >pd< / span><span class = "o" >.< / span><span class = "n" >Index< / span><span class = "p" >(< / span><span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >datetools< / span><span class = "o" >.< / span><span class = "n" >dates_from_range< / span><span class = "p" >(< / span><span class = "s" > '1959Q1' < / span><span class = "p" >,< / span> <span class = "s" > '2009Q3' < / span><span class = "p" >))< / span> <span class = "n" >cpi< / span> <span class = "o" > = < / span> <span class = "n" >macrodta< / span><span class = "p" >[< / span><span class = "s" > "cpi" < / span><span class = "p" >]< / span> |
Hint:
In [36]:
1 2 3 4 | <span class = "n" >fig< / span> <span class = "o" > = < / span> <span class = "n" >plt< / span><span class = "o" >.< / span><span class = "n" >figure< / span><span class = "p" >(< / span><span class = "n" >figsize< / span><span class = "o" > = < / span><span class = "p" >(< / span><span class = "mi" > 12 < / span><span class = "p" >,< / span><span class = "mi" > 8 < / span><span class = "p" >))< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >fig< / span><span class = "o" >.< / span><span class = "n" >add_subplot< / span><span class = "p" >(< / span><span class = "mi" > 111 < / span><span class = "p" >)< / span> <span class = "n" >ax< / span> <span class = "o" > = < / span> <span class = "n" >cpi< / span><span class = "o" >.< / span><span class = "n" >plot< / span><span class = "p" >(< / span><span class = "n" >ax< / span><span class = "o" > = < / span><span class = "n" >ax< / span><span class = "p" >);< / span> <span class = "n" >ax< / span><span class = "o" >.< / span><span class = "n" >legend< / span><span class = "p" >();< / span> |
P-value of the unit-root test, resoundly rejects the null of no unit-root.
In [37]:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >tsa< / span><span class = "o" >.< / span><span class = "n" >adfuller< / span><span class = "p" >(< / span><span class = "n" >cpi< / span><span class = "p" >)[< / span><span class = "mi" > 1 < / span><span class = "p" >])< / span> |
Please login to continue.