Wheatfen Wetland Monitoring

This document displays the visual outputs from some of the analysis conducted at Wheatfen in the Norfolk Broads.

Image of Wheatfen. Source: Wheatfen Nature Reserve

Image of Wheatfen. Source: Wheatfen Nature Reserve

General Information:

This page specifically looks at the wetland soil properties, specifically the peat moisture, temperature, electrical conductivity (EC) and photosynthetically active radiation (PAR) at one location at Wheatfen from a sensor which was inserted into the surface of the peat. It then also compares with the conductivity data which was in the water close to the dyke.

Click here for more details on monitoring setup
An ECH20 GS3 Volumetric water content (VWC) instrument, electrical conductivity and temperature sensor from the METER group is located next to Ditch Far. The distance from the outer casing of the well to the middle needle of the sensor is 34 cm. The 5.5 cm needles were pressed gently into the undisturbed peat surface, with the top of the sensor showing above the peat surface. Readings are taken every 50 minutes. VWC units in m3/m3 with an accuracy of ± 0.03 m3/m3. EC units in dS/m EC bulk with an accuracy of ± 5% from 0-5 dS/m and ±10% from 5-25 dS/m. Temperature units are in °C with a resolution of 1 °C and an accuracy of ±1 °C. The PAR sensor is located on a tripod which is 120 cm from the DitchFar well, 86 cm from the ground surface to the base of the metal PAR place (PAR sensor make and model needed). PAR units are in μmol/m²s.

These parameters have been monitored for 5 years between April 2019 and currently July 2024, however the work is ongoing and will be updated through time.

Data Analysis

Firstly we can calculate the mean and standard deviation for each of the monitoring parameters for an initial insight into Wheatfen. Printed out is the mean and standard deviation, respectively:

Permittivity  Temperature Conductivity          PAR 
       56.86        11.04       658.99        29.94 
Permittivity  Temperature Conductivity          PAR 
        5.51         4.60        72.94        90.43 

The next part of the document is used to explore the different parameters through a number of different plots and analysis.

Dielectric Permittivity

Permittivity is a measure of how well a material can store electrical energy in an electric field. In a wetland environment like Wheatfen it is important to know the permittivity as it is a good reflection of the moisture content and physical properties of the soil.

Plotting timeseries

Show code
ggplot(data = data, aes(x= datetime, y=Permittivity))+
  geom_line(colour = "navy")+
  labs(
    title = "Permittivity",
    x = "Year",
    y = "Permittivity") +
  ggpubr::theme_pubr()

This timeseries doesn’t really show any clear seasonal patterns with inconsistent jumps at different points of each year. However the next few plots would suggest otherwise.

Seasonality

Show code
ggplot() +
  geom_errorbar(data = mean_sd_month,
                aes(x = Month, ymin = Permittivity_mean - Permittivity_sd, ymax = Permittivity_mean + Permittivity_sd), 
                width = 0.2, color = "black") +
  geom_point(data = Monthly_means, aes(x = Month, y = Permittivity, color = as.factor(year)), size = 2) +
  theme(
    axis.text.x = element_text(size = 12, face = "bold"),
    axis.title.y = element_text(size = 12, face = "bold")) +
  labs(
    title = paste("Comparison between Mean Monthly Permittivity"),
    x = "Month",
    y = "Permittivity",
    color = "Year") +
  scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
  scale_y_continuous(limits = c(40, 70), breaks = seq(40, 70, 10)) +
  ggpubr::theme_pubr()

Firstly, this plot of the mean of each year for every month shows that there is some consistency with what happens in each month of the year, across each of the monitoring years.

There does seem to be two drops in permittivity through the year. Firstly a brief decrease at the end of meteorological winter in February, and then a more significant drop in July and August.

In addition to the above plot, we can also check the seasonality of the data using the following two plots, firstly the acf (auto correlation function) and then the partial autocorrelation function).

Show code
acf(daily_data$Permittivity)

This ACF plot shows how each value in the time series is correlated with its past values (lags). The spikes above the blue dashed line indicate statistically significant correlations. For example, the strong correlation at lag 1 suggests that the permittivity of one day is highly correlated with the temperature of the previous day. The slow decay of the ACF values over many lags (up to 30 or more) suggests that there is persistence or long-term correlation in the data, potentially indicating seasonality or a trend. This means that conditions (permittivity) on one day are related not just to the day before but to many days in the past.

