Ошибка при вписывании ежедневных временных рядов с пакетом зоопарка - PullRequest
0 голосов
/ 08 апреля 2019

Функция na.StructTS(), согласно документации, предназначена для заполнения значений NA во временных рядах с использованием сезонного фильтра Калмана (не знакомого с математикой, стоящей за этим).

Но у меня проблема:

Когда я хочу заменить NA s в zooreg объекте, он работает, только если указанная частота (наблюдение за единицу времени) больше 1.

Пример:

#with frequency = 1 appearantly being the default
t <- zooreg(c(34, 12, 45, 56, 34, NA, 57, 59), 
            start = as.Date("2019-01-01"))

> t
2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05 2019-01-06 2019-01-07 2019-01-08 
        34         12         45         56         34         NA         57         59 

na.StructTS(t, na.rm = TRUE)

Возвращает ошибку:

Ошибка в строках строки (tsSmooth (StructTS (y)) [, -2]): 'x' должен быть массивом как минимум двух измерений

Изменение:

t <- zooreg(c(34, 12, 45, 56, 34, NA, 57, 59), 
            start = as.Date("2019-01-01"), frequency = 2)

> na.StructTS(t, na.rm = TRUE)
2019-01-01 2019-01-01 2019-01-02 2019-01-02 2019-01-03 2019-01-03 2019-01-04 2019-01-04 
  34.00000   12.00000   45.00000   56.00000   34.00000   49.84633   57.00000   59.00000 

на что-либо > 1 работает, но вменения каждый раз разные и занимают все больше времени.

Почему это поведение? Как я могу вменять ежедневные временные ряды с na.StructTS()?

1 Ответ

1 голос
/ 10 мая 2019

Интересно было бы узнать, какие серии вы имеете в виду.na.Struct() может быть не лучшим выбором для очень коротких серий.

Существует множество других методов вменения (некоторые легче понять).Например, zoo также предлагает na.approx, na.spline, na.StructTS, na.locf

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

В пакете imputeTS у вас есть: na.interpolation(), na.locf(), na.ma(), na.kalman(), na.seadec(), na.seasplit() и даже больше функций .

Если вы хотите остаться с фильтром Калмана, возможно, посмотрите на na.kalman() функцию

na.kalman (x, model = "StructTS", smooth = TRUE, nit = -1, ...)

У него есть несколько дополнительных опций, поэтому вы можете использовать модель ARIMA вместоодин из StructTS или вы можете выбрать, хотите ли вы использовать KalmanRun или KalmanSmoothing.

na.kalman(x, model = "StructTS", smooth = TRUE) 

будет наиболее похоже на na.StructTS.Но все же разные реализации - поэтому они не дадут одинаковых результатов.Поэтому, если вы настаиваете на KalmanSmoothing на моделях состояний пространства, вы можете использовать эту функцию из imputeTS (не выдает ошибку для частоты = 1)

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