"Analyse des séries chronologiques de mesure des données économiques et financières" Résolution du problème de fin de chapitre avec Python

[Tatsuyoshi Okimoto "Analyse des séries temporelles de mesure des données économiques et financières"](https://www.amazon.co.jp/gp/product/4254127928/ref=as_li_ss_tl?ie=UTF8&ref_=nav_ya_signin&&linkCode=ll1&tag=sankdichi92-22&linkIdichi92 = cda8aa8cd64ad2bda6a911e37a8c9ca1) Je résous le problème de fin de chapitre "en utilisant un ordinateur" avec ** Python **.

@aokikenichi a écrit un article sur ce qu'il a résolu avec ** R ** comme suit, j'ai donc décidé de publier ce que j'avais résolu avec Python auparavant.

Cependant, il était difficile de coller le graphique résultant, donc je n'écris que le code ici. Pour le résultat de la sortie, reportez-vous à ** Télécharger Jupyter Notebook vers Gist **.

Bibliothèque à utiliser

import numpy as np
import pandas as pd
from statsmodels.tsa.api import stattools, AR, ARMA, VAR
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox
import matplotlib.pyplot as plt

En particulier, j'utilise souvent pandas et statsmodels.tsa. J'ai évoqué les documents suivants.

1. Concept de base de l'analyse des séries chronologiques

1.3

mu_sigma = [(0, 1), (2, 1), (-2, 1), (0, 2), (0, 3), (2, 2)]
white_noise = DataFrame()
for mu, sigma in mu_sigma:
    name = '$\mu={0}, \sigma={1}$'.format(mu, sigma)
    white_noise[name] = np.random.normal(mu, sigma, 100)
white_noise.plot(subplots=True, layout=(3,2), figsize=(12, 12))

1.5

economicdata = pd.read_excel('http://www.geocities.jp/tatsuyoshi_okimoto/books/tsa/economicdata.xls', index_col='date')

(1)

economicdata.plot(subplots=True, layout=(3,2), figsize=(12, 12))

(2)

economicdata_pct = np.log(economicdata).diff() * 100

(3)

economicdata_pct[['topix', 'exrate', 'indprod']].plot(subplots=True, figsize=(12, 12))

(4)

indprod = economicdata_pct.indprod.dropna()

plot_acf(indprod, lags=20)
def portmanteau_test(endog, lags=10):
    q_m, pvalues = acorr_ljungbox(endog, lags=lags)
    df = pd.DataFrame([q_m.round(2), pvalues.round(3)], index=['Q(m)', 'valeur p'], columns=range(1, lags + 1))
    return df

print(portmanteau_test(indprod))

(5)

topix = economicdata_pct.topix.dropna()
print(portmanteau_test(topix))
exrate = economicdata_pct.exrate.dropna()
print(portmanteau_test(exrate))

2. Processus ARMA

2.5

(1)

def plot_acf_pacf(x, lags=20):
    fig = plt.figure(figsize=(12,4))
    ax1 = fig.add_subplot(121)
    plot_acf(x, ax=ax1, lags=lags)
    ax2 = fig.add_subplot(122)
    plot_pacf(x, ax=ax2, lags=lags)
    return fig

plot_acf_pacf(indprod)
ar4 = AR(indprod).fit(maxlag=4)
plot_acf(ar4.resid, lags=20)
arma12 = ARMA(indprod, (1,2)).fit()
plot_acf(arma12.resid, lags=20)
def arma_order_select(y, orders):
    df = pd.DataFrame(index=['AIC', 'SIC'])
    for order in orders:
        model = ARMA(y, order).fit()
        df[str(order)] = [round(model.aic, 1), round(model.bic, 1)]
    df['min'] = df.idxmin(axis=1)
    return df

orders = [(4,0), (0,3), (1,1), (2,1), (1,2), (2,2)]
print(arma_order_select(indprod, orders))

(2)

print(portmanteau_test(ar4.resid))
print(portmanteau_test(arma12.resid))

2.6

arma = pd.read_excel('http://www.geocities.jp/tatsuyoshi_okimoto/books/tsa/arma.xls')

(1)

y1 = arma.y1.values
plot_acf_pacf(y1)

(3)

order_select = stattools.arma_order_select_ic(y1, max_ar=2, max_ma=2,  ic=['aic', 'bic'])
print(order_select['aic'])
print(order_select['bic'])
print('AIC:', order_select['aic_min_order'], ', SIC:', order_select['bic_min_order'])

(4)

ar2 = AR(y1).fit(maxlag=2)
plot_acf(ar2.resid, lags=20)
print(portmanteau_test(ar2.resid))
arma21 = ARMA(y1, (2,1)).fit()
plot_acf(arma21.resid, lags=20)
print(portmanteau_test(arma21.resid))

(5)

y2 = arma.y2.values
plot_acf_pacf(y2)
order_select = stattools.arma_order_select_ic(y2, max_ar=2, max_ma=2, ic=['aic', 'bic'])
print(order_select['aic'])
print(order_select['bic'])
print('AIC:', order_select['aic_min_order'], ', SIC:', order_select['bic_min_order'])
arma21 = ARMA(y2, (2,1)).fit()
plot_acf(arma21.resid, lags=20)
print(portmanteau_test(arma21.resid))
y3 = arma.y3.values
plot_acf_pacf(y3)
orders = [(4,0), (8,0), (1,1), (1,2), (1,3), (2,1), (2,2), (2,3)]
print(arma_order_select(y3, orders))
arma23 = ARMA(y3, (2,3)).fit()
plot_acf(arma23.resid, lags=20)
print(portmanteau_test(arma23.resid))
arma11 = ARMA(y3, (1,1)).fit()
plot_acf(arma11.resid, lags=20)
print(portmanteau_test(arma11.resid))

4. Modèle VAR

msci_day = pd.read_excel('http://www.geocities.jp/tatsuyoshi_okimoto/books/tsa/msci_day.xls', index_col='Date')
msci_pct = np.log(msci_day).diff().dropna() * 100

4.5

(1)

jp_uk_us = ['jp', 'uk', 'us']
var3 = VAR(msci_pct[jp_uk_us]).fit(3)

import itertools

df = pd.DataFrame(index=['Montant du test statistique', 'valeur p'])
for pair in itertools.permutations(jp_uk_us, r=2):
    col = pair[1] + ' → ' + pair[0]
    res = var3.test_causality(*pair, verbose=False)
    df[col] = [res['statistic'].round(3), res['pvalue'].round(3)]
print(df)
var3.irf().plot(orth=True)
var3.fevd().plot()

4.6

(4)

model = VAR(msci_pct[['jp', 'fr', 'ca']])
model.select_order(10)
result = model.fit(maxlags=10, ic='aic')

(5)

result.test_causality('fr', 'jp')

result.test_causality('fr', 'ca')

(6)

result.irf().plot(impulse='fr', response='jp')

(7)

result.fevd().plot()

Recommended Posts

"Analyse des séries chronologiques de mesure des données économiques et financières" Résolution du problème de fin de chapitre avec Python
Implémentation de la méthode de clustering k-shape pour les données de séries chronologiques [Apprentissage non supervisé avec python Chapitre 13]
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Tracer CSV de données de séries temporelles avec une valeur unixtime en Python (matplotlib)
Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)
Voir les détails des données de séries chronologiques dans Remotte
Formater et afficher des données de séries chronologiques avec différentes échelles et unités avec Python ou Matplotlib
Analyse de données avec python 2
Analyse de données avec Python
Défiez l'analyse des composants principaux des données textuelles avec Python
Analyse des données de mesure (2) -Hydrobacter et raccord, recommandation lmfit-
J'ai essayé d'implémenter "Bases de l'analyse des séries temporelles et du modèle d'espace d'état" (Hayamoto) avec pystan
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
Python pour l'analyse des données Chapitre 4
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ②
Effectuer une analyse isocurrent des canaux en eau libre avec Python et matplotlib
Débarrassez-vous des données sales avec Python et les expressions régulières
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ①
Mesure du temps d'exécution avec Python avec
[Python] Tracer des données de séries chronologiques
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Python pour l'analyse des données Chapitre 2
Python pour l'analyse des données Chapitre 3
Livres et sources recommandés de programmation d'analyse de données (Python ou R)
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
Comparaison de la prédiction des données de séries chronologiques entre le modèle SARIMA et le modèle Prophet
Exercice pratique d'analyse de données avec Python ~ 2016 New Coder Survey Edition ~
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)
[Python] Obtenez des données économiques avec DataReader
À propos des données de séries chronologiques et du surentraînement
Différenciation des données de séries chronologiques (discrètes)
Analyse de données à partir de python (visualisation de données 1)
Coexistence de Python2 et 3 avec CircleCI (1.0)
Analyse de données à partir de python (visualisation de données 2)
Réécrivez le nœud de création de champ de SPSS Modeler avec Python. Extraction de caractéristiques à partir de données de capteurs de séries temporelles
Puissance des méthodes de prédiction dans l'analyse de données chronologiques Semi-optimisation (SARIMA) [Memo]
Essayez de créer foldl et foldr avec Python: lambda. Aussi mesure du temps
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 3: Exploration et visualisation des données
J'ai 0 ans d'expérience en programmation et je défie le traitement des données avec python
Réhabilitation des compétences Python et PNL à partir de "100 Language Processing Knock 2015" (Chapitre 1)
Prédiction des données de séries chronologiques par projection simplex
Construction de pipeline de données avec Python et Luigi
Prédire les données de séries chronologiques avec un réseau neuronal
Points à noter lors de la résolution de problèmes DP avec Python
[Python] Accélère le chargement du fichier CSV de séries chronologiques
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Analyse des tweets avec Python, Mecab et CaboCha
Recommandation d'Altair! Visualisation des données avec Python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Introduction facile de la série python3 et d'OpenCV3
Lecture des données de séries chronologiques OpenFOAM et des ensembles de données
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
Analyse des données de pratique Python Résumé de l'apprentissage que j'ai atteint environ 10 avec 100 coups
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
Un beau dessin graphique avec Python -seaborn facilite l'analyse et la visualisation des données Partie 1
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Un beau dessin graphique avec Python -seaborn facilite l'analyse et la visualisation des données Partie 2
Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python
[Bases des statistiques mathématiques modernes avec python] Chapitre 2: Distribution des probabilités et valeur attendue