Python 3.x 去除NaN值的STL分解

Python 3.x 去除NaN值的STL分解,python-3.x,statsmodels,Python 3.x,Statsmodels,以下链接已被调查,但未提供我正在寻找/解决问题的答案: 由于保密问题,我无法发布实际的分解,我可以显示我当前的代码并给出数据集的长度,如果这还不够,我将删除该问题 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]

以下链接已被调查,但未提供我正在寻找/解决问题的答案:

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

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年的时间

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

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

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

decomposed = seasonal.seasonal_decompose(x=data, freq=12, extrapolate_trend='freq')
然后,它将使用线性最小二乘法来最佳逼近这些值。()


很明显,这些信息是在他们的文档中,并且解释得很清楚,但我完全没有理解/误解了它。因此,我为有同样问题的人回答了我自己的问题,以使他们不必再经历我的冒险。

根据下面的参数定义,将“外推趋势”设置为非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.