Show code
pacf(daily_data$Permittivity)

The PACF plot provides a slightly different view. It shows that while the previous day (lag 1) has a significant direct influence on the current day’s permittivity, the contributions from earlier days (lag 2, 3, and beyond) are not as significant once the effect of lag 1 is accounted for shown by the rapidly decreasing spike at lag 2,3 etc.

The combinations of these plots suggest that permittivity of one day is largely correlated with the previous, but the day before that does not normally affect this, suggesting a relatively short memory.

Electrical Conductivity

Electrical conductivity (EC) is the ability of a substance to conduct electricity and can be used for infer the amount of charged molecules which are in a solution. Measuring the EC provides a good indicator of the salinity of the water and the soil - which is important at Wheatfen given it is influenced by tidal variability.

The above mean and standard deviation for conductivity is 660 μS/cm and 70 μS/cm, respectively which is within the range reported by the Environment Agency for streams and rivers in the UK.

Plotting timeseries

Show code
ggplot(data = data, aes(x= datetime, y=Conductivity))+
  geom_line(colour = "forestgreen")+
  labs(
    title = "Electrical Conductivity", 
    x = "Year",
    y = "Electrical Conductivity (μS/m)") +
  ggpubr::theme_pubr()

For the most part there isn’t a clear signal of seasonality with EC. The first few years of the monitoring period show some seasonal changes, but this is blurred more following 2022. In addition in February 2022 there is a sharp rise in EC to over 1 dS/m (1000 μS/cm).

Show code
ggplot() +
  geom_errorbar(data = mean_sd_month,
                aes(x = Month, ymin = Conductivity_mean - Conductivity_sd, ymax = Conductivity_mean + Conductivity_sd), 
                width = 0.2, color = "black") +
  geom_point(data = Monthly_means, aes(x = Month, y = Conductivity, color = as.factor(year)), size = 2) +
  theme(
    axis.text.x = element_text(size = 12, face = "bold"),
    axis.title.y = element_text(size = 12, face = "bold")) +
  labs(
    title = paste("Comparison between Mean Monthly Conductivity"),
    x = "Month",
    y = "Conductivity (μS/m)",
    color = "Year") +
  scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
  scale_y_continuous(limits = c(200, 1000), breaks = seq(200, 1000, 200)) +
  ggpubr::theme_pubr()

Looking at this plot it is clear that Febuary 2022 was anomalous given the large standard deviation. If this was removed then in general there would be higher EC during early autumn and the lowest values recorded in spring.

Similar to permittivity we can do the same acf and pacf plots to assess whether each day at Whetfen is affected by the previous.

Show code
acf(daily_data$Conductivity)

Show code
pacf(daily_data$Conductivity)

The results are very similar to permittivity with a strong seasonality in the acf plots, but the pacf plots revealing that only the day before has a significant influence on that direct day.

Wetland Temperature

Given the role of soil and water temperature on the productivity of a wetland it is important to measure it. Across the monitoring period, the mean temperature was 11.04 °C with a standard deviation of 4.6 °C.

Show code
ggplot(data = data, aes(x= datetime, y=Temperature))+
  geom_line(colour = "orange")+
  labs(
    title = "Water Temperature", 
    x = "Year",
    y = "Water Temperature (°C)") +
  ggpubr::theme_pubr()

As expected by temperature the seasonality is much more evident in comparison to the other parameters

Show code
ggplot() +
    geom_errorbar(data = mean_sd_month,
                  aes(x = Month, ymin = Temperature_mean - Temperature_sd, ymax = Temperature_mean + Temperature_sd), 
                  width = 0.2, color = "black") +
    geom_point(data = Monthly_means, aes(x = Month, y = Temperature, color = as.factor(year)), size = 2) +
    theme(
      axis.text.x = element_text(size = 12, face = "bold"),
      axis.title.y = element_text(size = 12, face = "bold")) +
    labs(
      title = paste("Comparison between Mean Monthly Temperatures"),
      x = "Month",
      y = "Temperature (°C)",
      color = "Year") +
    scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
    scale_y_continuous(limits = c(0, 20), breaks = seq(0, 20, 5)) +
    ggpubr::theme_pubr()

The highest temperatures are recorded in the wetland in July and August, and the lowest in January and February. It seems by this plot that the deviance of the data is larger in the winter and spring months. This may be due to the larger influx of storm serges during these months which can influence Wheatfen.

