util/lib/analysis_package/timeseries/stationary_test.py

63 lines
3.3 KiB
Python

import pandas as pd
import numpy as np
from time_base import timeBase
import statsmodels.api as sm
import statsmodels.tsa.api as smt
import statsmodels.formula as smf
import scipy.stats as scs
class stationaryTest(Time_base):
"""
时间序列稳定性检验
"""
def __init__(self):
pass
def test_stationary(self, x, window_size):
"""
时间序列稳定性检验
x : 时间序列数据
window_size : 窗口大小
"""
x_ma = self.moving_average(x, window_size)
x_std = self.moving_std(x, window_size)
x_max = self.moving_max(x, window_size)
x_min = self.moving_min(x, window_size)
x_median = self.moving_median(x, window_size)
x_normalized = self.normalize(x)
x_ma_normalized = self.normalize(x_ma)
x_std_normalized = self.normalize(x_std)
x_max_normalized = self.normalize(x_max)
x_min_normalized = self.normalize(x_min)
x_median_normalized = self.normalize(x_median)
x_normalized_ma_normalized = self.normalize(x_normalized - x_ma_normalized)
x_normalized_std_normalized = self.normalize(x_normalized - x_std_normalized)
x_normalized_max_normalized = self.normalize(x_normalized - x_max_normalized)
x_normalized_min_normalized = self.normalize(x_normalized - x_min_normalized)
x_normalized_median_normalized = self.normalize(x_normalized - x_median_normalized)
x_normalized_ma_normalized_std_normalized = self.normalize(x_normalized_ma_normalized - x_std)
return x_normalized, x_ma_normalized, x_std_normalized, x_max_normalized, x_min_normalized, x_median_normalized, x_normalized_ma_normalized, x_normalized_std_normalized, x_normalized_max_normalized, x_normalized_min_normalized, x_normalized_median_normalized, x_normalized_ma_normalized_std_normalized
def adf_test(self, x, window_size):
"""
时间序列稳定性检验
x : 时间序列数据
window_size : 窗口大小
"""
x_normalized, x_ma_normalized, x_std_normalized, x_max_normalized, x_min_normalized, x_median_normalized, x_normalized_ma_normalized, x_normalized_std_normalized, x_normalized_max_normalized, x_normalized_min_normalized, x_normalized_median_normalized, x_normalized_ma_normalized_std_normalized = self.test_stationary(x, window_size)
adf_test_normalized = smt.adfuller(x_normalized)
adf_test_ma_normalized = smt.adfuller(x_ma_normalized)
adf_test_std_normalized = smt.adfuller(x_std_normalized)
adf_test_max_normalized = smt.adfuller(x_max_normalized)
adf_test_min_normalized = smt.adfuller(x_min_normalized)
adf_test_median_normalized = smt.adfuller(x_median_normalized)
adf_test_normalized_ma_normalized = smt.adfuller(x_normalized_ma_normalized)
adf_test_normalized_std_normalized = smt.adfuller(x_normalized_std_normalized)
adf_test_normalized_max_normalized = smt.adfuller(x_normalized_max_normalized)
adf_test_normalized_min_normalized = smt.adfuller(x_normalized_min_normalized)
return adf_test_normalized, adf_test_ma_normalized, adf_test_std_normalized, adf_test_max_normalized, adf_test_min_normalized, adf_test_median_normalized, adf_test_normalized_ma_normalized, adf_test_normalized_std_normalized, adf_test_normalized_max_normalized, adf_test_normalized_min_normalized