예제 순서
1.US Wholesale Price Index (WPI) 데이터 Set에 ARIMA order (1,1,1)을 넣어서 추정
2.1번 예제에 MA(4) 항을 넣어서 계절적 특성(seasonal effect) 을 추가한다
3.월별 항공사 데이터에 ARIMA order(2,1,0) 과 Seasonal order(1,1,0,12)를 넣기
4.외인성 회귀 변수가 있는 ARIMA (1,1) 모델의 사용
5.Dynamic Forecasting
===================================
필요 package import & Figure size 지정import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import requests
from scipy.stats import norm
from io import BytesIO
from datetime import datetime
pd.plotting.register_matplotlib_converters()
plt.rc("figure", figsize=(16,8))
plt.rc("font", size=14)
===================================
Example - 1 - US Wholesale Price Index (WPI) with ARIMA order (1,1,1)
Code# Dataset
wpi1 = requests.get('https://www.stata-press.com/data/r12/wpi1.dta').content
data = pd.read_stata(BytesIO(wpi1))
data.index = data.t
# Set the frequency
data.index.freq="QS-OCT"
# Fit the model
mod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(1,1,1))
res = mod.fit(disp=False)
print(res.summary())
Result
**붉은색에 인자가 (1,1,1)인것을 볼 수 있다**
**하단 파란 상자를 이용해 계산에 사용한다**
이를 이용해 최대 가능성 추정치를 산출하면 다음과 같이 계산이 된다
을 조합해 식을 변형시켜 다음과 같이 쓸 수 있다
===================================
Example - 2 - Add MA(4)항의 추가 (seasonal effects 를 위해)
Code# Dataset
data = pd.read_stata(BytesIO(wpi1))
data.index = data.t
data.index.freq="QS-OCT"
data['ln_wpi'] = np.log(data['wpi'])
data['D.ln_wpi'] = data['ln_wpi'].diff()
# Graph data
fig, axes = plt.subplots(1, 2, figsize=(15,4))
# Levels
axes[0].plot(data.index._mpl_repr(), data['wpi'], '-')
axes[0].set(title='US Wholesale Price Index')
# Log difference
axes[1].plot(data.index._mpl_repr(), data['D.ln_wpi'], '-')
axes[1].hlines(0, data.index[0], data.index[-1], 'r')
axes[1].set(title='US Wholesale Price Index - difference of logs');
# Graph data
fig, axes = plt.subplots(1, 2, figsize=(15,4))
fig = sm.graphics.tsa.plot_acf(data.iloc[1:]['D.ln_wpi'], lags=40, ax=axes[0])
fig = sm.graphics.tsa.plot_pacf(data.iloc[1:]['D.ln_wpi'], lags=40, ax=axes[1])
#Mode에 (1,1,1)삽입mod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(1,1,1))
#MA 인자(lag polynomial) 을 위해 삽입ar = 1 # this is the maximum degree specificationma = (1,0,0,1) # this is the lag polynomial specificationmod = sm.tsa.statespace.SARIMAX(data['wpi'], trend='c', order=(ar,1,ma))# Fit the modelmod = sm.tsa.statespace.SARIMAX(data['ln_wpi'], trend='c', order=(1,1,(1,0,0,1)))res = mod.fit(disp=False)print(res.summary())
댓글 없음:
댓글 쓰기