Etapa 1. Preparación de la base de datos.


1.1 Librería “nycflights23”

library(nycflights23)

Carga en la sesión de R el paquete nycflights23, de modo que sus bases de datos (como flights) quedan disponibles para trabajar.


1.2 Base de datos

BD1 <- flights

Crea un objeto llamado BD1 que contiene una copia de la base de datos flights. Desde aquí en adelante, los análisis se realizan usando BD1


1.3. Base de datos sin NA

BD1 = na.omit(BD1)

Reemplaza el objeto BD1 por una versión en la que se eliminan todas las filas que contienen al menos un valor perdido (NA) en cualquiera de sus columnas. El resultado es una base de datos sin valores faltantes.


1.4 Nombre de las columnas de la base de datos

colnames(BD1)
##  [1] "year"           "month"          "day"            "dep_time"      
##  [5] "sched_dep_time" "dep_delay"      "arr_time"       "sched_arr_time"
##  [9] "arr_delay"      "carrier"        "flight"         "tailnum"       
## [13] "origin"         "dest"           "air_time"       "distance"      
## [17] "hour"           "minute"         "time_hour"

Devuelve un vector con los nombres de todas las columnas de la base de datos BD1. Es útil para revisar rápidamente qué variables contiene la base.


Etapa 2. Análisis de datos


2.1 Librería “tidyverse”

library(tidyverse)

Carga en la sesión el conjunto de paquetes del tidyverse (como dplyr, ggplot2, tidyr, readr, etc.), pensados para importar, transformar, visualizar y modelar datos de forma coherente.


2.2 Agrupar, ordenar y contar

BD2 <- BD1 |>
  group_by(origin) |>
  summarise(n_vuelos = n()) |>
  arrange(desc(n_vuelos))
BD2
## # A tibble: 3 × 2
##   origin n_vuelos
##   <chr>     <int>
## 1 LGA      158800
## 2 EWR      134398
## 3 JFK      129620

Crea una tabla resumen donde los datos se agrupan por aeropuerto de origen (origin) y, para cada aeropuerto, se calcula cuántos vuelos hay (n_vuelos). Luego, la tabla se ordena de mayor a menor según la cantidad de vuelos, de modo que el aeropuerto con más salidas aparezca en la primera fila.


2.3 Filtrado de base de datos

BD3_JFK <- BD1 |>
  filter(origin == "JFK")
BD3_JFK
## # A tibble: 129,620 × 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2023     1     1       18           2300        78      228            135
##  2  2023     1     1       31           2344        47      500            426
##  3  2023     1     1       33           2140       173      238           2352
##  4  2023     1     1      520            510        10      948            949
##  5  2023     1     1      549            559       -10      905            901
##  6  2023     1     1      554            600        -6      914            920
##  7  2023     1     1      638            640        -2     1121           1129
##  8  2023     1     1      652            700        -8      947           1033
##  9  2023     1     1      655            700        -5     1044           1044
## 10  2023     1     1      656            659        -3     1031           1020
## # ℹ 129,610 more rows
## # ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

2.4 Intervalor de confianza

t.test(BD1$dep_delay,
       conf.level = 0.95)
## 
##  One Sample t-test
## 
## data:  BD1$dep_delay
## t = 164.72, df = 422817, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  13.53620 13.86221
## sample estimates:
## mean of x 
##  13.69921

2.5 Prueba de Hipótesis

t.test(BD1$dep_delay,
       mu = 0,
       alternative = "two.sided") # distinto
## 
##  One Sample t-test
## 
## data:  BD1$dep_delay
## t = 164.72, df = 422817, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  13.53620 13.86221
## sample estimates:
## mean of x 
##  13.69921
t.test(BD1$dep_delay,
       mu = 0,
       alternative = "greater") # mayor que
