程式

ARMA程序的值如何在python中連結

  • March 30, 2021

在下面的程式碼中,您可以看到 ‘ret’ 是一個 ARMA 程序,我正在嘗試查看 ret

$$ 0 $$等… ret3、ret4 等相互連結,雖然我知道 ARMA 過程的公式(見下文),但我無法手動重現,例如 ret$$ 4 $$從以前的值…有什麼幫助嗎? 在此處輸入圖像描述

在此處輸入圖像描述

我嘗試如下重現它,但它沒有給出 ret

$$ 4 $$ 在此處輸入圖像描述

您可以在下面找到文本中的程式碼:

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_paramsand的第一個條目中包含 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()*函式的文件,以進一步了解算法如何初始化等。但是,這應該是它的要點。我希望這能提供一些指導。

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