R: обращение данных в объекте временного ряда - PullRequest
10 голосов
/ 07 августа 2011

Я нашел способ обратной передачи (т. Е. Предсказания прошлого) с временным рядом.Сейчас я просто борюсь с программированием в 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?

Ответы [ 3 ]

11 голосов
/ 07 августа 2011

Попробуйте это:

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

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

replace(tt, TRUE, rev(tt))
4 голосов
/ 07 августа 2011

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

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 голосов
/ 12 июня 2014

Я нашел этот пост Хиндмана в 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]))
...