dd/PA/code/stationary test.py
2025-05-15 16:32:52 +04:00

39 lines
1.2 KiB
Python

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from statsmodels.tsa.stattools import adfuller, kpss
# Ïðèìåð âðåìåííîãî ðÿäà
np.random.seed(42)
n = 100
time = pd.date_range(start='2020-01-01', periods=n, freq='D')
stationary_ts = np.random.normal(loc=0, scale=1, size=n)
trend_ts = np.linspace(0, 10, n) + stationary_ts
plt.figure(figsize=(12, 6))
plt.plot(time, stationary_ts, label='Ñòàöèîíàðíûé ðÿä')
plt.plot(time, trend_ts, label='Íåñòàöèîíàðíûé ðÿä ñ òðåíäîì')
plt.legend()
plt.title('Âèçóàëüíàÿ ïðîâåðêà ñòàöèîíàðíîñòè')
plt.show()
def adf_test(timeseries):
print("Ðåçóëüòàòû òåñòà Äèêè-Ôóëëåðà:")
dftest = adfuller(timeseries, autolag='AIC')
dfoutput = pd.Series(dftest[0:4],
index=['Òåñòîâàÿ ñòàòèñòèêà', 'p-value',
'Êîëè÷åñòâî ëàãîâ', 'Êîëè÷åñòâî íàáëþäåíèé'])
for key, value in dftest[4].items():
dfoutput[f'Êðèòè÷åñêîå çíà÷åíèå ({key})'] = value
print(dfoutput)
if dftest[1] <= 0.05:
print("Âûâîä: ðÿä ñòàöèîíàðíûé (îòâåðãàåì H0)")
else:
print("Âûâîä: ðÿä íåñòàöèîíàðíûé (íå îòâåðãàåì H0)")
adf_test(stationary_ts)
print("\n")
adf_test(trend_ts)