Beschreiben Sie, wie Sie den Beuteltest mit Python durchführen
Eine Methode, um zu testen, ob eine Reihe von Korrelationsfunktionen korreliert.
Weitere Informationen finden Sie unter [wikipedia](https://ja.wikipedia.org/wiki/%E3%81%8B%E3%81%B0%E3%82%93%E6%A4%9C%E5% AE% 9A)
Zum Beispiel bei der Durchführung des Ljung-Box-Tests statsmodels.stats.diagnostic.acorr_ljungbox Wird genutzt. Klicken Sie hier für Details (https://www.statsmodels.org/stable/generated/statsmodels.stats.diagnostic.acorr_ljungbox.html)
Zum Beispiel wird der Test unter Verwendung von zufällig erzeugtem Rauschen (weißes Gaußsches Rauschen) durchgeführt. Natürlich sollte es keine Korrelation geben, daher sollte die Nullhypothese nicht zurückgewiesen werden.
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
import numpy as np
from statsmodels.stats.diagnostic import acorr_ljungbox
p = print
#Datenpunkte sind 1000 Punkte
np.random.seed(42)
data = np.random.standard_normal(1000)
#Zeichnen Sie zuerst die Daten
plt.figure(figsize=(10,6))
plt.plot(data,lw = 1.5)
plt.xlabel('time')
plt.ylabel('value')
plt.xlim([0,100])
plt.title('time vs. value plot');
Natürlich werden die Zeitreihendaten des weißen Gaußschen Rauschens aufgezeichnet.
Lassen Sie uns dies mit einer Tasche testen.
result = acorr_ljungbox(data,lags = 5)
p(result)
Das Ergebnis ist wie folgt.
(array([0.05608493, 0.05613943, 0.31898424, 3.27785331, 3.94903872]), array([0.81279444, 0.97232058, 0.9564194 , 0.51244884, 0.55677627]))
Es wird in einem Tapple-Format mit zwei Elementen ausgegeben, das erste ist die Teststatistik und das zweite ist der p-Wert. Machen wir es tabellarisch, damit es schön aussieht.
result_table = pd.DataFrame(data = result, index=['static value', 'P value'],columns=[str(i) for i in range(1,6)])
result_table
Das folgende Ergebnis wird ausgegeben. Die Säulenrichtung entspricht der Größe der Nase.
Als nächstes testen wir den MA (2) -Prozess. Nehmen Sie die folgende Formel an.
y_t = 1 + \epsilon_t + 0.5 \epsilon_{t-3}
$ \ Epsilon_t $ ist jedoch weißes Gaußsches Rauschen. Wie Sie der Form der Formel entnehmen können, scheint es eine Korrelation zu geben, wenn der Zeitunterschied 3 beträgt (z. B. $ y_5 $ und $ y_8 $). Natürlich kann es mathematisch bestätigt werden, aber dies wird durch den Beuteltest bestätigt.
#Modelldaten erstellen
data = np.zeros(1000)
np.random.seed(42)
err = np.random.standard_normal(1000)
for i in range(1000):
if i-3 < 0:
data[i] = 1 + err[i]
else:
data[i] = 1 + err[i] + 0.5 * err[i-3]
#Zeichnen Sie zuerst die Daten
plt.figure(figsize=(10,6))
plt.plot(data,lw = 1.5)
plt.xlabel('time')
plt.ylabel('value')
plt.title('time vs. value plot (MA(3) model)')
plt.xlim([0,100])
result = acorr_ljungbox(data,lags = 5)
result_table = pd.DataFrame(data = result, index=['static value', 'P value'],columns=[str(i) for i in range(1,6)])
result_table
Wenn beispielsweise P bei 0,05 getestet wird, gibt es keinen signifikanten Unterschied, wenn die Verzögerung 2 oder weniger beträgt, aber es stellt sich heraus, dass es einen signifikanten Unterschied gibt, wenn es 3 oder mehr ist (dh wenn $ \ rho_3 $ enthalten ist). Ich werde.
Recommended Posts