Because airquality is a pre-built dataset, we can write it to our data directory to store it for later use.
The source for this dataset is the New York State Department of Conservation and the National Weather Service of 1973 for five months from May to September recorded daily.
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Load the dataset into your global environment
data("airquality")
Look at the structure of the data
the function, head, will only disply the first 6 rows of the dataset. Notice in the global environment to the right, there are 153 observations (rows)
See how Month has changed to have characters instead of numbers
summary(airquality$Month)
Length Class Mode
153 character character
Month is a categorical variable with different levels, called factors.
This is one way to reorder the Months so they do not default to alphabetical (you will see another way to reorder DIRECTLY in the chunk that creates the plot below in Plot 1)
Here is a first attempt at viewing a histogram of temperature by the months May through September. We will see that temperatures increase over these months. The median temperature appears to be about 75 degrees.
Reorder the legend so that it is not the default (alphabetical), but rather in chronological order.
fill = Month colors the histogram by months between May - Sept.
scale_fill_discrete(name = “Month”…) provides the month names on the right side as a legend.
p1 <- airquality |>ggplot(aes(x=Temp, fill=Month)) +geom_histogram(position="identity")+scale_fill_discrete(name ="Month", labels =c("May", "June","July", "August", "September")) +labs(x ="Monthly Temperatures from May - Sept", y ="Frequency of Temps",title ="Histogram of Monthly Temperatures from May - Sept, 1973",caption ="New York State Department of Conservation and the National Weather Service") #provide the data sourcep1
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Is this plot useful in answering questions about monthly temperature values?
Plot 2: Improve the histogram using ggplot
Outline the bars in white using the color = “white” command
Use alpha to add some transparency (values between 0 and 1)
Change the binwidth
Histogram of Average Temperature by Month
Add some transparency and white borders around the histogram bars. Here July stands out for having high frequency of 85 degree temperatures. The dark purple color indicates overlaps of months due to the transparency.
p2 <- airquality |>ggplot(aes(x=Temp, fill=Month)) +geom_histogram(position="identity", alpha=0.5, binwidth =5, color ="white")+scale_fill_discrete(name ="Month", labels =c("May", "June","July", "August", "September")) +labs(x ="Monthly Temperatures from May - Sept", y ="Frequency of Temps",title ="Histogram of Monthly Temperatures from May - Sept, 1973",caption ="New York State Department of Conservation and the National Weather Service")p2
Did this improve the readability of the plot?
Plot 3: Create side-by-side boxplots categorized by Month
We can see that August has the highest temperatures based on the boxplot distribution.
p3 <- airquality |>ggplot(aes(Month, Temp, fill = Month)) +labs(x ="Months from May through September", y ="Temperatures", title ="Side-by-Side Boxplot of Monthly Temperatures",caption ="New York State Department of Conservation and the National Weather Service") +geom_boxplot() +scale_fill_discrete(name ="Month", labels =c("May", "June","July", "August", "September"))p3
Notice that the points above and below the boxplots in June and July are outliers.
Plot 4: Make the same side-by-side boxplots, but in grey-scale
Use the scale_fill_grey command for the grey-scale legend, and again, use fill=Month in the aesthetics
Side by Side Boxplots in Gray Scale
Here we just changed the color palette to gray scale using scale_fill_grey
p4 <- airquality |>ggplot(aes(Month, Temp, fill = Month)) +labs(x ="Monthly Temperatures", y ="Temperatures", title ="Side-by-Side Boxplot of Monthly Temperatures",caption ="New York State Department of Conservation and the National Weather Service") +geom_boxplot()+scale_fill_grey(name ="Month", labels =c("May", "June","July", "August", "September"))p4
We will analyze the increase in wind speed over the months from May through September. Before creating the side-by-side box plot for wind speed by month, we will examine the variation in wind speed to determine if there is a wide range of variance.
median(airquality$Wind)
[1] 9.7
mean(airquality$Wind)
[1] 9.957516
We will create side-by-side box plots to display the overall patterns of wind speed data categorized by month. Box plots are useful for visualizing the center and spread of the data. The median wind speed appears to be approximately 9.7 mph, which is not significantly different from the median of 9.9 mph.
To create the side-by-side boxplots, we will use the following variables and coding:
We use airquality data set. Two variables are used: month and wind.
Keep the month and wind variables in aesthetics.
fill = Month colors the boxplots by months between May - Sept.
Set the x label (Months from May through September) and y label (Wind Speed in mph) using labs code.
And then scale_fill_discrete(name = “Month”…) provides the month names on the right side as a legend.
p5 <- airquality |>ggplot(aes(Month, Wind, fill = Month)) +labs(x ="Months from May through September", y ="Wind Speed in mph", title ="Side-by-Side Boxplot of Monthly Wind Speed",caption ="New York State Department of Conservation and the National Weather Service") +geom_boxplot() +scale_fill_discrete(name ="Month", labels =c("May", "June","July", "August", "September"))p5
Based on the side-by-side boxplots, we can observe that each boxplot has half of the data above the median and half below, indicating that the data are roughly symmetrical with the median positioned centrally within the box. However, the boxplots for wind speeds in August and September appear to be skewed, suggesting a slight deviation from perfect symmetry. Despite this light skewness, the variances do not seem significant, indicating a relatively consistent spread of data points around the median for these months.
From the boxplot distribution, it is evident that May has the highest wind speeds, followed by September, with June coming in third. This ranking is based on the median wind speed values for each month, highlighting that May experiences the most intense wind conditions. Additionally, the interquartile range (IQR), which measures the middle 50% of the data, can give us further insight into the spread of wind speeds. May’s wider IQR compared to the other months suggests more variability in wind speeds.
For June, there are values that fall outside the whiskers, represented as dots, which are identified as outliers. These two outliers suggest that the wind speeds in June are more extreme than the expected variation. It is important to review these data points to determine whether they are genuine outliers or potential errors. Outliers can significantly affect the analysis and interpretation of the data. If they are valid observations, they might indicate unusual weather patterns or measurement conditions in June.
Comparing the overall spread and central tendencies, May not only has the highest median wind speed but also shows a broader range of wind speeds. This implies that while the average conditions are windier in May, the variability is also higher. In contrast, the relatively narrower boxes for June, July, and August suggest more consistent wind speeds within those months, albeit with some light skewness in July and August indicating that wind speeds tend to be higher or lower than the median more frequently.
In conclusion, while May shows the highest wind speeds with greater variability, the presence of outliers in June suggests further investigation. Understanding these patterns can help in weather forecasting, preparing for extreme weather events, and other practical applications related to wind speed data.