## 
##  One Sample t-test
## 
## data:  BD1$dep_delay
## t = 164.72, df = 422817, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 0
## 95 percent confidence interval:
##  13.56241      Inf
## sample estimates:
## mean of x 
##  13.69921
t.test(BD1$dep_delay,
       mu = 10,
       alternative = "less") # menor que
## 
##  One Sample t-test
## 
## data:  BD1$dep_delay
## t = 44.479, df = 422817, p-value = 1
## alternative hypothesis: true mean is less than 10
## 95 percent confidence interval:
##      -Inf 13.83601
## sample estimates:
## mean of x 
##  13.69921

2.5 Regresión Lineal

modelo1 <- lm(air_time ~ distance, data = BD1)

summary(modelo1)
## 
## Call:
## lm(formula = air_time ~ distance, data = BD1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -95.400  -6.962  -1.603   5.409 308.425 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 1.891e+01  3.329e-02     568   <2e-16 ***
## distance    1.252e-01  2.756e-05    4545   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.63 on 422816 degrees of freedom
## Multiple R-squared:  0.9799, Adjusted R-squared:  0.9799 
## F-statistic: 2.066e+07 on 1 and 422816 DF,  p-value: < 2.2e-16
ggplot(BD1, aes(x = distance, y = air_time)) +
  geom_point(
    alpha    = 0.3,
    fill     = "#9ecae1",
    color    = "black",
    shape    = 21,
    size     = 1.5
  ) +
  geom_smooth(method = "lm", se = FALSE, color = "#4292c6", linewidth = 0.8) +
  labs(
    x = "Distancia del vuelo (millas)",
    y = "Tiempo en el aire (minutos)",
    title = "Tiempo en el aire según distancia"
  ) +
  theme_minimal() +
  theme(
    panel.grid   = element_blank(),
    panel.border = element_rect(color = "black", fill = NA, linewidth = 0.3),
    plot.title   = element_text(hjust = 0.5)
  )
## `geom_smooth()` using formula = 'y ~ x'


2.7 Gráfico de barras

ggplot(BD2, aes(x = origin, y = n_vuelos)) +
  geom_col(fill = "#9ecae1", color = "black", size = 0.3) + 
  labs(
    x = "Aeropuerto de origen",
    y = "Número de vuelos",
    title = "Número de vuelos por aeropuerto de origen"
  ) +
  theme_minimal() +
  theme(
    panel.grid   = element_blank(),                       
    panel.border = element_rect(color = "black", fill = NA, size = 0.3), 
    plot.title   = element_text(hjust = 0.5)                      
  )


2.8 Gráfico de lineas

ggplot(BD2, aes(x = origin, y = n_vuelos, group = 1)) +
  geom_line(color = "#4292c6", linewidth = 0.7) +         
  geom_point(fill = "#9ecae1", color = "black", size = 2) + 
  labs(
    x = "Aeropuerto de origen",
    y = "Número de vuelos",
    title = "Número de vuelos por aeropuerto de origen"
  ) +
  theme_minimal() +
  theme(
    panel.grid   = element_blank(),                     
    panel.border = element_rect(color = "black", fill = NA, linewidth = 0.3),
    plot.title   = element_text(hjust = 0.5)            
  )


2.9 Histograma

ggplot(BD1, aes(x = dep_delay)) +
  geom_histogram(
    binwidth = 5,
    fill     = "#9ecae1",
    color    = "black",
    linewidth = 0.3
  ) +
  labs(
    x = "Retraso en la salida (minutos)",
    y = "Frecuencia",
    title = "Histograma del retraso en la salida"
  ) +
  theme_minimal() +
  theme(
    panel.grid   = element_blank(),                     
    panel.border = element_rect(color = "black", fill = NA,   
                                linewidth = 0.3),
    plot.title   = element_text(hjust = 0.5)                  
  )

2.10 Gráfico de dispersión

