39 lines
1.2 KiB
Python
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) |