Overview

Three models Effect of local (pH, Olsen P and Age) and management practice (Number of species that were sown) on:

  1. The total observed vegetation characteristic

  2. The sown (observed and sown) vegetation characteristic

  3. The sown (observed and sown) vegetation characteristic relative to the total observed vegetation

Overview data

Model Unit Variable Data type
Total number of species count n_obs counted
Number of sown species count n_sown counted
Relative number of sown species count n_sown counted
——— —— ———- ——
Total cover % cover_obs continuous ≥ 0
Cover of sown species % cover_sown continuous ≥ 0
Relative cover of sown species % cover_sown continuous ≥ 0
——— —— ———- ——
Total nectar g sugar/m²/year nectar_obs continuous ≥ 0
Nectar of sown species g sugar/m²/year nectar_sown continuous ≥ 0
Relative nectar of sown species g sugar/m²/year nectar_sown continuous ≥ 0
——— —— ———- ——
Total grass cover % grass_obs continuous ≥ 0
Sown grass cover % grass_sown continuous ≥ 0
Relative grass cover % grass_sown continuous ≥ 0
——— —— ———- ——
Total CWM Competitive % C_weighted_observed continuous (0–100)
Sown CWM Competitive % C_weighted_sown continuous (0–100)
Relative CWM Competitive % C_weighted_sown continuous (0–100)
Total CWM Stress-tolerant % S_weighted_observed continuous (0–100)
Sown CWM Stress-tolerant % S_weighted_sown continuous (0–100)
Relative CWM Stress-tolerant % S_weighted_sown continuous (0–100)
Total CWM Ruderal % R_weighted_observed continuous (0–100)
Sown CWM Ruderal % R_weighted_sown continuous (0–100)
Relative CWM Ruderal % R_weighted_sown continuous (0–100)
——— —— ———- ——
Total CWM Ellenberg N Ell_N_weighted_obs continuous ≥ 0
Sown CWM Ellenberg N Ell_N_weighted_sown continuous ≥ 0
Relative CWM Ellenberg N Ell_N_weighted_sown continuous ≥ 0
Total CWM Ellenberg R Ell_R_weighted_obs continuous ≥ 0
Sown CWM Ellenberg R Ell_R_weighted_sown continuous ≥ 0
Relative CWM Ellenberg R Ell_R_weighted_sown continuous ≥ 0
Total CWM Ellenberg M Ell_M_weighted_obs continuous ≥ 0
Sown CWM Ellenberg M Ell_M_weighted_sown continuous ≥ 0
Relative CWM Ellenberg M Ell_M_weighted_sown continuous ≥ 0
Total CWM Ellenberg T Ell_T_weighted_obs continuous ≥ 0
Sown CWM Ellenberg T Ell_T_weighted_sown continuous ≥ 0
Relative CWM Ellenberg T Ell_T_weighted_sown continuous ≥ 0

Concrete vragen

  1. Wat vinden jullie van de voorgestelde modellen

  2. Lijkt het gebruik van een offset in het model om de relatieve contributie van de ingezaaide soorten te bekijken jullie ok? Proportionele data is niet evident om in een model te gebruiken

  3. Resiudelen zijn niet altijd normaal verdeeld, ik weet niet zo goed welke transformaties ik hier het best moet uitvoeren.

En uiteraard, zeer open voor alle algemen feedback! :)

Hieronder vinden jullie telkens de modellen en de “check for residuals and outliers”

Dit gaat echt puur over de aanpak/modellen - daarom heb ik de output van modellen er nog niet bijgezet :).

Number of species

Check for overdisperion

Number of observed species observed + Number of sown species

## Counted data >> overdispersion?
m_pois_obs <- glm(n_obs ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022), family = poisson, df)
m_pois_sown <- glm(n_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022), family = poisson, df)

disp_obs <- sum(residuals(m_pois_obs, type = "pearson")^2) /df.residual(m_pois_obs)
disp_sown <- sum(residuals(m_pois_sown, type = "pearson")^2) /df.residual(m_pois_sown)

disp_obs
## [1] 1.305257
disp_sown
## [1] 2.503273

Model proposition

Overdisperion so Negative Binomial models

m_obs <- glmmTMB(n_obs ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022), family = nbinom2, df)
m_sown <- glmmTMB(n_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022), family = nbinom2, df)
m_sown_prop <- glmmTMB(n_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022) 
                       + offset(log(n_obs)), family = nbinom2, df)

Total cover

Model proposition

m_cover_obs <- glm(
  cover_obs ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_cover_sown <- glm(
  cover_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),data = df)

m_cover_sown_prop <- glm(
  cover_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(cover_obs)), family = gaussian(),data = df)

Check for normality of residuals