ggplot(BD1, aes(x = dep_delay, y = arr_delay)) +
  geom_point(
    alpha    = 0.4,
    fill     = "#9ecae1",
    color    = "black",
    shape    = 21,
    size     = 1.5
  ) +
  labs(
    x = "Retraso en la salida (minutos)",
    y = "Retraso en la llegada (minutos)",
    title = "Gráfico de dispersión: salida vs llegada"
  ) +
  theme_minimal() +
  theme(
    panel.grid   = element_blank(),
    panel.border = element_rect(color = "black", fill = NA,
                                linewidth = 0.3),
    plot.title   = element_text(hjust = 0.5)
  )


Trabajo grupal.

Cada grupo trabajará solo con los vuelos de su aeropuerto de origen (origin). La Pregunta 15 es de comparación entre aeropuertos y debe hacerse en conjunto._


Pregunta 1. Caracterización general de los retrasos (filter(), summarise(), ggplot(), geom_histogram(), geom_boxplot())

  • Describa el comportamiento de los retrasos en la salida (dep_delay) y en la llegada (arr_delay) usando:
    • tablas de resumen (media, mediana, desviación estándar, cuartiles);
    • al menos un gráfico (histograma y/o diagrama de caja).
  • Comente la forma de las distribuciones, la presencia de valores extremos y posibles asimetrías.

Pregunta 2. Intervalo de confianza para el retraso medio en la salida (t.test())

  • Construya un intervalo de confianza al 95% para la media del retraso en la salida (dep_delay).
  • Interprete el intervalo en contexto: ¿qué nos dice sobre el retraso promedio de los vuelos?

Pregunta 3. ¿El retraso promedio en la salida es distinto de 0? (t.test())

  • Plantee las hipótesis:
    • \(H_0:\ \mu_{\text{dep\_delay}} = 0\) (no hay retraso promedio).
    • \(H_1:\ \mu_{\text{dep\_delay}} \neq 0\).
  • Realice una prueba t, reporte el valor p y concluya en lenguaje sencillo si, en promedio, los vuelos salen adelantados, puntuales o atrasados.

Pregunta 4. Probabilidad de retraso importante en la salida (mutate(), summarise(), prop.test())

  • Estime la proporción de vuelos que salen con más de 15 minutos de retraso (dep_delay > 15).
  • Calcule:
    • la estimación puntual de la proporción;
    • un intervalo de confianza al 95% para esa proporción.
  • Interprete el resultado en términos de la “probabilidad” de que un vuelo salga con retraso importante.

Pregunta 5. Retrasos por tramo horario: mañana vs tarde (mutate(), ggplot(), geom_boxplot(), t.test())

  • Defina dos grupos de horario (por ejemplo, mañana y tarde) a partir de sched_dep_time.
  • Compare los retrasos en la salida (dep_delay) entre ambos grupos:
    • use gráficos (por ejemplo, diagramas de caja);
    • realice una prueba de hipótesis para comparar las medias de retraso.
  • Interprete el resultado: ¿en qué tramo horario parece haber más retraso promedio?

Pregunta 6. Relación entre distancia y tiempo en el aire (cor(), ggplot(), geom_point(), geom_smooth(), lm())

  • Analice la relación entre la distancia (distance) y el tiempo en el aire (air_time):
    • presente un gráfico de dispersión;
    • calcule el coeficiente de correlación.
  • Ajuste un modelo de regresión lineal simple con air_time como respuesta y distance como predictor.
  • Interprete la pendiente del modelo en contexto.

Pregunta 7. Modelo para explicar el retraso en la llegada (lm(), summary(), confint())

  • Construya un modelo de regresión lineal donde el retraso en la llegada (arr_delay) se explique al menos por:
    • el retraso en la salida (dep_delay);
    • la distancia (distance).
  • Presente la ecuación del modelo ajustado.
  • Interprete el coeficiente asociado a dep_delay: ¿qué significa un aumento de 1 minuto en el retraso de salida, manteniendo constante la distancia?

