代码之家  ›  专栏  ›  技术社区  ›  Marciano

去除NaN值的STL分解

  •  1
  • Marciano  · 技术社区  · 7 年前

    First , Second

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

    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年。

    编辑:似乎总是有一半的频率是南安两端的趋势和残余。对于减小数据集的大小,这一点仍然适用。

    2 回复  |  直到 7 年前
        1
  •  8
  •   Marciano    7 年前

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

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

    然后,它将使用线性最小二乘法来最佳地逼近这些值( Source

    很明显,这些信息是在他们的文件上写的,解释得很清楚,但我完全没有理解。因此,我回答我自己的问题的人谁有相同的问题,以挽救他们的冒险我。

        2
  •  0
  •   Mehran F Langerudi    7 年前

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