statsmodels.tsa.seasonal.STL

class statsmodels.tsa.seasonal.STL(endog, period=None, seasonal=7, trend=None, low_pass=None, seasonal_deg=1, trend_deg=1, low_pass_deg=1, robust=False, seasonal_jump=1, trend_jump=1, low_pass_jump=1)

使用LOESS进行季节趋势分解。

Parameters:
endogarray_like

要分解的数据。必须可以压缩到1维。

period{int, None}, optional

序列的周期性。如果为None且endog是pandas Series或DataFrame,尝试从endog中确定。如果endog是ndarray,则必须提供period。

seasonalint, optional

季节性平滑器的长度。必须是奇数整数,通常应大于等于7(默认)。

trend{int, None}, optional

趋势平滑器的长度。必须是奇数整数。如果未提供,则使用大于 1.5 * 周期 / (1 - 1.5 / 季节性) 的最小奇数整数,遵循原始实现中的建议。

low_pass{int, None}, optional

低通滤波器的长度。必须是大于等于3的奇数整数。如果未提供,则使用大于周期的最小奇数整数。

seasonal_degint, optional

季节性LOESS的程度。0(常数)或1(常数和趋势)。

trend_degint, optional

趋势LOESS的程度。0(常数)或1(常数和趋势)。

low_pass_degint, optional

低通LOESS的阶数。0(常数)或1(常数和趋势)。

robustbool, optional

指示是否使用对某些类型的异常值具有鲁棒性的加权版本的标志。

seasonal_jumpint, optional

正整数,确定线性插值步长。如果大于1,则每隔seasonal_jump个点使用LOESS,并在拟合点之间进行线性插值。较高的值可以减少估计时间。

trend_jumpint, optional

正整数,确定线性插值步长。如果大于1,则每隔trend_jump个点使用LOESS,并且两点之间的值通过线性插值获得。较高的值可以减少估计时间。

low_pass_jumpint, optional

确定线性插值步长的正整数。如果大于1,则每隔low_pass_jump点使用LOESS,并且两点之间的值通过线性插值计算。较高的值可以减少估计时间。

Attributes:
config

模型中使用的参数。

period

时间序列的周期长度

注释

源自[1]编写的NETLIB fortran代码。原始代码在确定用于鲁棒加权的中位数时存在一个错误。此版本与使用正确分区排序来确定中位数的修复版本相匹配。

请参阅季节性分解笔记本以获取概述。

参考文献

[1]

R. B. 克利夫兰, W. S. 克利夫兰, J.E. 麦克雷, 和 I. 特彭宁 (1990) STL: 基于LOESS的季节性-趋势分解程序. 官方统计杂志, 6, 3-73.

示例

原始示例使用STL将CO2数据分解为水平、季节和残差。

从按月聚合开始,并填充任何缺失的值

>>> from statsmodels.datasets import co2
>>> import matplotlib.pyplot as plt
>>> from pandas.plotting import register_matplotlib_converters
>>> register_matplotlib_converters()
>>> data = co2.load(True).data
>>> data = data.resample('ME').mean().ffill()

周期(12)是根据数据的频率(‘M’)自动检测的。

>>> from statsmodels.tsa.seasonal import STL
>>> res = STL(data).fit()
>>> res.plot()
>>> plt.show()

(源代码, png, 高分辨率png, pdf)

../_images/stl_plot.png

方法

fit([inner_iter, outer_iter])

估计季节、趋势和残差成分。

属性

config

模型中使用的参数。

period

时间序列的周期长度


Last update: Oct 16, 2024