STL разложение, избавляющееся от значений NaN - PullRequest
0 голосов
/ 20 сентября 2018

Следующие ссылки были исследованы, но не дали мне ответ, который я искал / решил мою проблему: Первый , Второй .

Из-за конфиденциальностипроблемы, которые я не могу опубликовать фактическую декомпозицию. Я могу показать свой текущий код и указать длину набора данных, если этого недостаточно. Я сниму вопрос.

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 за первые и последние 6 месяцев.Текущий набор данных имеет размер 10 * 12.В идеале это должно работать как минимум 2 года.

Это все еще слишком мало, как сказано в первой ссылке?Т.е. мне нужно самостоятельно экстраполировать дополнительные точки?

РЕДАКТИРОВАТЬ: Кажется, что всегда половина частоты равна NaN на обоих концах тренда и остатка.То же самое относится и к уменьшению размера набора данных.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Согласно приведенному ниже определению параметра, установка 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.
0 голосов
/ 20 сентября 2018

По этой ссылке Github у другого пользователя был похожий вопрос.Они «исправили» эту проблему.Чтобы избежать NaN, можно передать дополнительный параметр.

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

Затем он будет использовать линейные наименьшие квадраты для наилучшего приближения значений.( Источник )

Очевидно, что информация была буквально в их документации и четко объяснена, но я полностью пропустил / неверно истолковал ее.Поэтому я отвечаю на свой вопрос о ком-то, у кого такая же проблема, чтобы спасти их от приключений, которые у меня были.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...