Show code
acf(daily_data$Temperature)

Show code
pacf(daily_data$Temperature)

Very similar to EC where there autocorrelation is high (acf plot), but then when looking at the pacf plot it confirms that one the day prior is having a statistically significant relationship on the following day.

PAR

The final parameter monitored in this document is PAR which stands for photosynthetically active radiation. This refers to the portion of the light spectrum (400 - 700 nm) which plants use for photosynthesis. Investigating the amount of this light available through time is important as it plays a central role in plant growth and health.

Show code
ggplot(data = data, aes(x= datetime, y=data$PAR))+
  geom_line(colour = "red")+
  labs(
    title = "PAR (Photosynthetically Active Radiation)", 
    x = "Year",
    y = "PAR (μmol/m²s)") +
  ggpubr::theme_pubr()

The timeseries of PAR shows a clear seasonal pattern reflecting the seasonal changes in solar insolation. This timeseries approach shows that when the days are shorter in the autumn and winter months, overall the wetland receives less PAR compared to the summer where it records > 1000 μmol/m²s. However, based on the summary figure below, it shows that it is not the summer months which records the highest, it is in fact spring.

Show code
ggplot() +
  geom_errorbar(data = mean_sd_month,
                aes(x = Month, ymin = PAR_mean - PAR_sd, ymax = PAR_mean + PAR_sd), 
                width = 0.2, color = "black") +
  geom_point(data = Monthly_means, aes(x = Month, y = PAR, color = as.factor(year)), size = 2) +
  theme(
    axis.text.x = element_text(size = 12, face = "bold"),
    axis.title.y = element_text(size = 12, face = "bold")) +
  labs(
    title = paste("Comparison between Mean Monthly PAR"),
    x = "Month",
    y = " PAR (μmol/m²s)",
    color = "Year") +
  scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
  scale_y_continuous(limits = c(0, 120), breaks = seq(0, 120, 20)) +
  ggpubr::theme_pubr()

This could potentially be due to the higher productivity and plant growth in the summer season which means there is less canopy cover compared to the summer. Other suggestions of why it could be like this:

  1. Clearer skies and less humidity - can check this with the meteorological data
  2. Better water quality in the spring months - during the summer the wetland may become more productive and therefore lead to more algae etc blocking the water surface

Whilst there is a clear seasonal signal recorded in the PAR data, it is still interesting to investigate the role of autocorrelation in this data.

Show code
acf(daily_data$PAR)

Show code
pacf(daily_data$PAR)

As similar to all of the others, there is autocorrelation present. However what is very interesting about this one is that the pacf plot shows that it is not just the day before which contributes to the PAR signal recorded. This suggests that even up to 10 days before there the PAR could still be responding to changes that far behind.

Dyke Conductivity

All of the above plots and analysis was conducted through a sensor inserted into the peat. However, further recordings about the conductivity was calculated on the Dyke Data.

Plotting timeseries

Show code
ggplot(data = Well_Ditch_In_cond, aes(x= datetime, y=CONDUCTIVITY))+
  geom_line(colour = "forestgreen")+
  labs(
    title = "Electrical Conductivity", 
    x = "Year",
    y = "Electrical Conductivity (μS/m)") +
  ggpubr::theme_pubr()

The temporal evolution of the conductivity in the water shows some differences to the conductivity recorded in the peat surface. Note that the period between July 2022 and May 2023 is missing. The range of values are similar to the conductivity in the peat with a significant spike recorded in Feb 2022.

Show code
ggplot() +
  geom_errorbar(data = mean_sd_month_Ditch,
                aes(x = Month, ymin = CONDUCTIVITY_mean - CONDUCTIVITY_sd, ymax = CONDUCTIVITY_mean + CONDUCTIVITY_sd), 
                width = 0.2, color = "black") +
  geom_point(data = Monthly_means_Ditch, aes(x = Month, y = CONDUCTIVITY, color = as.factor(year)), size = 2) +
  theme(
    axis.text.x = element_text(size = 12, face = "bold"),
    axis.title.y = element_text(size = 12, face = "bold")) +
  labs(
    title = paste("Comparison between Mean Monthly Conductivity"),
    x = "Month",
    y = "Conductivity (μS/m)",
    color = "Year") +
  scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
  scale_y_continuous(limits = c(0, 1000), breaks = seq(0, 1000, 200)) +
  ggpubr::theme_pubr()

