R: реверсирование данных в объекте временного ряда

Я понял способ возврата (т.е. предсказание прошлого) временным рядом. Теперь я просто борюсь с программированием в R.

Я хотел бы изменить данные временных рядов, чтобы я мог предсказать прошлое. Как это сделать?

Скажите, что исходный объект временных рядов выглядит следующим образом:

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 116  99 115 101 112 120 120 110 143 136 147 142
2009 117 114 133 134 139 147 147 131 125 143 136 129

Я хочу, чтобы он выглядел так для "backcasting":

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 129 136 143 125 131 147 147 139 134 133 114 117
2009 142 147 136 143 110 120 120 112 101 115  99 116

Заметьте, я не забывал менять годы - я в основном зеркально отражаю/реверсирую данные и сохраняю годы, а затем собираюсь прогнозировать.

Надеюсь, это можно сделать в R? Или я должен экспортировать и делать это в Excel каким-то образом?

Ответ 1

Попробуйте следующее:

tt <- ts(1:24, start = 2008, freq = 12)
tt[] <- rev(tt)

ДОБАВЛЕНО. Это также работает и не изменяет tt:

replace(tt, TRUE, rev(tt))

Ответ 2

Вы можете просто принудить матрицу к вектору, отменить его и снова сделать его матрицей. Вот пример:

mat <- matrix(seq(24),nrow=2,byrow=TRUE)
> mat

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]    1    2    3    4    5    6    7    8    9    10    11    12
[2,]   13   14   15   16   17   18   19   20   21    22    23    24
> matrix( rev(mat), nrow=nrow(mat) )

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]   24   23   22   21   20   19   18   17   16    15    14    13
[2,]   12   11   10    9    8    7    6    5    4     3     2     1

Ответ 3

Я нашел этот пост Hyndman под http://www.r-bloggers.com/backcasting-in-r/ и в основном вставляю его решение, которое, на мой взгляд, дает вам полный ответ вопрос.

library(forecast)
x <- WWWusage
h <- 20
f <- frequency(x)
# Reverse time
revx <- ts(rev(x), frequency=f)
# Forecast
fc <- forecast(auto.arima(revx), h)
plot(fc)
# Reverse time again
fc$mean <- ts(rev(fc$mean),end=tsp(x)[1] - 1/f, frequency=f)
fc$upper <- fc$upper[h:1,]
fc$lower <- fc$lower[h:1,]
fc$x <- x
# Plot result
plot(fc, xlim=c(tsp(x)[1]-h/f, tsp(x)[2]))