Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • 628e0bb
  • /
  • glasshouse_dom.R
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge
swh:1:cnt:45efacf94b1b16e0b39c1e378d3ae096da321707
directory badge
swh:1:dir:628e0bb78ed29b0ddd35f8be6bd97119400d5190

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
(requires biblatex-software package)
Generating citation ...
(requires biblatex-software package)
Generating citation ...
glasshouse_dom.R
################################################################################
#### Project: Lowland plant migrations alpine soil C loss
#### Title:   Glasshouse pot data 
#### Author:  Tom Walker (thomas.walker@usys.ethz.ch)
#### Date:    29 November 2021
#### ---------------------------------------------------------------------------


#### PROLOGUE ------------------------------------------------------------------

## Options ----
# remove objects from global environment
rm(list = ls())
# R session options (no factors, bias against scientific #s)
options(
  stringsAsFactors = F,
  scipen = 6
)

## Libraries ----
# standard library set
library(nlme)
library(emmeans)
library(tidyverse)
# custom functions
source("./r_code/mm2in.R")

#### DATA ----------------------------------------------------------------------

## Load ----
soil <- drake::readd(gh_soil)

## Format ----
soilPools <- soil$pot_soil


#### FORMAT FOR PLOTS ----------------------------------------------------------

## Soil pools ----
sumSoil <- soilPools %>% 
  # recalculate Cmic in mg g
  mutate(k = k * 24) %>%
  mutate(p = p/1000) %>%
  # group by treatment, calculate means/se, ungroup
  group_by(treatment) %>%
  summarise(a350_mean = mean(DOM.a350, na.rm = T),
            a350_se = sd(DOM.a350, na.rm = T)/sqrt(n()),
            ftot_mean = mean(DOM.Ftot, na.rm = T),
            ftot_se = sd(DOM.Ftot, na.rm = T)/sqrt(n()),
            fi_mean = mean(DOM.FI, na.rm = T),
            fi_se = sd(DOM.FI, na.rm = T)/sqrt(n()),
            dom1_mean = mean(DOM.C1, na.rm = T),
            dom1_se = sd(DOM.C1, na.rm = T)/sqrt(n()),
            dom2_mean = mean(DOM.C2, na.rm = T),
            dom2_se = sd(DOM.C2, na.rm = T)/sqrt(n()),
            dom3_mean = mean(DOM.C3, na.rm = T),
            dom3_se = sd(DOM.C3, na.rm = T)/sqrt(n()),
            dom4_mean = mean(DOM.C4, na.rm = T),
            dom4_se = sd(DOM.C4, na.rm = T)/sqrt(n()),
            dom5_mean = mean(DOM.C5, na.rm = T),
            dom5_se = sd(DOM.C5, na.rm = T)/sqrt(n()),
            dom6_mean = mean(DOM.C6, na.rm = T),
            dom6_se = sd(DOM.C6, na.rm = T)/sqrt(n())) %>%
  ungroup

## get bare lines ----
allBare <- filter(sumSoil, treatment == "B")
sumSoil <- filter(sumSoil, treatment != "B")


#### SOIL BARE TREATMENT BOUNDS ------------------------------------------------

## Calculate ribbon for bare treatment on plots ----
soilPools %>%
  filter(treatment == "B") %>%
  dplyr::select(Cmic.ugC.g:b) %>%
  # calculate upper and lower bounds for all variables
  summarise(
    across(
      everything(), 
      function(x){
        # summary statistics
        mu <- mean(x, na.rm = T)
        n <- sum(!is.na(x))
        sdev <- sd(x, na.rm = T)
        se <- sdev/sqrt(n)
        # calculate upper and lower confidence intervals
        high <- mu + se
        low <- mu - se
        out <- c(high, low)
        return(out)
      }
    )
  )

## Remove bare treatment (only relevant as reference) ----
soilPools <- soilPools %>%
  filter(treatment != "B")


#### ANALYSE -------------------------------------------------------------------

