statsmodels.tsa._stl.STL "Unable to determine period from endog"
Asked Answered
A

1

9

I want to get decomposed by statsmodels STL method

my time series data looks like bellow:

         success.rate
Date
2020-09-11  24.735701
2020-09-14  24.616301
2020-09-15  24.695900
2020-09-16  24.467051
2020-09-17  24.118799

when I put it into STL like

STL(sdf, seasonal=20, robust=True)

I always get error like:

--------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/mnt/d/mywork/test
 STL(sdf,seasonal=20, robust=True)
----> 1 STL(sdf, seasonal=20, robust=True)

statsmodels/tsa/_stl.pyx in statsmodels.tsa._stl.STL.__init__()

ValueError: Unable to determine period from endog
Atrip answered 23/6, 2021 at 7:56 Comment(0)
A
10

If your time series does not have a known frequency on the index (e.g., sdf.index.freq is None, then you need to set the period of the seasonality using the period. seasonal tells STL how many full seasons to use in the seasonal LOWESS but doesn't tell STL how many observations are needed for a full period.

from statsmodels.datasets import co2
from statsmodels.tsa.seasonal import STL
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

data = co2.load(True).data
data = data.resample('M').mean().ffill()

# Remove freq info
data.index = [i for i in range(data.shape[0])]

res = STL(data, period=12).fit()
res.plot()
plt.show()

This code produces

STL Demonstration

Asclepiadaceous answered 28/6, 2021 at 16:41 Comment(2)
Kevin, this exactly resolves my problem, thanks~Atrip
how to detect the period? Month? Yearly or day?Freitas

© 2022 - 2024 — McMap. All rights reserved.