2011-08-07 10 views
10

Descubrí una forma de retroceder (es decir, predecir el pasado) con una serie temporal. Ahora solo estoy luchando con la programación en R.R: Invertir los datos en un objeto de serie temporal

Me gustaría invertir los datos de la serie de tiempo para que pueda pronosticar el pasado. ¿Cómo hago esto?

Diga el objeto de la serie de tiempo original se ve así:

 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 

quiero que se vea como esto para el '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 

Nota, no se olvide de cambiar los años - básicamente estoy duplicando/revirtiendo los datos y manteniendo los años, luego voy a pronosticar.

Espero que esto se pueda hacer en R? ¿O debería exportar y hacerlo en Excel de alguna manera?

+5

RAAAAAAAAHHH !!!!! Nunca ** nunca ** sugiera nuevamente exportar y hacer 'eso' en Excel. Eso es como tener relaciones sexuales en el altar de la iglesia de San Pedro en el Vaticano. Te vas al infierno por menos que eso. –

+0

@Joris ¿Qué pasa si ya has vendido tu alma al Demonio de Globals? http://stackoverflow.com/questions/6955128/object-not-found-error-with-ddply-inside-a-function/6955240#6955240 –

+0

@OSIOISO Bromas aparte, Joris tiene razón. Consulte http://www.burns-stat.com/pages/Tutor/spreadsheet_addiction.html para obtener más explicaciones. –

Respuesta

11

Prueba esto:

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

AÑADIDO. Esto también funciona y no modifica tt:

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

Gracias - más rápido que el método de @ gsk3 pero similar. (Así que marqué el tuyo porque es más simple. Espero que esto esté de acuerdo con la política de Stackoverflow). – OSlOlSO

4

Puede forzar la matriz a un vector, invertirla y hacerla una matriz nuevamente. He aquí un ejemplo:

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

Gracias @ gsk3 :) Aunque hay una forma más rápida de 'ts' de datos. Ver la respuesta anterior. – OSlOlSO

+0

@OSIOISO Marcar la respuesta de G.G. como correcta era lo correcto, ya que funciona mejor con objetos de series de tiempo. Para referencia futura, publicar un ejemplo rápido reproducible con su pregunta le dará mejores respuestas. Por lo general, no lleva tanto tiempo (vea la primera línea de G.G.), y hace que el problema que intenta resolver sea mucho más claro. –

+0

Gracias por el consejo :) Lo recordaré para futuras preguntas. – OSlOlSO

3

me encontré con este post de Hyndman bajo http://www.r-bloggers.com/backcasting-in-r/ y me he básicamente pegar en su solución, que en mi opinión provids una respuesta completa a usted pregunta.

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