Décrivez comment effectuer le test du sac avec python
Une méthode pour tester s'il existe une corrélation dans une série de fonctions de corrélation.
Pour plus de détails, voir [wikipedia](https://ja.wikipedia.org/wiki/%E3%81%8B%E3%81%B0%E3%82%93%E6%A4%9C%E5% AE% 9A)
Par exemple, lors de l'exécution du test Ljung-Box statsmodels.stats.diagnostic.acorr_ljungbox Est utilisé. Cliquez ici pour plus de détails (https://www.statsmodels.org/stable/generated/statsmodels.stats.diagnostic.acorr_ljungbox.html)
Par exemple, le test est réalisé en utilisant un bruit généré aléatoirement (bruit gaussien blanc). Bien sûr, il ne devrait y avoir aucune corrélation, donc l'hypothèse nulle ne doit pas être rejetée.
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
#Les points de données sont de 1000 points
np.random.seed(42)
data = np.random.standard_normal(1000)
#Tracez d'abord les données
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');
Naturellement, les données chronologiques du bruit gaussien blanc sont tracées.
Testons cela avec un sac.
result = acorr_ljungbox(data,lags = 5)
p(result)
Le résultat est le suivant.
(array([0.05608493, 0.05613943, 0.31898424, 3.27785331, 3.94903872]), array([0.81279444, 0.97232058, 0.9564194 , 0.51244884, 0.55677627]))
Elle est sortie dans un format tapple avec deux éléments, le premier est la statistique de test et le second est la valeur p. Faisons un tableau pour qu'il soit beau.
result_table = pd.DataFrame(data = result, index=['static value', 'P value'],columns=[str(i) for i in range(1,6)])
result_table
Le résultat suivant est sorti. La direction de la colonne correspond à la taille de la patte.
Ensuite, testons le processus MA (2). Supposons la formule suivante.
y_t = 1 + \epsilon_t + 0.5 \epsilon_{t-3}
Cependant, $ \ epsilon_t $ est un bruit gaussien blanc. Comme vous pouvez le voir sur la forme de la formule, il semble qu'il y ait une corrélation lorsque le décalage horaire est de 3 (par exemple, $ y_5 $ et $ y_8 $). Bien sûr, cela peut être confirmé mathématiquement, mais cela est confirmé par le test du sac.
#Création de données de modèle
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]
#Tracez d'abord les données
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
Par exemple, lorsque P est testé à 0,05, il n'y a pas de différence significative lorsque le décalage est de 2 ou moins, mais il s'avère qu'il y a une différence significative lorsqu'il est de 3 ou plus (c'est-à-dire lorsque $ \ rho_3 $ est inclus). Je vais.
Recommended Posts