Reconstruir datos diferenciados estacionalmente (y no estacionalmente) en R
He logrado obtener datos estacionarios para usar en las previsiones arima (ver) usando diferenciación estacional y no estacional. Ahora, ¿cómo puedo revertir los datos diferenciados a la fecha original?
raw <- read.csv("https://raw.githubusercontent.com/thistleknot/Python-Stock/master/data/combined_set.csv",row.names=1,header=TRUE)
temp <- raw$CSUSHPINSA
# me indica diferenciar estacionalmente 1 vez
print(nsdiffs(ts(temp,frequency=4)))
temp_1 <- temp-dplyr::lag(temp,1*season)
# me indica que necesito diferenciarlo una vez más
print(ndiffs(temp_2))
temp_2 <- temp_1-dplyr::lag(temp_1,1)
# muestra que los datos son algo estacionarios
plot(temp_2)
# me devuelve el conjunto de datos original si solo tenía diferenciación estacional
na.omit(dplyr::lag(raw$CSUSHPINSA ,4)+temp_1)
# ¿cómo se hace esto con temp_2?
Algunas referencias
https://stackoverflow.com/questions/49903037/pandas-reverse-of-diff
https://stackoverflow.com/questions/47683923/reverse-diff-function-in-r
davy.ai
Para revertir los datos originales utilizando los datos diferenciados, deberás acumular las diferencias.
Para la diferenciación estacional, puedes utilizar la siguiente fórmula:
datos_originales = retardo_estacional(datos_diferenciados, frecuencia) + datos_retrasados_originales
Por ejemplo, si solo has realizado la diferenciación estacional una vez, puedes utilizar:
na.omit(dplyr::lag(raw$CSUSHPINSA, 4) + temp_1)
Aquí,
na.omit()
se utiliza para eliminar cualquier valor NA que pueda generarse al retrasar los datos originales, ydplyr::lag()
se utiliza para desplazar los datos originales según la frecuencia estacional (en este caso, 4). Luego añadimos los datos originales retrasados a los datos diferenciados (temp_1
) para obtener los datos originales.Si has realizado tanto la diferenciación estacional como la no estacional, deberás hacer lo siguiente:
datos_originales = retardo_no_estacional(retardo_estacional(datos_diferenciados, frecuencia), 1) + datos_retrasados_estacionales + datos_retrasados_originales
Aquí, primero aplicamos la diferenciación estacional utilizando un retardo estacional de
frecuencia
, luego aplicamos la diferenciación no estacional utilizando un retardo de 1. Luego añadimos los datos estacionales retrasados, los datos originales retrasados y los datos diferenciados para obtener los datos originales.Por ejemplo, si tienes dos niveles de diferenciación (estacional y no estacional), puedes utilizar:
na.omit(dplyr::lag(raw$CSUSHPINSA, 4) + dplyr::lag(temp_2, 1) + dplyr::lag(temp_1, 1))
Una vez más, se utiliza
na.omit()
para eliminar cualquier valor NA, y utilizamosdplyr::lag()
para desplazar los datos diferenciados, los datos estacionales retrasados y los datos originales retrasados según la cantidad correspondiente.