Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
Feb 2025 3.083444 2.692177 3.474710 2.485054 3.681833
Mar 2025 3.090663 2.605688 3.575639 2.348958 3.832369
Apr 2025 3.413831 2.847043 3.980620 2.547003 4.280660
May 2025 3.266046 2.699139 3.832952 2.399037 4.133055
Jun 2025 3.266046 2.684909 3.847183 2.377273 4.154819
Jul 2025 3.266046 2.671018 3.861074 2.356029 4.176063
Aug 2025 3.266046 2.657444 3.874648 2.335270 4.196822
Sep 2025 3.266046 2.644167 3.887925 2.314964 4.217128
Oct 2025 3.266046 2.631167 3.900925 2.295083 4.237009
Nov 2025 3.266046 2.618428 3.913664 2.275600 4.256492
Dec 2025 3.266046 2.605935 3.926157 2.256493 4.275599
Jan 2026 3.266046 2.593674 3.938418 2.237742 4.294350
ME RMSE MAE MPE MAPE MASE
Training set 0.016989 0.2869492 0.2120094 -0.098135 6.592307 0.6929827
ACF1
Training set 0.0006400605
Source Code
---title: "Jet Blue Airways"author: "Penelope Pooler Eisenbies"date: last-modifiedlightbox: truetoc: truetoc-depth: 3toc-location: lefttoc-title: "Table of Contents"toc-expand: 1format: html: code-line-numbers: true code-fold: true code-tools: trueexecute: echo: fenced---```{r}#| label: setup#| include: false# suppress scientific notationoptions(scipen=100)# install helper package that loads and installs other packages, if neededif (!require("pacman")) install.packages("pacman", repos ="http://lib.stat.cmu.edu/R/CRAN/")# install and load required packages# pacman should be first package in parentheses and then list otherspacman::p_load(pacman,tidyverse, magrittr, knitr, gridExtra, forecast, tidyquant, lubridate, ggthemes, RColorBrewer, dygraphs, xts)# verify packages#p_loaded()```## Import and Examine Data```{r}#| label: import data# data source: https://www.transtats.bts.gov/Data_Elements.aspx?Data=1jetblue <-read_csv("data/jetblue_airways_4_30_2025.csv",show_col_types = F, skip=1)|>filter(Month !="TOTAL") |>mutate(date_som =ym(paste(Year, Month)),Date =ceiling_date(date_som, "month")-1,Total = (TOTAL/1000000) |>round(2)) |>select(Date, Total) |>glimpse(width=60)jetblue_pp <- jetblue |># post_pandemic data filter(Date >="2021-06-01") |>glimpse(width=60)```### Interactive Time Series Plot```{r}#| label: create dygraph# create interactive plotjetblue_xts <-xts(x=jetblue[,2], order.by=jetblue$Date)(jetblue_dg <-dygraph(jetblue_xts[,1], main="Jet Blue Airways - Total Passengers") |>dySeries("Total", label="Total (Mill.)", color="blue") |>dyAxis("y", label ="", drawGrid =FALSE) |>dyAxis("x", label ="", drawGrid =FALSE) |>dyShading(from="2020-3-12", to="2021-6-14", color ="lightgrey") |>dyRangeSelector())```## Full and Truncated Data Plots### Plot of Full Time SeriesSeasonal pattern was disrupted by the pandemic when air travel was considered dangerous.```{r}#| label: Full Time Series#| warning: false#| message: false(full_plot <- jetblue |>ggplot() +geom_line(aes(x=Date, y=Total), linewidth=1, color="blue") +theme_classic() +scale_x_date(date_breaks ="2 years", date_labels ="%Y", limits=c(ymd("2001-12-31"), ymd("2025-01-31"))) +scale_y_continuous(breaks=seq(0,4,.5), limits=c(0,4)) +labs(title="Jet Blue Airways: October 2002 - January 2025",subtitle="Total Passengers (Domestic and International)",x="Date", y="Millions of Passengers",caption="Data Source: https://www.bts.gov/" ) +theme(plot.title =element_text(size =15),plot.caption =element_text(size =10),axis.title.x =element_text(size =15),axis.title.y =element_text(size =15),axis.text.x =element_text(size =10),axis.text.y =element_text(size =15)))ggsave("img/jetblue_full_plot_2025_04_30.png", width=6, height=4, unit="in")```### Plot of Truncated Time SeriesOnce vaccines became readily available, air travel began to resume it's traditional pattern:- Peaks occur at the end of July- Low points occur at the end of Jnauary- Pattern is not straightforward to discern because post-pandemic data are fairly limited.- Data for February and March of 2024 are not available yet.```{r}#| label: Truncated Time Series#| warning: false#| message: false(short_plot <- jetblue_pp |>ggplot() +geom_line(aes(x=Date, y=Total), linewidth=1, color="blue") +theme_classic() +scale_x_date(date_breaks ="2 months", date_labels ="%b", limits=c(ymd("2021-05-31"), ymd("2025-1-31")))+scale_y_continuous(limits=c(2,4)) +labs(title="Jet Blue Airways: June 2021 - January 2025",subtitle="Total Passengers (Domestic and International)",x="Date", y="Millions of Passengers",caption="Data Source: https://www.bts.gov/" ) +theme(plot.title =element_text(size =15),plot.caption =element_text(size =10),axis.title.x =element_text(size =15),axis.title.y =element_text(size =15),axis.text.x =element_text(size =10),axis.text.y =element_text(size =15)))#ggsave("img/jetblue_trnc_plot_2024_04_21.png", width=6, height=4, unit="in")```## Forecast Modeling### Create Time Series (`ts`)```{r}#| label: create time seriesjetblue_ts <-ts(jetblue_pp$Total, freq=12, start=c(2021,6)) # create time seriesjetblue_ts # display time series```### Model 1```{r}#| label: Model 1jetblue_model1 <- jetblue_ts |>auto.arima(ic="aic", seasonal=T)jetblue_forecast1 <- jetblue_model1 |>forecast(h=12)(jetblue_fcp1 <-autoplot(jetblue_forecast1) +labs(y ="Number of Passenger (Mill.)") +theme_classic())jetblue_forecast1checkresiduals(jetblue_forecast1, test=F)(acr1 <-accuracy(jetblue_forecast1)) ```### Model 2```{r}#| label: Model 2jetblue_model2 <- jetblue_ts |>auto.arima(ic="aic", seasonal=F) jetblue_forecast2 <- jetblue_model2 |>forecast(h=12)(jetblue_fcp2 <-autoplot(jetblue_forecast2) +labs(y ="Number of Passenger (Mill.)") +theme_classic())jetblue_forecast2checkresiduals(jetblue_forecast2, test=F)(acr2 <-accuracy(jetblue_forecast2)) ```