# Observed
res_obs <- simulateResiduals(fittedModel = m_cover_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_cover_sown, n = 200)
plot(res_sown)

# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_cover_sown_prop, n = 200)
plot(res_sown_prop)

Grass cover

Model proposition

m_grass_obs <- glm(
  grass_cover_obs ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_grass_sown <- glm(
  grass_cover_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_grass_sown_prop <- glm(
  grass_cover_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(grass_cover_obs)), family = gaussian(),data = df)

Check for normality of residuals

Probleem zit hem hier in heel veel nullen denk ik >> 17 nul waardes voor “sown”

“zero inflation test” - p < 0.05

# Observed
res_obs <- simulateResiduals(fittedModel = m_grass_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_grass_sown, n = 200)
plot(res_sown)
## Warning in newton(lsp = lsp, X = G$X, y = G$y, Eb = G$Eb, UrS = G$UrS, L = G$L,
## : Fitting terminated with step failure - check results carefully

testZeroInflation(res_sown)

## 
##  DHARMa zero-inflation test via comparison to expected zeros with
##  simulation under H0 = fitted model
## 
## data:  simulationOutput
## ratioObsSim = Inf, p-value < 2.2e-16
## alternative hypothesis: two.sided
# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_grass_sown_prop, n = 200)
plot(res_sown_prop)

testZeroInflation(res_sown)

## 
##  DHARMa zero-inflation test via comparison to expected zeros with
##  simulation under H0 = fitted model
## 
## data:  simulationOutput
## ratioObsSim = Inf, p-value < 2.2e-16
## alternative hypothesis: two.sided

Potential Nectar Value

Model proposition

m_nectar_obs <- glm(
  nectar_obs ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_nectar_sown <- glm(
  nectar_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_nectar_sown_prop <- glm(
  nectar_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(nectar_obs)), family = gaussian(),data = df)

Check for normality of residuals

# Observed
res_obs <- simulateResiduals(fittedModel = m_nectar_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_nectar_sown, n = 200)
plot(res_sown)

# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_nectar_sown_prop, n = 200)
plot(res_sown_prop)

CSR

Competitive

Model proposition

m_CSRC_obs <- glm(
  C_weighted_observed ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRC_sown <- glm(
  C_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRC_sown_prop <- glm(
  C_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(C_weighted_observed)), family = gaussian(),data = df)

Check for normality of residuals

# Observed
res_obs <- simulateResiduals(fittedModel = m_CSRC_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_CSRC_sown, n = 200)
plot(res_sown)
## Warning in newton(lsp = lsp, X = G$X, y = G$y, Eb = G$Eb, UrS = G$UrS, L = G$L,
## : Fitting terminated with step failure - check results carefully

# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_CSRC_sown_prop, n = 200)
plot(res_sown_prop)

Stress tolerant

Model proposition

m_CSRS_obs <- glm(
  S_weighted_observed ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRS_sown <- glm(
  S_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRS_sown_prop <- glm(
  S_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(S_weighted_observed)), family = gaussian(),data = df)

Check for normality of residuals

# Observed
res_obs <- simulateResiduals(fittedModel = m_CSRS_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_CSRS_sown, n = 200)
plot(res_sown)
## qu = 0.75, log(sigma) = -2.85182 : outer Newton did not converge fully.
## qu = 0.75, log(sigma) = -2.834878 : outer Newton did not converge fully.
## Warning in newton(lsp = lsp, X = G$X, y = G$y, Eb = G$Eb, UrS = G$UrS, L = G$L,
## : Fitting terminated with step failure - check results carefully

# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_CSRS_sown_prop, n = 200)
plot(res_sown_prop)
## qu = 0.25, log(sigma) = -4.047707 : outer Newton did not converge fully.
## qu = 0.5, log(sigma) = -3.040892 : outer Newton did not converge fully.

Ruderal

Model proposition

m_CSRR_obs <- glm(
  R_weighted_observed ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRR_sown <- glm(
  R_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022),
  family = gaussian(),  data = df)

m_CSRR_sown_prop <- glm(
  R_weighted_sown ~ scale(sown_mixt) + scale(age) + scale(olsenp_2022) + scale(ph_2022)
  + offset(log(R_weighted_observed)), family = gaussian(),data = df)

Check for normality of residuals

# Observed
res_obs <- simulateResiduals(fittedModel = m_CSRR_obs, n = 200)
plot(res_obs)

# Sown
res_sown <- simulateResiduals(fittedModel = m_CSRR_sown, n = 200)
plot(res_sown)

# Sown relative
res_sown_prop <- simulateResiduals(fittedModel = m_CSRR_sown_prop, n = 200)
plot(res_sown_prop)