在 ARIMA 时间序列建模 python pandas 中为 Adfuller 测试(平稳性测试)提取 p 值

Posted

技术标签:

【中文标题】在 ARIMA 时间序列建模 python pandas 中为 Adfuller 测试(平稳性测试)提取 p 值【英文标题】:Extract p values in a list for Adfuller test(Test for stationarity) in ARIMA Time series modeling python pandas 【发布时间】:2020-05-17 02:11:23 【问题描述】:

df

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

等等……

为时间序列中的 ARIMA 建模编写更全面的测试的代码。 (将为数据框df的所有列计算p值)

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 值

所以一个列表将是 col1 和 col2(第二个值/p 值

【问题讨论】:

也许这会对你有所帮助?它刚刚发布... ***.com/questions/60003381/… list_a = [k for k, v in adf_result.items() if v[1] <= 0.05]list_b = [k for k, v in adf_result.items() if v[1] > 0.05] ...? 【参考方案1】:
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']

【讨论】:

以上是关于在 ARIMA 时间序列建模 python pandas 中为 Adfuller 测试(平稳性测试)提取 p 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 进行 ARIMA 建模的奇怪案例

建模 ARIMA 时出现 LinAlgError

Auto.arima() 函数不会产生白噪声。我还应该如何对数据进行建模

利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)

Python数学建模系列:时间序列

时间序列建模预测之中国未来GDP预测