ARMA程序的值如何在python中連結
在下面的程式碼中,您可以看到 ‘ret’ 是一個 ARMA 程序,我正在嘗試查看 ret
$$ 0 $$等… ret3、ret4 等相互連結,雖然我知道 ARMA 過程的公式(見下文),但我無法手動重現,例如 ret$$ 4 $$從以前的值…有什麼幫助嗎?
我嘗試如下重現它,但它沒有給出 ret
您可以在下面找到文本中的程式碼:
import pandas as pd import numpy as np np.random.seed(200) ar_params = np.array([1, -0.5]) ma_params = np.array([1, -0.3]) print(ar_params) print(ma_params) from statsmodels.tsa.arima_process import ArmaProcess length = 5 * 252 np.random.seed(200) ret = ArmaProcess(ar_params, ma_params).generate_sample(nsample=length) ret = pd.Series(ret) print('========================') print("\nret = ", ret) ;
首先,請注意 $ \epsilon_t \sim N(0,1) $ 是一個白雜訊過程,隨機變數是根據標準正態分佈模擬的。
ret[2]
因此,將和MA 參數相乘ret[3]
以重現ret[4]
.原始碼揭示瞭如何重現 ARMA 過程的模擬值:
從*ArmaProcess().generate_sample()函式的原始碼(參見此處)中,您會發現它有效地使用了 scipy 包中名為signal.lfilter()*的過濾算法。scipy 包中的信號過濾器可以定義為(再次參見此連結):
$$ \begin{equation} \phi_0 \cdot y_t = \theta_0 \epsilon_t + \theta_{1} \epsilon_{t-1} + \ldots+\theta_{q} \epsilon_{t-q} - \phi_1 y_{t-1} - \ldots - \phi_p y_{t-p} , \end{equation} $$ 在哪裡 $ p $ 和 $ q $ 指過濾算法中滯後項的數量。將上述濾波器算法轉換為 ARMA(p,q) 過程的一種方法是簡單地設置 $ \phi_0 = \theta_0 = 1 $ 並否定其餘的phi。*ArmaProcess().generate_sample()*函式的文件中也提到了這兩件事,這就是為什麼您的上述程式碼在
ar_params
and的第一個條目中包含 1 的原因ma_params
。現在,我們可以觀察到上面的程式碼模擬了一個 ARMA(1,1) 過程,並假設您已經否定了 AR 參數, $ \phi_1 $ , 那麼ret[4]
( $ y_4 $ ) 可以通過以下方式找到:$$ \begin{equation} y_4= \epsilon_4 + (- 0.3) \cdot \epsilon_{3} - y_{3} \cdot (-0.5) = 0.5 \cdot y_3 - 0.3 \cdot \epsilon_3 + \epsilon_4. \end{equation} $$ 我提供了一些使用*signal.lfilter()方法恢復**ArmaProcess().generate_sample()*模擬的Python 程式碼,如下所示:
import pandas as pd import numpy as np import scipy as sc np.random.seed(200) whitenoise = np.random.normal(size=length) test = sc.signal.lfilter(ma_params, ar_params, whitenoise) test = pd.Series(test) test
根據您自己的程式碼(或者您可以使用test)和上述等式,我們可以手動計算
ret[4]
:ret4 = ma_params[0] * whitenoise[4] + ma_params[1] * whitenoise[3] - ret[3] * ar_params[1] ret4
我鼓勵您閱讀*signal.lfilter()*函式的文件,以進一步了解算法如何初始化等。但是,這應該是它的要點。我希望這能提供一些指導。