## DOM a350 ----
# build model
m1 <- lme(
  DOM.a350 ~ treatment, 
  random = ~ 1 | block, 
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r1 <- residuals(m1, type = "normalized")
par(mfrow = c(1, 3))
plot(r1 ~ fitted(m1))
boxplot(r1 ~ soilPools$treatment)
hist(r1)
# test main effects
m1a <- update(m1, ~.- treatment)
anova(m1, m1a)

## DOM total fluorescence ----
# build model
m2 <- lme(
  DOM.Ftot ~ treatment, 
  random = ~ 1 | block, 
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r2 <- residuals(m2, type = "normalized")
par(mfrow = c(1, 3))
plot(r2 ~ fitted(m2))
boxplot(r2 ~ soilPools$treatment)
hist(r2)
# test main effects
m2a <- update(m2, ~.- treatment)
anova(m2, m2a)

## DOM fluorescence index ----
# build model
m3 <- lme(
  DOM.FI ~ treatment, 
  random = ~ 1 | block, 
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r3 <- residuals(m3, type = "normalized")
par(mfrow = c(1, 3))
plot(r3 ~ fitted(m3))
boxplot(r3 ~ soilPools$treatment)
hist(r3)
# test main effects
m3a <- update(m3, ~.- treatment)
anova(m3, m3a)

## DOM component 1 (named component #3 in MS) ----
# build model
m7 <- lme(
  DOM.C1 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r7 <- residuals(m7, type = "normalized")
par(mfrow = c(1, 3))
plot(r7 ~ fitted(m7))
boxplot(r7 ~ soilPools$treatment)
hist(r7)
# test main effects
m7a <- update(m7, ~.- treatment)
anova(m7, m7a)

## DOM component 2 (named component #4 in MS) ----
# build model
m8 <- lme(
  DOM.C2 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r8 <- residuals(m8, type = "normalized")
par(mfrow = c(1, 3))
plot(r8 ~ fitted(m8))
boxplot(r8 ~ soilPools$treatment)
hist(r8)
# test main effects
m8a <- update(m8, ~.- treatment)
anova(m8, m8a)

## DOM component 3 (named component #6 in MS) ----
# build model
m9 <- lme(
  DOM.C3 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r9 <- residuals(m9, type = "normalized")
par(mfrow = c(1, 3))
plot(r9 ~ fitted(m9))
boxplot(r9 ~ soilPools$treatment)
hist(r9)
# test main effects
m9a <- update(m9, ~.- treatment)
anova(m9, m9a)

## DOM component 4 (named component #1 in MS) ----
# build model
m10 <- lme(
  DOM.C4 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r10 <- residuals(m10, type = "normalized")
par(mfrow = c(1, 3))
plot(r10 ~ fitted(m10))
boxplot(r10 ~ soilPools$treatment)
hist(r10)
# test main effects
m10a <- update(m10, ~.- treatment)
anova(m10, m10a)

## DOM component 5 (named component #5 in MS) ----
# build model
m11 <- lme(
  DOM.C5 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r11 <- residuals(m11, type = "normalized")
par(mfrow = c(1, 3))
plot(r11 ~ fitted(m11))
boxplot(r11 ~ soilPools$treatment)
hist(r11)
# test main effects
m11a <- update(m11, ~.- treatment)
anova(m11, m11a)

## DOM component 6 (named component #2 in MS) ----
# build model
m12 <- lme(
  DOM.C6 ~ treatment, 
  random = ~ 1 | block, 
  weights = varIdent(form = ~ 1 | treatment),
  data = soilPools,
  na.action = "na.exclude",
  method = "ML"
)
# diagnose model
r12 <- residuals(m12, type = "normalized")
par(mfrow = c(1, 3))
plot(r12 ~ fitted(m12))
boxplot(r12 ~ soilPools$treatment)
hist(r12)
# test main effects
m12a <- update(m12, ~.- treatment)
anova(m12, m12a)


#### PLOT ----------------------------------------------------------------------

a350 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(20, 140)) +
  aes(x = treatment, 
      y = a350_mean, 
      ymax = a350_mean + a350_se, 
      ymin = a350_mean - a350_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$a350_mean - allBare$a350_se) +
  geom_hline(yintercept = allBare$a350_mean + allBare$a350_se) +
  xlab("") +
  ylab(expression(paste(a[350], " (", m^{-1}, ")", sep = "")))
ftot <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(5, 32)) +
  aes(x = treatment, 
      y = ftot_mean, 
      ymax = ftot_mean + ftot_se, 
      ymin = ftot_mean - ftot_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$ftot_mean - allBare$ftot_se) +
  geom_hline(yintercept = allBare$ftot_mean + allBare$ftot_se) +
  xlab("") +
  ylab(expression(paste(F[tot], " (R. U.)", sep = "")))
fi <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(1.55, 1.85)) +
  aes(x = treatment, 
      y = fi_mean, 
      ymax = fi_mean + fi_se, 
      ymin = fi_mean - fi_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$fi_mean - allBare$fi_se) +
  geom_hline(yintercept = allBare$fi_mean + allBare$fi_se) +
  xlab("") +
  ylab("Fluorescence Index")
dom1to3 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom1_mean, 
      ymax = dom1_mean + dom1_se, 
      ymin = dom1_mean - dom1_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom1_mean - allBare$dom1_se) +
  geom_hline(yintercept = allBare$dom1_mean + allBare$dom1_se) +
  xlab("") +
  ylab("C3 (humic-like, %)")
dom2to4 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom2_mean, 
      ymax = dom2_mean + dom2_se, 
      ymin = dom2_mean - dom2_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom2_mean - allBare$dom2_se) +
  geom_hline(yintercept = allBare$dom2_mean + allBare$dom2_se) +
  xlab("") +
  ylab("C4 (humic-like, %)")
dom3to6 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom3_mean, 
      ymax = dom3_mean + dom3_se, 
      ymin = dom3_mean - dom3_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom3_mean - allBare$dom3_se) +
  geom_hline(yintercept = allBare$dom3_mean + allBare$dom3_se) +
  xlab("") +
  ylab("C6 (fumic acid-like, %)")
dom4to1 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom4_mean, 
      ymax = dom4_mean + dom4_se, 
      ymin = dom4_mean - dom4_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom4_mean - allBare$dom4_se) +
  geom_hline(yintercept = allBare$dom4_mean + allBare$dom4_se) +
  xlab("") +
  ylab("C1 (protein-like, %)")
dom5to5 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom5_mean, 
      ymax = dom5_mean + dom5_se, 
      ymin = dom5_mean - dom5_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom5_mean - allBare$dom5_se) +
  geom_hline(yintercept = allBare$dom5_mean + allBare$dom5_se) +
  xlab("") +
  ylab("C5 (humic-like, %)")
dom6to2 <- ggplot(sumSoil) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  coord_cartesian(ylim = c(2, 45)) +
  aes(x = treatment, 
      y = dom6_mean, 
      ymax = dom6_mean + dom6_se, 
      ymin = dom6_mean - dom6_se) +
  geom_errorbar(width = 0.2) +
  geom_bar(stat = "identity", col = "black", fill = "white") +
  geom_hline(yintercept = allBare$dom6_mean - allBare$dom6_se) +
  geom_hline(yintercept = allBare$dom6_mean + allBare$dom6_se) +
  xlab("") +
  ylab("C2 (protein-like, %)")


#### BUILD PANEL ---------------------------------------------------------------

postscript(
    file = "./figure_builds/glasshouse_dom.eps",
    width = mm2in(150),
    height = mm2in(120)
)
cowplot::plot_grid(
  a350, ftot, fi, 
  dom4to1, dom6to2, dom1to3, 
  dom2to4, dom5to5, dom3to6, dom3to6,
  nrow = 2, 
  align = "hv"
)
dev.off()

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API