The annual monthly means have a rather large SD range. This is because the conductivity of the lake water for 2021 was much lower than the mean. Note that 2022 has been removed for all months post Feb due to the missing data.

Despite 2021, the conductivity remains relatively stable around the mean with no other clear outliers.

Show code
acf(daily_data_Ditch$CONDUCTIVITY)

Show code
pacf(daily_data_Ditch$CONDUCTIVITY)

Very similar to the conductivity of the peat surface, autocorrelation is present, but it is just the previous day which influences the current.

Comparison between water and peat surface conductivity

Show code
Joined_data <-  daily_data %>%
  inner_join(daily_data_Ditch, by = "day")
Show code
cor.test(Joined_data$Conductivity, Joined_data$CONDUCTIVITY)

    Pearson's product-moment correlation

data:  Joined_data$Conductivity and Joined_data$CONDUCTIVITY
t = 9.1916, df = 1361, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1911155 0.2911192
sample estimates:
      cor 
0.2417592 

Despite being the same variable, there is not a good correlation between the conductivity from both the wetland water and the peat surface.

Show code
Monthly_means_Ditch <- Monthly_means_Ditch %>%
  rename(Conductivity = CONDUCTIVITY)

# Add 'Site' column to differentiate the two datasets
Monthly_means_Ditch$Site <- "Water"
Monthly_means$Site <- "Peat Surface"

# Combine the two datasets
combined_data <- bind_rows(Monthly_means_Ditch, Monthly_means)

# Plot the data with different shapes for each site
ggplot() +
  geom_point(data = combined_data, 
             aes(x = Month, y = Conductivity, color = as.factor(year), shape = Site), 
             size = 3) +
  scale_shape_manual(values = c("Water" = 16, "Peat Surface" = 4)) +  # 16 for circle, 4 for cross
  theme(
    axis.text.x = element_text(size = 12, face = "bold"),
    axis.title.y = element_text(size = 12, face = "bold")
  ) +
  labs(
    title = "Comparison between Mean Monthly Conductivity at Two Sites",
    x = "Month",
    y = "Conductivity (μS/m)",
    color = "Year",
    shape = "Site"
  ) +
  scale_x_continuous(limits = c(1, 12), breaks = seq(1, 12, 1)) +
  scale_y_continuous(limits = c(0, 1000), breaks = seq(0, 1000, 200)) +
  ggpubr::theme_pubr()

Here we can compare both of the conductivity for both the peat surface (crosses) and conductivity in the water (circles) for each years. For the most part the peat surface tends to have a higher conductivity but with the late spring to summer months there is a very close agreement between both sites.

From June 2021 to Feb 2022 conductivity in the water was rather low. This was not mirrored in the peat samples suggesting that either the probe was miss calculating the conductivity for this period, or something else was influencing the relationship.

Below we look further into the relationship between the conductivity at the two sites.

Show code
ccf(Joined_data$CONDUCTIVITY, Joined_data$Conductivity, na.action = na.omit, 
    main = "Cross-Correlation between Conductivity at Two Sites", lag = 15)

This is a cross correlation plot which conducts a correlation each day whilst moving one timeseries one day ahead + 30 days and behind 30 days in order to see where the best relationship is, and whether there is a delayed response at any site.

The results show that there isn’t much of a change each day as each of the correlations are about 0.2. There is a slightly higher correlation at negative 10 days meaning that the water conductivity changes first and then 10 days later there is a response in the peat. However, again, this is not very strong.

Show code
Joined_hourly <-  data %>%
  inner_join(Well_Ditch_In_cond, by = "datetime")


Hourly_means <- Joined_hourly %>%
  mutate(hour = floor_date(datetime, "hour")) %>%  # Rounds down to nearest hour
  group_by(hour) %>%
  summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE))) %>%
  ungroup()
Show code
ccf(Hourly_means$CONDUCTIVITY, Hourly_means$Conductivity, na.action = na.omit, 
    main = "Cross-Correlation between Conductivity at Two Sites each hour", lag = 720)

Now in this plot we are looking at hourly data as we want to see whether there is a quicker lag rather than whole days as in the plot above. This plot shows a window +/- 720 hours which is 30 days in total. +500 hours (20 ish days) peat changes first, but also at negative 200 hours (8 days) the water peaks first and then the peat conductivity.