Pregunta 8. Comparación de aerolíneas (ANOVA) (count(), ggplot(), geom_boxplot(), aov(), summary())

  • Identifique las aerolíneas (carrier) con mayor cantidad de vuelos.
  • Formule y realice una prueba ANOVA para contrastar si el retraso promedio en la salida (dep_delay) es el mismo para esas aerolíneas.
  • Reporte la conclusión en lenguaje comprensible: ¿las aerolíneas se comportan de forma similar en términos de retraso en la salida?

Pregunta 9. Evaluación de supuestos de normalidad (ggplot(), geom_histogram(), qqnorm(), qqline(), shapiro.test())

  • Analice si el retraso en la salida (dep_delay) puede considerarse aproximadamente normal:
    • use histogramas y gráficos Q–Q;
    • opcionalmente, aplique una prueba de normalidad.
  • Comente brevemente si los supuestos de normalidad parecen razonables dado el tamaño de muestra.

Pregunta 10. Día del mes y retraso en la salida (mutate(), ggplot(), geom_boxplot(), t.test())

  • Clasifique los vuelos en dos grupos según day (por ejemplo, días 1–10 y días 21–31).
  • Compare el retraso en la salida (dep_delay) entre estos dos grupos:
    • use gráficos;
    • realice una prueba de hipótesis para comparar las medias.
  • Interprete el resultado: ¿hay evidencia de que los vuelos se retrasan más al inicio o al final del mes?

Pregunta 11. Probabilidad de gran retraso en la llegada (mutate(), summarise(), prop.test())

  • Estime la proporción de vuelos que llegan con más de 30 minutos de retraso (arr_delay > 30).
  • Construya un intervalo de confianza al 95% para esta proporción.
  • Compare este resultado con el intervalo obtenido en la Pregunta 4 (retraso en la salida) y comente:
    • ¿es más frecuente el gran retraso en la salida o en la llegada?

Pregunta 12. Destino más frecuente (count(), filter(), summarise(), ggplot(), geom_boxplot(), t.test())

  • Identifique el destino (dest) con mayor número de vuelos.
  • Solo con los vuelos hacia ese destino:
    • describa el retraso en la llegada (arr_delay) con estadísticas descriptivas;
    • represente arr_delay con un diagrama de caja;
    • construya un intervalo de confianza al 95% para la media de arr_delay.
  • Interprete: ¿cómo es el comportamiento típico de los retrasos al llegar a ese destino?

Pregunta 13. Nivel de puntualidad en la salida (mutate(), summarise(), prop.test())

  • Estime la proporción de vuelos que salen puntuales o adelantados (dep_delay ≤ 0).
  • Construya un intervalo de confianza para esa proporción.
  • Interprete el resultado en términos de un “nivel de puntualidad” del aeropuerto.

Pregunta 14. Factores asociados al retraso en la llegada (lm(), summary(), confint())

  • Elija al menos dos variables explicativas (por ejemplo, distance, air_time, month, carrier).
  • Construya un modelo de regresión lineal múltiple para explicar el retraso en la llegada (arr_delay).
  • Justifique la elección de variables.
  • Interprete los coeficientes principales y comente qué factores parecen estar más asociados al retraso en la llegada.

Pregunta 15. Comparación entre aeropuertos (trabajo conjunto) (group_by(), summarise(), ggplot(), geom_boxplot()/geom_col(), aov(), summary())

Usando todos los datos de los tres aeropuertos (EWR, JFK, LGA):

  • Construyan una tabla y un gráfico apropiado para comparar el retraso promedio en la salida (dep_delay) entre aeropuertos.
  • Apliquen una prueba de hipótesis global (por ejemplo, ANOVA) para determinar si el retraso promedio es el mismo en los tres aeropuertos.
  • Si la prueba indica diferencias, comenten:
    • qué aeropuerto parece funcionar mejor en términos de retraso;
    • qué aeropuerto presenta más problemas;
    • justifiquen con los resultados del análisis.