STL 分解去除 NaN 值

STL decomposition getting rid of NaN values

对以下 link 进行了调查,但没有提供我正在寻找的答案 for/fixing 我的问题:, Second

由于保密问题,我无法 post 实际分解 我可以显示我当前的代码并给出数据集的长度,如果这还不够,我将删除该问题。

import numpy as np
from statsmodels.tsa import seasonal
def stl_decomposition(data):
    data = np.array(data)
    data = [item for sublist in data for item in sublist]
    decomposed = seasonal.seasonal_decompose(x=data, freq=12)

    seas = decomposed.seasonal
    trend = decomposed.trend
    res = decomposed.resid

在图中显示它根据加性模型正确分解。但是,趋势和残差列表在前 6 个月和后 6 个月的值为 NaN。当前数据集的大小为 10*12。理想情况下,这应该适用于只有 2 年的小项目。

这还是像第一个link说的那么小吗? IE。我需要自己推断加分吗?

编辑:似乎在趋势和残差的两端总是有一半的频率是 NaN。对于减小数据集的大小,同样如此。

据此 Github link 另一位用户也有类似的问题。他们 'fixed' 这个问题。为避免 NaN,可以传递一个额外的参数。

decomposed = seasonal.seasonal_decompose(x=data, freq=12, extrapolate_trend='freq')

然后它将使用线性最小二乘法来最好地近似值。 (Source)

显然,这些信息确实在他们的文档中,并且解释得很清楚,但我完全 missed/misinterpreted 它。因此,我正在为有同样问题的人回答我自己的问题,以挽救他们的冒险经历。

根据下面的参数定义,将 extrapolate_trend 设置为非 0 会使趋势估计恢复为不同的估计方法。当我有一些估计观察结果时,我遇到了这个问题。

extrapolate_trend : int or 'freq', optional
    If set to > 0, the trend resulting from the convolution is
    linear least-squares extrapolated on both ends (or the single one
    if two_sided is False) considering this many (+1) closest points.
    If set to 'freq', use `freq` closest points. Setting this parameter
    results in no NaN values in trend or resid components.