UGLR Warm Winters working group is a network of AmeriFlux and NEON flux tower sites in the Upper Great Lakes Region (UGLR) spanning Minnesota, Wisconsin, Michigan, and Ohio. Our primary interest is to assess how wintertime warming in this region is impacting annual net carbon exchange between forests and atmosphere, and specifically whether increases in wintertime ecosystem respiration (ER) are offsetting carbon uptake through gross primary production (GPP) sufficiently to alter the carbon balance of these systems.
Part 1 is an initial assessment of carbon flux phenology (CFP) for sites within the UGLR Warm Winters working group’s region of interest. Tower data for several sites are assessed. The general approach to segmenting flux phenological phases comes from methods detailed in the following publications:
Noormets
et al. (2009)
Baldocchi
et al. (2005)
“The date of onset of net carbon uptake was identified as the day when daily integrated net CO2 exchange (NEE) experienced a transition from its winter respiration phase to its spring/summer assimilation phase (Fig. 1). To deduce this date with objective and statistical rigor, we regressed measurements of daily NEE on day of year, using a subsets of data from this springtime source-sink transition period. The method has a clean and distinct signal with a quantifiable error. For the case shown in Fig. 1, the statistical variation in detecting the precise date of the zero crossing is ±2 days, based on the 95% confidence interval.” -Baldocchi et al. (2005)
List of sites:
US-UMB
US-UMd
US-Syv
US-WCr
# load dependencies
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ 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
library(lubridate) # work with dates
library(dplyr) # data manipulation (filter, summarize, mutate)
library(ggplot2) # graphics
library(here)
## here() starts at C:/github/UGLR_warm_winter_fluxes
library(plotly)
##
## Attaching package: 'plotly'
##
## The following object is masked from 'package:ggplot2':
##
## last_plot
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following object is masked from 'package:graphics':
##
## layout
library(Metrics)
library(ggpubr)
library(patchwork) # To display 2 charts together
library(hrbrthemes)
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
## Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
## if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
library(htmltools)
# load data, name by site ID
## Willow Creek, US-WCr
## 2024
# data_WCr <- read.csv(here("data/US-WCr_HH_202401010000_202406190000.csv")) %>%
# mutate_if(is.logical, ~as.numeric(.)) %>%
# mutate(across(everything(), ~na_if(., -9999))) %>%
# mutate(Year = substr(TIMESTAMP_START, 1, 4),
# Month = substr(TIMESTAMP_START, 5, 6),
# Day = substr(TIMESTAMP_START, 7, 8),
# Hour = substr(TIMESTAMP_START, 9, 10),
# Minute = substr(TIMESTAMP_START, 11, 12),
# Datetime = as.POSIXct(strptime(paste(Year, Month, Day,
# paste(Hour, Minute, sep=":")),
# format = "%Y %m %d %H:%M")), ## add timezone specification to avoid NAs at timeshift for daylight savings time
# Date = make_date(Year, Month, Day),
# Time = format(Datetime, format = "%H:%M"),
# DoY = yday(Datetime))
#
# ## Sylvania, US-Syv
# ## 2001 - 2021, FLUXNET HH
# data_Syv_01_21 <- read.csv(here("data/AMF_US-Syv_FLUXNET_SUBSET_DD_2001-2021_3-5.csv")) %>%
# mutate_if(is.logical, ~as.numeric(.)) %>%
# mutate(across(everything(), ~na_if(., -9999))) %>%
# mutate(Year = substr(TIMESTAMP, 1, 4),
# Month = substr(TIMESTAMP, 5, 6),
# Day = substr(TIMESTAMP, 7, 8),
# Datetime = as.POSIXct(strptime(paste(Year, Month, Day),
# format = "%Y %m %d")),
# Date = make_date(Year, Month, Day),
# DoY = yday(Datetime))
We are primarily interested in assessing the following: (1) magnitude of GPP, ER, NEE for network sites in winter (2) evaluating whether winter ER and early Spring GPP were greater than prior years because of higher temps and, if so, whether increases in GPP sufficiently offset opposing increases in ER