-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPredicciones mensuales ParoAfiliación.R
115 lines (87 loc) · 3.81 KB
/
Predicciones mensuales ParoAfiliación.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# -----------------------------------------------------------------------------
# (c) Observatorio Regional de Empleo. Junta de Comunidades de Castilla-La Mancha
# (c) Isidro Hidalgo Arellano ([email protected])
# -----------------------------------------------------------------------------
# Borramos los objetos en memoria
rm(list=ls(all.names = TRUE))
# Predicción series mensuales:
inicial = 1
final = 6
nseries = final - inicial + 1
# Definimos variables globales
lista_modelos = c("HyndmanARIMA", "STL", "Hyndman", "UComp", "TramoSeats", "x13Seats")
#Cargamos las librerías si no están disponibles
library(openxlsx) # importación/exportación de datos desde/a Excel
library(forecast) # métodos ETS ("Hyndman") y ARIMA (HyndmanARIMA)
library(UComp) # método "UComp" (componentes no-observables)
library(RJDemetra) # métodos "TRAMO-SEATS" y "X13-ARIMA-SEATS"
# Especificamos el directorio de trabajo
setwd("\\\\jclm.es/PROS/SC/OBSERVATORIOEMPLEO/Análisis/Previsiones/Mensuales - paro registrado y afiliación")
ruta <- getwd()
# Creamos la ruta del fichero Excel de salida
ExcelSalida <- paste0(ruta,"/SalidaParoAfiliación.xlsx")
# Cargamos las series desde el fichero EXCEL donde tenemos las series
excelfile <- read.xlsx("../Series.xlsx")
longitud <- max(excelfile[1, inicial:final])
datos <- excelfile[1:(longitud+6),inicial:final]
# Obtenemos el número de series cargadas
n <- ncol(datos)
series_modelos <- function(nSerie = 1, modelos = lista_modelos){
### Función para seleccionar la serie que queremos predecir y los modelos a utilizar
print(names(datos)[nSerie])
# Creamos la serie eliminando los valores ausentes del final, si los hay
columna <- na.omit(datos[, nSerie])
filas <- length(columna)
inicio<-columna[1]
frecuencia<-columna[4]
serie <- ts(columna[-c(1:5)],
start = c(columna[2],columna[3]),
frequency = frecuencia)
nombre_serie <- colnames(datos)[nSerie]
# Preparamos la matriz para guardar los resultados
tandas <- matrix(NA, frecuencia, length(modelos))
colnames(tandas) <- modelos
for (modelo in modelos) {
# Lanzamos la predicción...
# ...con el método STL
if ("STL" == modelo){
forecast <- stlf(serie)
tandas[, modelo]<-forecast$mean[1:frecuencia]
} # STL
# ...con el forecast de Hyndman
if ("Hyndman" == modelo){
forecast <- forecast(serie)
tandas[, modelo]<-forecast$mean[1:frecuencia]
} # Hyndman
# ...con el TramoSeats
if ("TramoSeats" == modelo){
forecast <- tramoseats(serie, spec = "RSAfull")
tandas[, modelo]<-forecast$regarima$forecast[1:frecuencia]
} # TramoSeats
# ...con el HyndmanARIMA
if ("HyndmanARIMA" == modelo){
forecast <- forecast(auto.arima(serie))
tandas[, modelo]<-forecast$mean[1:frecuencia]
} # HyndmanARIMA
# ...con el UComp
if ("UComp" == modelo){
forecast <- UCmodel(serie, verbose = FALSE)
tandas[, modelo]<-forecast$yFor[1:frecuencia]
} # UComp
# ...con el x13Seats
if ("x13Seats" == modelo){
forecast <- x13(serie, spec = "RSA5c")
tandas[, modelo]<-forecast$regarima$forecast[1:frecuencia]
} # x13Seats
} # Cerramos modelo
mediana <- apply(tandas, 1, median)
return(mediana)
} # Cerramos función
# Predicción:
predicciones <- sapply(1:nseries, series_modelos)
predicciones <- as.data.frame(predicciones)
names(predicciones) <- names(datos)
# Escribimos en el fichero Excel
write.xlsx(predicciones, file = ExcelSalida, sheet = "Predicciones")
print("Las predicciones se encuentran en el fichero:")
print("\\\\jclm.es/PROS/SC/OBSERVATORIOEMPLEO/Análisis/Previsiones/Mensuales - paro registrado y afiliación/SalidaParoAfiliación.xlsx")