Airquality Assignment-

Replace with Your Name

1- Load in the library

Load library tidyverse in order to access dplyr and ggplot2

library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.4.2
## ── 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

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.

2- 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")

3- Look at the structure of the data

In the global environment, click on the row with the airquality dataset and it will take you to a “spreadsheet” view of the data.

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

5- 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

6- Calculate Median, Standard Deviation, and Variance

#median
median(airquality[,4])
## [1] 79
#std.
sd(airquality[,4])
## [1] 9.46527
# var
var(airquality[,4])
## [1] 89.59133

7- 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"

8- 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.

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`.

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

It is not useful in answering questions about monthly temperature values. It is difficult to tell where one month begins and another ends, and it even looks like most of May and June are completely covered by the other months. In addition, the graph is a little bit too spike-y to be pleasant to the eye. Overall, looking at the graph it is not easy to find the information for each month, and it is just not very easy on the eyes.

Plot 2: Improve the histogram of Average Temperature by Month

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

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

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

Note the points above and below the boxplots in June and July. They are outliers.

Plot 4:

Now make one new plot on your own, that is meaningfully different from the 3 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, colors, and caption for the datasource in your Plot 4.

library(ggridges)
## Warning: package 'ggridges' was built under R version 4.4.2
new_plot <- ggplot(airquality, aes(x=Ozone, y=fct_rev(Month))) +
  geom_density_ridges(aes(fill = Month), alpha = 0.5, color = "blue4") +
  labs(
    y = "Month",
    x = "Ozone by parts per billion",
      title = "Ozone based on Month",
      caption = "Collected from the New York State Department of Conservation and National Weather Service."
  ) +
scale_color_manual(values = c(May ="#ea3b3b" , June = "#ea803b", July = "#e2ea3b", August = "#52d638", September = "#389dd6"))

new_plot
## Picking joint bandwidth of 11
## Warning: Removed 37 rows containing non-finite outside the scale range
## (`stat_density_ridges()`).
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's colour values.

Then, write a brief essay here:

I created a density ridge plot showing the Ozone in parts per billion in each month. I know that I was probably supposed to pick something other than months, but I was just curious as to if some months had higher ozone levels than others. “Ozone by parts per billion” is referring to how they measured the presence of ozone: they test a billion air particles and out of those billion record how many are ozone. The month is very simple, it is just talking about which month the data came from.

The plot shows that, out of the five months present—May, June, July, August, and September—August had the highest Ozone levels, but it was also one of the most spread-out months. Except July, the other months stayed around the same Ozone level with few higher points. All in all, there weren’t any months where the Ozone levels were dramatically higher. Pretty boring, but also good news for the population of New York.

I didn’t make any drastic changes to the colors, I feel like the rainbow does a good enough job in this type of plot. However, it was annoying me that it wasn’t in proper rainbow order. So, I figured I might as well go all the way and create my own colors as well as reorder the Y axis to match the color-key, as it was originally in the exact opposite order. In addition, I changed the black outline to a dark blue. This is entirely personal preference, but I always think the black is too piercing, and I prefer to have something that’s just as effective in showing the information, but also softer.

The special coding that I used to reverse the order of the y-axis was “y=fct_rev(Month)” inside the ggplot call. The code came from the username martin.R, or Martin Wade on the “Reverse order of categorical y axis (in ggridges/ggplot2)” thread on Posit Community.