Introduction

What are the Adirondacks?

The Adirondack Park is a six million acre state park, although only 2.6 million of those acres are owned by New York State. The remaining 3.4 million acres is privately owned. The Adirondacks are home to some of the Northeast’s tallest mountains, and the tallest mountain in New York State (Mount Marcy). Along with the miles of hiking trails, the Adirondacks are also home to over 3,000 lakes and ponds, and 30,000 miles of rivers and streams. [1] These bodies of water are home to a diverse population of aquatic animals and they greatly impact life both inside and outside the park. Acid rain is the one of the biggest sources of pollution facing streams and lakes and studies have shown that the Adirondacks have suffered the worst acid rain damage in the nation. [2]

What is acid rain?

Acid rain is any type of precipitation with acidic components that falls from the atmosphere. This includes rain, snow, sleet, water vapor, and even dust and fog. Essentially, as sulfate and nitrate are released into the atmosphere, through pollution, they react with this precipitation and create sulfuric and nitric acids. These acids can then be carried hundreds of miles by wind and air movements where they are then deposited in the forms of precipitation described above. Here is the acid rain deposition process:

This is important because a majority of the nitrogen and sulfur dioxide pollution comes from utility plants located in the highly industrial Midwest states of Ohio, Illinois, Indiana and Pennsylvania. [3] Here is a map of the levels of sulfate and nitrate emissions in 1990:

With high elevations and high levels of precipitation, the Adirondacks are extremely susceptible to acid rain and before we look into how acid rain levels are changing throughout the years, we should note a few reasons why acid rain is particuarly dangerous. First, humans can be affected because of mercury contamination through the consumption of fish or fish eating birds. As we know, more than half of the park is made up of privately owned residences, a portion of which rely on the food they hunt/catch. Another issue is forests and plants because as the acid rain seeps into the soil, it “dissolves and eliminates nutrients needed for healthy tree growth, such as calcium. At the same time, it releases aluminum from the soil, which trees absorb.” [2] This aluminum not only kills tree roots which makes it harder for trees to get water, but it also kills fish and other aquatic species due to sediment runoff into streams and lakes. Now that we have some background information, we can dive into the datasets and see how acid rain has affected streams in the Adirondacks over the years.

Manipulating Adirondack Park data

I am initally using a USGS dataset to look at different levels of pH and harmful elements in streams located throughout the Adirondacks.

First, I made the determination that the Adirondacks have these latitudes and longitudes: West Longitude: -75.575893 South Latitude: 43.051877 East Longitude: -73.457411 North Latitude: 44.948829

The coordinates are important for determining the “boundary box” of the Adirondacks. This box limits the parameters to include only data from the Adirondacks. The relevant parameter codes can be found on the USGS website. [4]

We are examining certain, specified variables from the dataset throughout a time period of 1950 to the present.

#Define the variables to be used when extracting the relevant data:

pH <- "00400"
temp_C <- "00010"
depth_meters <-"00098"
hydrogen_mg_L <- "00191"
dissolvedOxygen_mg_L <- "00300"
dissolvedOxygen_percent <- "00301"
organicCarbon_mg_L <- "00681"
discharge_c3_s <- "30209"
methylmercury_ng_L <- "50284"
mercury_ng_L <- "50286"
sedimentConcentration_mg_L <- "80154"
iron_mg_L <- "99115"
nitrate_mg_L <- "99124"
sulfate_mg_L <- "99127"
iron2_mg_L <- "99128"

start_date <- "1960-01-01"
end_date <- "2020-01-01"
ADK_coord <- c(-75.575893, 43.051877, -73.457411, 44.948829)

#Extract the relevant data:-------------------------------------------------------------------------------------------
data <- readNWISdata(bBox = ADK_coord,
                      parameterCd = "00400",
                      service="site",
                      startDate = start_date,
                      endDate = end_date)

This is a map of all the sites in the boundary box of the Adirondack park. I used leaflet so that we are able to examine where the Adirondacks are in relation to the rest of New York and the United States.

