2011-08-07 23 views
10

時系列でバックキャストする(つまり過去を予測する)方法を考え出しました。今私は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 !!!!! **これまでエクセルでエクスポートして「やる」ことをもう一度提案してはいけません。それはバチカンの聖ピーターズ教会の祭壇に性交を持つようなものです。あなたはそれよりも少なく地獄に行く。 –

+0

@Jorisあなたが既に世界の悪魔にあなたの魂を売ったらどうでしょうか? http://stackoverflow.com/questions/6955128/object-not-found-error-with-ddply-inside-a-function/6955240#6955240 –

+0

@OSIOISO冗談を忘れて、ジョリスはもちろん正しいです。理由の詳細については、http://www.burns-stat.com/pages/Tutor/spreadsheet_addiction.htmlを参照してください。 –

答えて

11

はこれを試してみてください:

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

追加しました。また、これは動作し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/下Hyndmanのこの記事を発見し、基本的に私の意見では、あなたの質問に完全な答えを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]))