library(tidyverse)Week 2 Air quality HW
Airquality Tutorial and Homework Assignment
Load in the library
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.
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)
View the data using the “head” function
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
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
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
Number 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
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.
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 source
p1`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Is this plot useful in answering questions about monthly temperature values?
optional plot 1
plot1 <- airquality |>
ggplot(aes(x=Temp, fill=Month)) +
geom_density(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")
plot1Plot 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")
p2Did this improve the readability of the plot?
Optional plot 2
plot2 <- airquality |>
ggplot(aes(x=Temp, fill=Month)) +
geom_density(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")Warning in geom_density(position = "identity", alpha = 0.5, binwidth = 5, :
Ignoring unknown parameters: `binwidth`
plot2Plot 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.
Optional plot 3
plot3<- airquality |>
ggplot(aes(Month, Temp, fill = Month, color = 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_count() +
scale_fill_discrete(name = "Month", labels = c("May", "June","July", "August", "September"))
plot3Plot 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"))
p4Optional plot 4
plot4 <- 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_violin()+
scale_fill_grey(name = "Month", labels = c("May", "June","July", "August", "September"))
plot4Plot 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, axis label, and caption for the datasource.
Then write a brief essay, described below.
Be sure to write a brief essay that describes the plot you have created, what the plot shows, and what code you used to make this modification.
mean(airquality$Ozone, na.rm = TRUE) -> mozone
mean(airquality$Solar.R, na.rm = TRUE) -> solarr
plot5 <- airquality |>
ggplot(aes(x = Ozone, y = Solar.R, fill = Month, color = Month)) +
labs(x = "Ozone Lebel", y = "Solar Radiation (Solar.R)",
title = "Comparing Ozone and Solar Radiation May-Sept 1973",
caption = "New York State Department of Conservation and the National Weather Service") +
geom_smooth(se = FALSE) +
geom_vline(xintercept = mozone, color = "red") +
geom_hline(yintercept = solarr, color = "black") +
scale_fill_discrete(name = "Month", labels = c("May", "June", "July", "August", "September")) +
scale_color_discrete(name = "Month", labels = c("May", "June", "July", "August", "September"))
plot5`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning: Removed 42 rows containing non-finite values (`stat_smooth()`).
Although reports of ozone depletion had been reported as early as the 1970s, it was not until the Ozone Symposium and the Symposium on Polar Regions and Hydrosphere in 1983 that the phenomenon known as the ozone hole, which looks like a hole in the ozone layer due to depletion, was reported and the issue of ozone was addressed in earnest, This was followed by a paper in 1985. According to the paper, the ozone concentration increases from spring to early summer, which is feared to harm human health. The graph clearly shows that the ozone level increases with increasing solar radiation. The graph also shows that the ozone concentration increases, especially from May to August, which may affect people’s health and the natural environment. (The graph also shows that the higher ozone levels, especially from May to August, will affect human health and the natural environment (sunburn, respiratory system, eye irritation, tree decline, and the food chain).
This table uses Geom-smooth, removing the shadows where the Standard Error appears typically. This way, the overlapping areas between months are visible and show how each month curves. Also, by overlapping colors, there is a possibility that colors other than the one shown may appear, so this avoids confusion. The vertical axis is the May-August Mean value of the ozone level (Red), and the horizontal axis is the May-August Mean value of Solar Rediation (Black). This mean is not the average for the entire year, but rather the average for the five-month period of this data set. I considered using linewidth after se=false to make the line a little thicker, but it looks like a kindergartner’s drawing, so the linewidth is set to the default.