The above call retrieved the site information for every site that recorded pH data. Next, we need to take only the data we are interested in, i.e. the pH, temperature

all_data <- readNWISqw(siteNumbers = data$site_no, parameterCd = c(pH, temp_C, depth_meters, hydrogen_mg_L, dissolvedOxygen_mg_L, dissolvedOxygen_percent, organicCarbon_mg_L, discharge_c3_s, methylmercury_ng_L, mercury_ng_L, sedimentConcentration_mg_L, iron_mg_L, nitrate_mg_L, sulfate_mg_L, iron2_mg_L), reshape = TRUE)

We can factor the data to only include columns and observations we are interested in. These variables that we are deleting had only values of NA and so they were observed as not being relevant.

all_data <- all_data %>%
  select(-agency_cd, -sample_end_dt, -sample_end_tm, -sample_start_time_datum_cd_reported, -tu_id, -body_part_id, -sample_start_time_datum_cd, -tm_datum_rlbty_cd, -sample_lab_cm_tx) %>%
  select(-remark_cd_00010, -val_qual_tx_00010, -dqi_cd_00010:-result_lab_cm_tx_00010) %>%
  select(-remark_cd_00098, -val_qual_tx_00098, -dqi_cd_00098:-result_lab_cm_tx_00098) %>%
  select(-remark_cd_00400, -val_qual_tx_00400, -dqi_cd_00400:-result_lab_cm_tx_00400) %>%
  select(-remark_cd_00191, -val_qual_tx_00191, -dqi_cd_00191:-result_lab_cm_tx_00191) %>%
  select(-remark_cd_00300, -val_qual_tx_00300, -dqi_cd_00300:-result_lab_cm_tx_00300) %>%
  select(-remark_cd_00301, -val_qual_tx_00301, -dqi_cd_00301:-result_lab_cm_tx_00301) %>%
  select(-remark_cd_00681, -val_qual_tx_00681, -dqi_cd_00681:-result_lab_cm_tx_00681) %>%
  select(-remark_cd_30209, -val_qual_tx_30209, -dqi_cd_30209:-result_lab_cm_tx_30209) %>%
  select(-remark_cd_50284, -val_qual_tx_50284, -dqi_cd_50284:-result_lab_cm_tx_50284) %>%
  select(-remark_cd_50286, -val_qual_tx_50286, -dqi_cd_50286:-result_lab_cm_tx_50286) %>%
  select(-remark_cd_80154, -val_qual_tx_80154, -dqi_cd_80154:-result_lab_cm_tx_80154) %>%
  select(-remark_cd_99115, -val_qual_tx_99115, -dqi_cd_99115:-result_lab_cm_tx_99115) %>%
  select(-remark_cd_99124, -val_qual_tx_99124, -dqi_cd_99124:-result_lab_cm_tx_99124) %>%
  select(-remark_cd_99127, -val_qual_tx_99127, -dqi_cd_99127:-result_lab_cm_tx_99127) %>%
  select(-remark_cd_99128, -val_qual_tx_99128, -dqi_cd_99128:-result_lab_cm_tx_99128)

The variable names given are hard to understand, so we can rename them to be clearer, more descriptive, and consistent. RV stands for result value, MC stands for method code, and AC stands for agency collecting.

