USER
Comenta de forma breve y en viñetas el siguiente código: "# Cargar las librerías necesarias
library(forecast)
library(TSstudio)
library(readr)
# Leer los datos desde el archivo CSV
df <- read_csv("Datos_Agrupados_R.csv",
col_types = cols(
.default = "c", # Tipo por defecto para todas las columnas
LIGEROS = col_double() # Especifica el tipo de dato para la columna 'LIGEROS'
),
na = c("N"), # Manejo de valores NA
skip = 0) # Opcional: número de líneas a saltar al inicio del archivo
# Convertir la columna 'LIGEROS' a una serie temporal
ts_data <- ts(df$LIGEROS, frequency = 24) # frecuencia = 24 para datos horarios
class(ts_data )
start(ts_data); end(ts_data)
boxplot(ts_data~cycle(ts_data), color="cyan")
cycle(ts_data)
plot(ts_data, ylab="Vehiculos", xlab="Horas")
# Modelo Aditivo
modeloaditivo =decompose(ts_data, type="additive")
plot(modeloaditivo)
# Modelo Multiplicativo
modelomultiplicativo =decompose(ts_data, type="multiplicative")
plot(modelomultiplicativo)
# Estimar tendencia
Tendencia = modelomultiplicativo$trend
print(Tendencia)
# Estimar estacionalidad
Estacionalidad = modelomultiplicativo$seasonal
print(Estacionalidad)
ts.plot(cbind(Tendencia, Tendencia*Estacionalidad), lty =1:2 )
library(tseries)
# Realizar la prueba ADF
resultado <- adf.test(ts_data, alternative = "stationary")
# Imprimir si la serie es estacionaria o no
if (resultado$p.value < 0.05) {
print("La serie es estacionaria.")
} else {
print("La serie no es estacionaria.")
}
# Determinacion del Modelo
# Convertir la columna 'LIGEROS' a una serie temporal
ts_data <- ts(df$LIGEROS, frequency = 24) # frecuencia = 24 para datos horarios
# Visualizar los datos
plot(ts_data, main = "Datos de Serie Temporal Simulada", ylab = "Valor", xlab = "Tiempo")
# Separar los datos en entrenamiento, validación y prueba
train_data <- window(ts_data, end = c(floor(length(ts_data) * 0.7 / 24), (length(ts_data) * 0.7) %% 24))
validation_data <- window(ts_data, start = c(floor(length(ts_data) * 0.7 / 24) + 1, 1), end = c(floor(length(ts_data) * 0.9 / 24), (length(ts_data) * 0.9) %% 24))
test_data <- window(ts_data, start = c(floor(length(ts_data) * 0.9 / 24) + 1, 1))
# Reajustar el modelo a todos los datos de entrenamiento (entrenamiento + validación)
full_train_data <- window(ts_data, end = c(floor(length(ts_data) * 0.9 / 24), (length(ts_data) * 0.9) %% 24))
modelo_arima_full <- auto.arima(full_train_data, seasonal = TRUE, stepwise = TRUE,
approximation = (length(full_train_data) > 100), parallel = FALSE,
max.p = 10, max.q = 10, max.P = 5, max.Q = 5,
max.d = 2, max.D = 1, max.order = 15,
start.p = 2, start.q = 2, start.P = 1, start.Q = 1,
stationary = TRUE, ic = "aic", test = "kpss",
num.cores = 4) # stationary = FALSE
# Guardar el modelo
nombre_modelo <- "modelo_arima_full"
save(modelo_arima_full, file = nombre_modelo)
# Recuperar el modelo
load(nombre_modelo)
# https://aihorizonforecast.substack.com/p/autogluon-timeseries-creating-powerful
# Pronosticar los próximos períodos de prueba
predicciones_test <- forecast(modelo_arima_full, h = length(test_data))
# Calcular y mostrar las métricas de precisión para el conjunto de prueba
accuracy(predicciones_test, test_data)
# Modelo con múltiples estacionalidades (dia, semana, mes)
# Ajusta el modelo TBATS
modelo_tbats <- tbats(full_train_data)
# Muestra el resumen del modelo
summary(modelo_tbats)
# Predice los próximos 10 periodos
predicciones <- forecast(modelo_tbats,h = length(test_data))
# Muestra las predicciones
# print(predicciones)
# Calcula la precisión de las predicciones
precision <- accuracy(predicciones, test_data)
# Muestra las métricas de precisión
print(precision)
#
# Carga la biblioteca
library(ggplot2)
# Extrae la métrica RMSE
rmse <- precision["Test set", "RMSE"]
# Crea un dataframe con los errores de las predicciones
errores <- data.frame(Tiempo = 1:length(test_data),
Error = as.numeric(test_data) - as.numeric(predicciones$mean))
# Crea un gráfico de los errores
ggplot(data = errores, aes(x = Tiempo, y = Error)) +
geom_line() +
ggtitle(paste("Gráfico de errores (RMSE: ", round(rmse, 2), ")", sep = "")) +
xlab("Tiempo") +
ylab("Error")
# Ajusta el modelo SARIMA
modelo_sarima <- auto.arima(full_train_data, seasonal = TRUE)
# Muestra el resumen del modelo
summary(modelo_sarima)
# Predice los próximos 10 periodos
predicciones <- forecast(modelo_sarima,h = length(test_data))
# Muestra las predicciones
# print(predicciones)
# Calcula la precisión de las predicciones
precision <- accuracy(predicciones, test_data)
# Muestra las métricas de precisión
print(precision)
#
# Ajusta un modelo de suavizado exponencial a tus datos
modelo <- HoltWinters(ts_data)
# Muestra la tendencia estimada
plot(modelo$fitted[, "trend"], main = "Tendencia estimada (No tienen tendencia)")"ASSISTANT
El código R proporciona un ejemplo completo de análisis y modelado de series temporales utilizando varios paquetes y funciones en R. Aquí está una breve descripción en viñetas de las distintas secciones del código:
### Carga de bibliotecas y datos
- **Librerías necesarias**: Carga de `forecast`, `TSstudio`, y `readr`, que son utilizadas para análisis de series temporales, manejo de series de tiempo, y lectura de archivos, respectivamente.
- **Leer datos**: Lectura del archivo CSV "Datos_Agrupados_R.csv" con especificaciones para el manejo de tipos de datos y valores NA.
### Preparación de datos
- **Conversión a serie temporal**: La columna 'LIGEROS' se convierte en un objeto de serie temporal asumiendo una frecuencia horaria (24 valores por día).
### Análisis exploratorio y de componentes
- **Boxplot y otras visualizaciones**: Generación de un boxplot para visualizar distribuciones estacionales y trazado básico de la serie temporal.
- **Descomposición del modelo**: Aplicación de modelos aditivo y multiplicativo para descomponer la serie en sus componentes (tendencia, estacionalidad).
### Prueba de estacionariedad
- **Prueba ADF**: Realiza la prueba Augmented Dickey-Fuller para determinar si la serie es estacionaria.
### Modelado
- **Ajuste de modelos ARIMA y SARIMA**: Automatización del proceso de ajuste de modelos ARIMA y SARIMA a los datos usando selección basada en información como AIC y pruebas de estacionariedad.
- **Preparación de conjuntos de datos**: Divisiones de datos en conjuntos de entrenamiento, validación y prueba.
- **Modelado con TBATS**: Ajuste de un modelo TBATS, útil para series con múltiples patrones estacionales.
### Pronósticos y evaluación
- **Predicciones**: Generación de pronósticos para períodos futuros y evaluación de su precisión mediante comparación con datos de prueba.
- **Visualización de resultados**: Visualización de predicciones y errores asociados.
### Observaciones adicionales
- **Manejo de archivos y modelos**: Guardado y recuperación de modelos ajustados.
- **Reporte de métricas de precisión**: Impresión de métricas de precisión como RMSE para los modelos ajustados.
Este código sirve como un ejemplo integrado para el análisis de series temporales en R, abordando desde la carga y preparación de datos hasta el modelado estadístico avanzado y la evaluación de modelos.