# 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()