STL 分解摆脱 NaN 值

Mar*_*ano 2 python-3.x statsmodels

对以下链接进行了调查,但没有为我提供我正在寻找/解决问题的答案:FirstSecond

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

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
Run Code Online (Sandbox Code Playgroud)

在图中,它显示它根据加法模型正确分解。然而,趋势和残差列表的前 6 个月和最后 6 个月都有 NaN 值。当前数据集的大小为 10*12。理想情况下,这应该适用于仅 2 年的时间。

这仍然像第一个链接中所说的那样太小吗?即我需要自己推断额外的分数?

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

Mar*_*ano 8

根据这个Github链接,另一个用户有类似的问题。他们“修复”了这个问题。为了避免 NaN,可以传递一个额外的参数。

decomposed = seasonal.seasonal_decompose(x=data, freq=12, extrapolate_trend='freq')
Run Code Online (Sandbox Code Playgroud)

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

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