STL分解摆脱了NaN值

时间:2018-09-20 10:25:39

标签: 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

在一个图中,它表明它根据加性模型正确分解。但是,趋势列表和残差列表在前六个月和最后六个月具有NaN值。当前数据集的大小为10 * 12。理想情况下,此方法应仅工作两年即可。

这是否仍然像第一个链接中所述的那么小?即我需要自己推断出加分吗?

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

2 个答案:

答案 0 :(得分:2)

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

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

然后将使用线性最小二乘法来最佳近似值。 (Source

很显然,这些信息确实是在他们的文档中,并且经过了清楚的解释,但我完全错过了/对其进行了误解。因此,我要为遇到同样问题的人回答自己的问题,以使他们免于经历我的冒险。

答案 1 :(得分:0)

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