The National Science Foundation’s National Ecological Observatory Network (NEON) is a continental-scale observation facility operated by Battelle and designed to collect long-term open access ecological data to better understand how U.S. ecosystems are changing. NEON monitors ecosystems across the United States. Freshwater ecosystems include streams, rivers, and lakes while terrestrial ecosystems span from deserts to tropical forests. There is 81 freshwater and terrestrial field sites, across 20 ecoclimatic domains. You can have an overview here.

For this TD purpose, we choose to focus on the Caribou site, during one year.

We focus on the nitrate in surface water. Nitrate is measured using an optical sensor. It is reported as a mean value from 20 measurements made during a sampling burst every 15 minutes.

library(dplyr)
library(janitor)
library(lubridate)
library(neonUtilities)
library(forecast)
library(fpp2)
setwd("~/Documents/COURS/M2_DYNEA/Time_series")
if(file.exists("nsw_cari.rda")) {
    nsw_cari <- readRDS("nsw_cari.rda")
  } else {
    nsw_cari <-  neonUtilities::loadByProduct(
      dpID="DP1.20033.001",
      site="CARI",
      startdate = "2022-08",
      enddate = "2022-09",
      package="expanded",
      token = Sys.getenv("NEON_TOKEN"),
      check.size = FALSE
    )
    saveRDS(nsw_cari, "nsw_cari.rda")
  }

# Extract nitrate at 15 minute intervals
nitrate_cari <- nsw_cari$NSW_15_minute %>%
  as_tibble() %>%
  janitor::clean_names() %>%
  mutate(
    start_date_time = ymd_hms(start_date_time) - second(start_date_time)
  ) %>%
  select(c(start_date_time, surf_water_nitrate_mean, final_qf)) %>%
  rename(
    nitrate_mean = surf_water_nitrate_mean,
    label_nitrate_mean = final_qf
  )

nitrate_cari$nitrate_mean = if_else(nitrate_cari$nitrate_mean  > 25, NA_real_ , nitrate_cari$nitrate_mean)
nitrate_cari$nitrate_mean = if_else(nitrate_cari$nitrate_mean <= 0, NA_real_ , nitrate_cari$nitrate_mean)

représentation graphique

On sélectionne 1 seule semaine, partant du 14 août. 1 semaine = 4 x 24 x 7 données = 672

la fréquence est le nombre de données avant que le phénomène ne se répète, ici un jour donc 24x4 = 96 données.

nitrate_ts <- nitrate_cari %>%
  select(nitrate_mean) %>%
  ts(start=1, frequency=96) 

nitrate_ts %>%
  autoplot()

Faites une décomposition STL de la time-série du 20 au 30 aout 2022.

stl(nitrate_ts, s.window=96, robust=TRUE)

decompose(nitrate_ts) %>% autoplot()