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。
- seasonal
int,optional 季节性平滑器的长度。必须是奇数整数,通常应大于等于7(默认)。
- trend{
int,None},optional 趋势平滑器的长度。必须是奇数整数。如果未提供,则使用大于 1.5 * 周期 / (1 - 1.5 / 季节性) 的最小奇数整数,遵循原始实现中的建议。
- low_pass{
int,None},optional 低通滤波器的长度。必须是大于等于3的奇数整数。如果未提供,则使用大于周期的最小奇数整数。
- seasonal_deg
int,optional 季节性LOESS的程度。0(常数)或1(常数和趋势)。
- trend_deg
int,optional 趋势LOESS的程度。0(常数)或1(常数和趋势)。
- low_pass_deg
int,optional 低通LOESS的阶数。0(常数)或1(常数和趋势)。
- robustbool,
optional 指示是否使用对某些类型的异常值具有鲁棒性的加权版本的标志。
- seasonal_jump
int,optional 正整数,确定线性插值步长。如果大于1,则每隔seasonal_jump个点使用LOESS,并在拟合点之间进行线性插值。较高的值可以减少估计时间。
- trend_jump
int,optional 正整数,确定线性插值步长。如果大于1,则每隔trend_jump个点使用LOESS,并且两点之间的值通过线性插值获得。较高的值可以减少估计时间。
- low_pass_jump
int,optional 确定线性插值步长的正整数。如果大于1,则每隔low_pass_jump点使用LOESS,并且两点之间的值通过线性插值计算。较高的值可以减少估计时间。
- Attributes:¶
注释
源自[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()
方法
fit([inner_iter, outer_iter])估计季节、趋势和残差成分。
属性
模型中使用的参数。
时间序列的周期长度