Как создать al oop in Python (тест ADF с проверкой p-значения) - PullRequest
0 голосов
/ 31 января 2020

Мне нужна небольшая помощь по созданию al oop в Python. Вот код, который я использую:

import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
%matplotlib inline

df= pd.read_csv('original_data.csv', index_col='1')

from statsmodels.tsa.stattools import adfuller

def adf_test(timeseries):
    #Perform Dickey-Fuller test:
    test_types = ['nc','c','ct']
    for tests in test_types:
        print ('\n Results of Dickey-Fuller Test type =  {}:\n'.format(tests))
        dftest = adfuller(timeseries,regression=tests,autolag='AIC')
        dfoutput = pd.Series(dftest[0:4],index=['Test Statistic','p-value','#Lags used','#Observations used'])

       # for key, value in dftest[4].items():
       #     dfoutput['Critical value (%s)'%key] = value
        print(dfoutput)

    p_value = dftest[1]

    if p_value > 0.05:
        print('Unit root!')
    elif p_value < 0.05:
        print('No unit root!')


adf_test(df['2']) #2 is the number of the column in the cvs file

n = 1
df['rates_difference'] = df['2']-df['2'].shift(n)

adf_test(df['rates_difference'].dropna())

n = 1
df['rates_difference2'] = df['rates_difference']-df['rates_difference'].shift(n)

adf_test(df['rates_difference2'].dropna())

Идея состоит в том, что код проверяет, являются ли данные стационарными (значение p <0,05), используя 3 версии теста ADF. Если это не так, то мы должны сделать первое отличие и проверить еще раз. Если он снова не является стационарным, мы должны сделать вторую разницу и проверить значение p. Таким образом, этот процесс должен l oop, пока данные не станут стационарными. </p>

Заранее спасибо.

...