# Cargar librerías necesarias
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.2
library(readr)
# Cargar datos desde el archivo Excel
X07_Airpass <- read_csv("C:/Surco/Semana II/Bases/07 Airpass.csv")
## Rows: 144 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): Airpas
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
airpass_df <- read_csv("C:/Surco/Semana II/Bases/07 Airpass.csv")
## Rows: 144 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): Airpas
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Verificar la estructura del archivo para determinar el nombre correcto de las columnas
print(head(airpass_df)) # Asegúrate de que la columna con los datos se llama correctamente, ajusta si es necesario
## # A tibble: 6 × 1
## Airpas
## <dbl>
## 1 112
## 2 118
## 3 132
## 4 129
## 5 121
## 6 135
# Crear columna de tiempo (asumiendo que las filas están ordenadas cronológicamente)
airpass_df$t <- 1:nrow(airpass_df)
# Variables del modelo
t <- airpass_df$t
# Definir tendencia Tt (polinomio de grado 2)
Tt <- cbind(1, t, t^2)
# Definir estacionalidad Ft (senos y cosenos con dos frecuencias ω1=1/12 y ω2=1/6)
ω1 <- 1 / 12
ω2 <- 1 / 6
Ft <- cbind(
cos(2 * pi * ω1 * t), sin(2 * pi * ω1 * t),
cos(2 * pi * ω2 * t), sin(2 * pi * ω2 * t)
)
# Combinar Tt y Ft en una matriz de predictores
X <- cbind(Tt, Ft) # Matriz de predictores
# Validar y transformar la serie de pasajeros a logaritmos (asegurándonos de no tener valores no positivos)
y <- log(airpass_df$Airpas)
if (any(is.na(y) | is.infinite(y))) {
stop("La transformación logarítmica generó valores no válidos. Revisa la columna 'Airpass'.")
}
# Ajustar el modelo lineal
model <- lm(y ~ X - 1) # "- 1" excluye el intercepto implícito
# Obtener y mostrar coeficientes
coef <- coef(model)
cat("Coeficientes ajustados:\n")
## Coeficientes ajustados:
print(coef)
## X Xt X X X
## 4.735454e+00 1.319567e-02 -2.147205e-05 -1.415206e-01 -4.922839e-02
## X X
## -2.276177e-02 7.874016e-02
# Predicción en escala logarítmica
y_pred_log <- predict(model)
# Transformar predicciones al dominio original
y_pred <- exp(y_pred_log)
# Guardar predicciones en el DataFrame
airpass_df$predicted_airpass <- y_pred
# Graficar resultados
ggplot(data = airpass_df, aes(x = t)) +
geom_line(aes(y = Airpas, color = "Datos Reales")) +
geom_line(aes(y = predicted_airpass, color = "Modelo Ajustado"), linetype = "dashed") +
labs(
title = "Modelo Ajustado para la Serie de Pasajeros",
x = "Tiempo",
y = "Número de Pasajeros"
) +
scale_color_manual(values = c("Datos Reales" = "blue", "Modelo Ajustado" = "red")) +
theme_minimal()