names(all_data) <- c("siteNumber", "sampleDate", "sampleTime", "dataCollectingAgency", "mediumCode", "projectCode", "aquiferCode", "hydrologyConditionCode", "sampleTypeCode", "hydrologyEventCode", "startDateTime",
                     "temp_RV", "temp_MC", "temp_AC",
                     "depth_meters_RV", "depth_meters_MC", "depth_meters_AC",
                     "hydrogen_mg_L_RV", "hydrogen_mg_L_MC", "hydrogen_mg_L_AC",
                     "dissolvedOxygen_mg_L_RV", "dissolvedOxygen_mg_L_MC", "dissolvedOxygen_mg_L_AC",
                     "dissolvedOxygen_percent_RV", "dissolvedOxygen_percent_MC", "dissolvedOxygen_percent_AC",
                     "ph_RV", "ph_MC", "ph_AC",
                     "organicCarbon_mg_L_RV", "organicCarbon_mg_L_MC", "organicCarbon_mg_L_AC",
                     "methylmercury_ng_L_RV", "methylmercury_ng_L_MC", "methylmercury_ng_L_AC",
                     "mercury_ng_L_RV", "mercury_ng_L_MC", "mercury_ng_L_AC",
                     "sedimentConcentra_mg_L_RV", "sedimentConcentra_mg_L_MC", "sedimentConcentra_mg_L_AC",
                     "iron_mg_L_RV", "iron_mg_L_MC", "iron_mg_L_AC",
                     "nitrate_mg_L_RV", "nitrate_mg_L_MC", "nitrate_mg_L_AC",
                     "sulfate_mg_L_RV", "sulfate_mg_L_MC", "sulfate_mg_L_AC",
                     "iron2_mg_L_RV", "iron2_mg_L_MC", "iron2_mg_L_AC",
                     "discharge_c3_s_RV", "discharge_c3_s_MC", "discharge_c3_s_AC")

We want to look at the monthly and yearly data separately from one another. In order to do this, we need to separate that data into two distinct rows.

all_data <- separate(all_data, col = sampleDate, into = c("Year", "Month", "Day"), sep = "-")
## Warning: Expected 3 pieces. Missing pieces filled with `NA` in 14 rows
## [5811, 5815, 5825, 5827, 6364, 6369, 6635, 6637, 6752, 6809, 6814, 6816,
## 6821, 6854].

Adirondack Park Analysis

pH

First, I looked at pH data of the different sites and how the pH of streams have been affected in recent years, especially since the Clean Air Act came into effect in 1970. It was first suggested in 1963, but the EPA officially required states to enact the Clean Air Act. Essentially, the EPA sets limits on certain air pollutants and it sets limits on how much of those air pollutants can be in the air anywhere in the United States. The Clean Air Act vests the EPA with the authority to limit emissions of air pollutants coming from sources like chemical plants, utilities, and steel mills and although individual states may have stronger air pollution laws, they may not set weaker pollution limits than those set by EPA. Unfortunately, however, this mandate came a little too late and by 1976, when all the acidified lakes in the Park were cataloged, researchers from the Adirondack Lake Survey Corporation found that half of the lakes over 2,000 feet above sea level had no fish. The worst conditions were on the south and west, where precipitation is greater and the soil’s ability to neutralize acid is less than elsewhere in the Park. The higher the acidity, the less diverse the fish population; too much acidity, and there are no fish at all. And there’s plenty of acidity reaching the Adirondacks: researchers have concluded that between 20% and 40% of Adirondack lakes are acidified, with between 10% and 25% of them highly acidified. We will look into the Lake Survey Corporation’s data more later on.

When thinking about this data, we have to understand that it is not only the precipitation that affects the pH and chemical composition of the Adirondacks bodies of water. For example, it is highly likely that one site is more acidic or basic than another. Factors including sediment concentration, limestone decomposition, groundwater flow, etc. could all affect the pH of water without precipitation having an impact. That being said, this dataset in particular shows more of a long-term trend rather than a yearly difference.

## Warning: Removed 2674 rows containing missing values (geom_point).

In this plot, even though there is a lot going on and it is hard to tell points apart, we can clearly see that the pH dropped drastically in the mid 1970s.

## Warning: Removed 2674 rows containing non-finite values (stat_bin).

When we plot this data as a histogram, we can see that even though the majority of the data is around a neutral pH of 7, at least a quarter of the data is under a pH of 5.0. This is concerning because fish need a pH of at least 5 to survive, let alone be comfortable.

Next, we gathered the top six sites from where the most number of samples were taken. This takes a reasonable sample of the 700+ site numbers we currently have, and provides an accurate representation of the data. This also removes the possibility of having skewed data if some sites were only sampled once.

We can then take the above scatterplot and facet_wrap it to create a plot of six of the most sampled sites individually and compare:

