2011-08-07 43 views
10

反转数据我想出一个时间序列的方式来的backcast(即预测过去)。现在我只是在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 

我希望它看起来像这样的“倒推”:

 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以某种方式执行它?

+5

RAAAAAAAAHHH !!!!!永远**永远**再次建议导出并在Excel中执行“它”。这就像在梵蒂冈圣彼得教堂的祭坛上进行性交一样。你去地狱比这少。 –

+0

@Joris如果你已经将自己的灵魂卖给了全球魔鬼,该怎么办? http://stackoverflow.com/questions/6955128/object-not-found-error-with-ddply-inside-a-function/6955240#6955240 –

+0

@OSIOISO所有的开玩笑,Joris当然是对的。有关更多原因,请参阅http://www.burns-stat.com/pages/Tutor/spreadsheet_addiction.html。 –

回答

11

试试这个:

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

ADDED。这也适用,并且不修改tt

replace(tt, TRUE, rev(tt)) 
+0

谢谢 - 比@ gsk3的方法更快,但相似。 (所以我标记你是正确的,因为它更简单,希望这是根据Stackoverflow策略。) – OSlOlSO

4

您可以直接要挟矩阵向量,扭转这种局面,并恢复正常的矩阵。这里有一个例子:

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 
+0

谢谢@ gsk3 :)尽管'ts'数据有更快捷的方式。见上面的答案。 – OSlOlSO

+0

@OSIOISO标记G.G.的答案是正确的,因为他的作品更适合时间序列对象。为了将来的参考,在你的问题中发布一个快速可重复的例子将为你提供更好的答案。它通常不需要很长时间(参见G.G.的第一行),并且它使得您试图解决的问题更加清晰。 –

+0

感谢您的提示:)我会记住它的未来问题。 – OSlOlSO

3

我发现这个职位海德门的http://www.r-bloggers.com/backcasting-in-r/下和我基本上粘贴在他的解决方案,这在我看来你的问题provids一个完整的答案。

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]))