Извлечение значений p в список для теста Адфуллера (Тест на стационарность) в моделировании временных рядов ARIMA python pandas - PullRequest
2 голосов
/ 31 января 2020

df

 Col1   Col2   Col3
  12     10     3
   3      5     2
  100    12     10

и т. Д. .....

Код для написания теста adfuller для моделирования ARIMA во временных рядах. (вычислит значение p для всех столбцов кадра данных df)

import statsmodels.tsa.stattools as tsa
adf_results = {}
for col in df.columns.values:  
    adf_results[col] = tsa.adfuller(df[col])

Используя этот код, я получаю вывод в следующем формате: (вывод, когда я набираю adf_result)

 [IN] adf_result
 [OUT]
  {'Col1': (-4.236149193618492,
  0.0005719678593039654,  #This is the second value for this column/p value
  0,
  37,
  {'1%': -3.6209175221605827,
   '5%': -2.9435394610388332,
   '10%': -2.6104002410518627},
  138.66116123406837),
 'Col2': (-3.707023043984407,
  0.004015446231411924,  #This is the second value for this column/p value
  0,
  37,
  {'1%': -3.6209175221605827,
   '5%': -2.9435394610388332,
   '10%': -2.6104002410518627},
  144.6019873130419),
 'Col3': (1.8083888603589304,
  0.9983655107052215,   #This is the second value for this column/p value
  0,
  37,
  {'1%': -3.6209175221605827,
   '5%': -2.9435394610388332,
   '10%': -2.6104002410518627},
  -74.4384052778039)}

и скоро.

В этом вопросе второе значение / значение p *

    0.0005719678593039654, 0.004015446231411924 and 0.9983655107052215 for the 3 columns taken.

Мне нужны столбцы, где второе значение> 0,05 в одном списке, и столбцы, где значение p <0,05 в другом списке </p>

Таким образом, один список будет col1 и col2 (второе значение / значение p <0,05), а другой список будет col3 (второе значение / p значение <0,05) </p>

1 Ответ

2 голосов
/ 31 января 2020
import pandas as pd
from io import StringIO


data = StringIO("""
Col1 Col2 Col3
12 10 3
3 5 2
100 12 10
13 4 1
""")

# load data into data frame
df = pd.read_csv(data, sep=' ')

import statsmodels.tsa.stattools as tsa
adf_results = {}
for col in df.columns.values:
    adf_results[col] = tsa.adfuller(df[col])

# loop over dictionary data
columns_big = []
columns_small = []
for key, value in adf_results.items():
    if value[1] > 0.05:
        columns_big.append(key)
    else:
        columns_small.append(key)

Выход:

columns_big = ['Col1', 'Col3']
columns_small = ['Col2']
...