## Warning: Removed 981 rows containing missing values (geom_point).

In this plot, we can see that the pH of the samples does, in fact, increase over time. This is most prevalent in the two bottom left plot, where around 1980, the pH levels seem to be at their lowest until they increase consistently until the 21st century where they remain constant. This shows the long-term trend of pH becoming less acidic as actions, such as the Clean Air Act were put into effect to combat harmful pollutants. It is also important to note that the graph in pink on the bottom right hand side and the graph in red on the top left, are not necessarily the most useful data because, although they are two of the top sites sampled, all of the samples took place before 1980. These samples are not helpful in determining any long-term trends.

Whiteface Cloud Analysis

While researching acid rain in the Adirondacks, I happened upon another intriguing dataset. The ALSC, Adirondack Lakes Survey Corporation, has been monitoring clouds on Whiteface mountain, a popular ski resort and one of the 46 high peaks in the Adirondacks. Whiteface is located in the northeastern part of the Adirondacks and was chosen because it is the only high peak with a summit that is “road accessible and has AC power.” [6] The clouds are monitored by the SUNY Albany Atmospheric Sciences Research Center, but unfortunately it is only accessible in the summer months. I looked at three different years of data: 2001 (when the survey first started), 2009, and 2017 (the most recent data).

Whiteface 2001

#read in the Whiteface data from 2001:
whiteface_2001 <- read_xls("./Data/whiteface_2001.xls", sheet = "FINAL-VALID", skip = 3)

We want to look specificly at monthly data, so in order to do this, we need to separate the date information into distinct rows.

whiteface_2001 <- separate(whiteface_2001, col = sampleDate, into = c("Year", "Month", "Day"), sep = "-")

pH

Calcium

## Warning: Removed 8 rows containing missing values (geom_point).

Sulfate

Nitrate

Whiteface 2009

#read in the Whiteface data from 2009:
whiteface_2009 <- read_xlsx("./Data/whiteface_2009.xlsx", sheet = "2009 WFC VALID", skip = 2)

We want to look specificly at monthly data, so in order to do this, we need to separate the date information into distinct rows.

whiteface_2009 <- separate(whiteface_2009, col = sampleDate, into = c("Year", "Month", "Day"), sep = "-")

pH

Calcium

Sulfate

Nitrate

Whiteface 2017

#read in the Whiteface data from 2017:
whiteface_2017 <- read_xlsx("./Data/whiteface_2017.xlsx", sheet = "2017 WFC VALID", skip = 5)

We want to look specificly at monthly data, so in order to do this, we need to separate the date information into distinct rows.

whiteface_2017 <- separate(whiteface_2017, col = sampleDate, into = c("Year", "Month", "Day"), sep = "-")

pH

Calcium

Sulfate

Nitrate

Whiteface Overall

We can now examine the amounts of pH, calcium, sulfate, and nitrate over the course of these years. All of the above plots were the breakdowns of each of the chemical factors for each given year (2001, 2009, 2017). We can now merge the three datasets (this is simple since the variable names are all the same) in order to compare these levels between the years.

all_whiteface_data = bind_rows(whiteface_2001, whiteface_2009, whiteface_2017)

Because there is nothing else contaminating the air other than the contaminants themselves, we should be able to see shorter term trends throughout the data and a more significant increase in pH and decrease in the harmful toxins.

pH

Now, we can facet_wrap by the pH to show a comparison between the years.

Calcium

Now, we can facet_wrap by the amount of calcium to show a comparison between the years.

## Warning: Removed 8 rows containing missing values (geom_point).

Sulfate

Now, we can facet_wrap by the amount of sulfate to show a comparison between the years.

Nitrate

Now, we can facet_wrap by the amount of nitrate to show a comparison between the years.

Conclusion

Although acid deposition is considerably lower in New York than it was several decades ago, and many Adirondack lakes have improved, some lakes continue to be impaired. In addition, there appears to be more of a delay in biological recovery as not all lakes in the region have recovered sufficiently for fish populations to be sustainable.