Three models Effect of local (pH, Olsen P and Age) and management practice (Number of species that were sown) on:
The total observed vegetation characteristic
The sown (observed and sown) vegetation characteristic
The sown (observed and sown) vegetation characteristic relative to the total observed vegetation
| 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 |
Wat vinden jullie van de voorgestelde modellen
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
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 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
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)
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)
# 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)
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)
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
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)
# 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)
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)
# 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)
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)
# 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.
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)
# 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)