【问题标题】:STL decomposition getting rid of NaN values摆脱 NaN 值的 STL 分解
【发布时间】:2019-02-24 15:15:20
【问题描述】:

对以下链接进行了调查,但没有为我提供我正在寻找/解决问题的答案: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

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

这还是第一个链接中说的太小了吗? IE。我需要自己推断加分吗?

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

【问题讨论】:

    标签: python-3.x statsmodels


    【解决方案1】:

    根据下面的参数定义,将 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.
    

    【讨论】:

      【解决方案2】:

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

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

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

      显然,这些信息确实在他们的文档中并且解释清楚,但我完全错过/误解了它。因此,我正在为遇到相同问题的人回答我自己的问题,以挽救他们的冒险经历。

      【讨论】:

        猜你喜欢
        • 2017-01-19
        • 2013-10-06
        • 2018-08-10
        • 2023-03-20
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        相关资源
        最近更新 更多