Airquality Homework

Author

T McCollum

Load in the library

Load library tidyverse in order to access dplyr and ggplot2

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.4     ✔ 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

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.

##Load the dataset into your global environment

Because airquality is a pre-built dataset, we can write it to our data directory to store it for later use.

data("airquality") 

##View the data using the “head” function

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)

head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

Notice that all the variables are classified as either integers or continuous values .

##Calculate Summary Statistics

If you want to look at specific statistics, here are some variations on coding. Here are 2 different ways to calculate “mean.”

mean(airquality$Temp)
[1] 77.88235
mean(airquality[,4]) 
[1] 77.88235

For the second way to calculate the mean, the matrix [row,column] is looking for column #4, which is the Temp column and we use all rows

##Calculate Median, Standard Deviation, and Variance

median(airquality$Temp)
[1] 79
sd(airquality$Wind)
[1] 3.523001
var(airquality$Wind)
[1] 12.41154

##Rename the Months from number to names

Sometimes we prefer the months to be numerical, but here, we need them as the month names. There are MANY ways to do this. Here is one way to convert numbers 5 - 9 to May through September

airquality$Month[airquality$Month == 5]<- "May"
airquality$Month[airquality$Month == 6]<- "June"
airquality$Month[airquality$Month == 7]<- "July"
airquality$Month[airquality$Month == 8]<- "August"
airquality$Month[airquality$Month == 9]<- "September"

##Now look at the summary statistics of the dataset

See how Month has changed to have characters instead of numbers (it is now classified as “character” rather than “integer”)

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

airquality$Month<-factor(airquality$Month, 
                         levels=c("May", "June","July", "August",
                                  "September"))

##Plot 1: Create a histogram categorized by Month

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.

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 in chronological order. This is a different way to order than what was shown above.

labs allows us to add a title, axes labels, and a caption for the data source

##Plot 1 Code

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 source
p1
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

##Plot 1 Output

#Is this plot useful in answering questions about monthly temperature values?

This plot is not very useful in answering questions about monthly temperature values because the binwidth is so small and fits so awkwardly onto the graphed lines (with temperatures labeled in increments of 10), it is hard to discern the range of temperatures a bar represents. Also, because the bars are not outlined, it becomes hard to differentiate between different bars of the same color, and even some with different colors. In the case of grouped bars of only one color, red for example, the large monochromatic clump it results in makes it hard to extract the differences in each bar. It’s even hard to tell how many bars are present at all. Then, even in the case of the green and blue bars, though they are two different colors, they are so bright it becomes sort of hard to tell them apart anyway. I also wonder, since the bars are on top of each other, what would happen if two months had the same temperature at the same frequency. How could one read that?

##Plot 2: Improve the histogram of Average Temperature by Month

Outline the bars in white using the color = “white” command

Use alpha to add some transparency (values between 0 and 1)

Change the binwidth

Add some transparency and white borders around the histogram bars.

##Plot 2 Code

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

##Plot 2 Output

Here July stands out for having high frequency of 85 degree temperatures. The dark purple color indicates overlaps of months due to the transparency.

#Did this improve the readability of the plot?

I think both making the binwidth larger and outlining the bars in white improves the readability of the plot. With the larger binwidth, the bars translate much better to the labeled temperature values, and the white outlining the bars allows a much better separation of the temperature ranges. However, with the opacity of the colors lowered, and with many of the different bars remaining on top of each other, the colors have melded and created new shades, meaning that the key that describes what colors equal what months is not nearly as helpful as it should be. This is a pretty big deal when trying to extract temperature values by month, making this graph hard to read as well.

##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: Side by Side Boxplots in Gray Scale

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.

##Plot 4 Code

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

##Plot 5:

Now make one new plot on your own, that is meaningfully different from the 4 I have shown you. You can select any of the variables in this dataset. Be sure to explore the dataset to see which variables are included that we have not explored yet. You may create a scatterplot, histogram, boxplot, or something else.

Be sure to include a title, axes labels, and caption for the datasource in your Plot 5. Then finally, below your chunk of code for your plot 5, ….

p5 <- airquality |>
  ggplot(aes(Month, Wind, fill = Month)) + 
  theme(plot.title = element_text(hjust = 0.5)) +
  labs(x = "Months May to September", y = "Wind Speeds", 
       title = "Boxplot of Wind Speeds by Month",
       caption = "New York State Department of Conservation and the National Weather Service") +
  geom_boxplot(color = "navy") +
  scale_fill_manual(values = c("#1E90FF", "#6495ED", "#5F9EA0", "#B0E0E6", "#B0C4DE") , name = "Month", labels = c("May", "June","July", "August", "September"))
p5

##Write a brief essay here

Describe the plot type you have created

Any insights that the plot shows

Describe any special code you used to make this plot

I have created a plot that displays data collected from the set Air Quality, on wind speeds as related to the months of May through September. The plot shows that in June there were two recordings of outlier wind speeds, one much higher than most other months, and one speed much lower than most other months, meaning that June was both the windiest and least windy month. In making this plot, I did some reading about r color schemes, and I ended up changing the function scale_fill_discrete() to scale_fill_manual(), and then picked out individual names of different shades of blue to color my boxplots, because I felt the look of blues represented wind speed data better than the multi-color of before I changed it (scale_fill_manual(values = c(“#1E90FF”, “#6495ED”, “#5F9EA0”, “#B0E0E6”, “#B0C4DE”)). I also changed the boxplot outline color to navy instead of black or white, for a similar reason (geom_boxplot(color = “navy”). I think a navy outline looked more cohesive with the blues. When I initially made the plot, I also realized the title was centered to the left, and I thought that looked off with how short my title is. I did some more reading about r functions and figured out a way to center the title using the function theme(plot.title = element_text(hjust = 0.5)). The fuction theme() is used to change things in a data plot that are not data related, title being one of them. With hjust = 0.5, I am telling r to move the horizontal text I specified to the center of the plot area.