蟒蛇

Python 使用 statsmodels 重新生成 ARMA 參數

  • September 26, 2018

我正在嘗試從 python 中的 statsmodel 重新生成 ARMA 參數。我正在使用的程式碼是:

from statsmodels.tsa.arima_process import arma_generate_sample
import statsmodels.api as sm
arparams = np.array([.75, -.25])
maparams = np.array([.65, .35])
arparams = np.r_[1, -arparams]
maparam = np.r_[1, maparams]
nobs = 250
np.random.seed(2014)
y = arma_generate_sample(arparams, maparams, nobs) #generate ARMA series
res = sm.tsa.arma_order_select_ic(y, ic=['aic', 'bic'], trend='nc')
z = sm.tsa.ARMA(y, (2,2)).fit()
print z.arparams
array([ 0.13178508,  0.08568388])

重新生成的 AR 參數與我開始使用的參數不同。我究竟做錯了什麼?

你的程式碼邏輯沒問題。但是,參數的變異數較高,因為nobs=250相對較低。增加nobs,您的參數將最終收斂到您指定的參數。

import statsmodels.api as sm
import numpy as np

# Parameters.
ar = np.array([.75, -.25])
ma = np.array([.65, .35])

# Simulate an ARMA process.
np.random.seed(42)
y = sm.tsa.arma_generate_sample(
   ar=np.r_[1, -ar],
   ma=np.r_[1, ma],
   nsample=10000,
   sigma=1,
)

# Fit ARMA process on the simulates to check coefficients, ACF and PACF.
model = sm.tsa.ARMA(y, (2, 2)).fit(trend='c')

# Plot ACF and PACF of estimated model.
sm.tsa.graphics.plot_acf(y, lags=20, zero=True);
sm.tsa.graphics.plot_pacf(y, lags=20, zero=True);
model.summary()

參考:McKinney, W.、Perktold, J. 和 Seabold, S. (2011)

引用自:https://quant.stackexchange.com/questions/26257