Как бороться с пробелами / NaN в данных временных рядов при использовании Matlab для автокорреляции и нейронных сетей?

9

У меня есть временной ряд измерений (высота-одномерный ряд). В период наблюдения процесс измерения замедлился на несколько моментов времени. Таким образом, полученные данные представляют собой вектор с NaN, где в данных были пробелы. Используя MATLAB, это вызывает у меня проблему при вычислении автокорреляции ( autocorr) и применении нейронных сетей ( nnstart).

Как следует обращаться с этими пробелами / NaN? Должен ли я просто удалить их из вектора? Или заменить их запись интерполированным значением? (если так, как в MATLAB)

Васса
источник

Ответы:

4

Я бы не трогал данные вообще. Используйте это для автокорреляции с NaN:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

«не прикасаться к данным» означает не удалять какие-либо данные или временной шаг или заменять их на 0 или среднее значение, это может поставить под угрозу информацию о линейной зависимости конкретного временного отставания. Я бы также не стал моделировать значения в промежутках, если вас интересует автокорреляция «SAMPLE», в любом случае, даже лучший метод моделирования не добавит больше информации об автокорреляции, основываясь на самих данных. Я частично перекодировал функции автокорреляции matlab (ссылка выше) и частичной автокорреляции для работы с NaN: любые пары данных, включая NaN, исключаются из расчета. Это делается для каждого лага. Это сработало для меня. Любое предложение хорошо принято.

Fabio
источник
Добро пожаловать @Fabio: Не могли бы вы дать больше объяснения тому, что вы имеете в виду под «не трогать данные»? Вы имеете в виду ничего не удалять? Это также поможет представить контент, на который вы ссылаетесь, и объяснить, почему это помогает ФП.
Момо
Привет Момо, спасибо за комментарий. «не прикасаться к данным» означает не удалять какие-либо данные или временной шаг или заменять их на 0 или среднее значение, это может поставить под угрозу информацию о линейной зависимости конкретного временного отставания. Я частично перекодировал функции автокорреляции matlab (ссылка выше) и частичной автокорреляции для работы с NaN: любые пары данных, включая NaN, исключаются из расчета. Это делается для каждого лага. Это сработало для меня. Любое предложение хорошо принято.
Фабио
3

Есть некоторые алгоритмы, которые неуязвимы для пропущенных значений, поэтому предпочтительным решением является их поиск (например, R acfдля автокорреляции).

В общем случае, можно пойти или просто отбросить данные с отсутствующими наблюдениями (может быть очень болезненным) или просто вписать их значения - среднего значения соседей может быть достаточно для гладких рядов и небольших разрывов, но, конечно, есть множество других более мощных методов, использующих сплайны, случайные / наиболее частые значения, вменение из моделей и т. д.


источник
2
ACF с пропущенным значением вычисляется обычным способом, но пропущенные значения «пропускаются» в суммах (то есть формула acf для данного лага выглядит как сумма, деленная на сумму, в каждой из этих сумм пропущенные значения могут пропустить). Это не то же самое, что удаление пропущенных значений из исходных данных. Проблема с Matlab заключается в том, что он не пропускает NaN, и в том числе при расчете все превращается в NaN.
Ноль
1

Используйте Intervention Detection для определения недостающих долин, используя полезную структуру ARIMA и любые локальные тренды времени и / или сдвиги уровней.

IrishStat
источник
1

Здесь есть 2 проблемы. Во-первых, это обеспечивает значимую числовую основу для вашего автокорреляционного ответа в Matlab. чтобы это произошло, вам нужно растянуть и / или исправить часть временных рядов ваших векторов данных ... этот компонент проблемы целостности данных является наиболее фундаментальным.

во-вторых, вам нужно решить, как обрабатывать компонент «значение» вашего вектора ... это зависит в значительной степени от конкретного приложения от того, что лучше всего предполагать (например, небольшие отсутствующие метки времени и соответствующие NaN или Нули могут быть безопасно интерполированы от его соседей ... в больших промежутках установка значения в ноль, вероятно, более безопасна ... или вменяется, как рекомендовано выше - очевидно, чтобы это было значимым, пробелы снова должны быть сравнительно небольшими.) ,

Крис
источник