Statistical models

Taxonomic diversity

Number of species

No linear model > richness is count data.

Checked for overdispersion

  • Pearson ratio = 1.13 - no meaningful overdispersion

  • p = 0.26 - not significant, model is not overdispersed

Using Poisson Generalized Linear Mixed Model (GLMM)

model_SR1_pois <- glmmTMB(
richness ~ age + olsenp_2022 + ph_2022 + n_sown_design,
data = df_model_scaled,
family = poisson
)

check_collinearity(model_SR1_pois)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##           Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##            age 1.38 [1.12,  2.15]     1.17      0.73     [0.46, 0.89]
##    olsenp_2022 1.46 [1.17,  2.25]     1.21      0.69     [0.44, 0.86]
##        ph_2022 1.26 [1.06,  2.06]     1.12      0.79     [0.49, 0.94]
##  n_sown_design 1.04 [1.00, 33.82]     1.02      0.96     [0.03, 1.00]
summary(model_SR1_pois)
##  Family: poisson  ( log )
## Formula:          richness ~ age + olsenp_2022 + ph_2022 + n_sown_design
## Data: df_model_scaled
## 
##       AIC       BIC    logLik -2*log(L)  df.resid 
##     305.8     315.2    -147.9     295.8        43 
## 
## 
## Conditional model:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    3.147062   0.029994  104.92   <2e-16 ***
## age           -0.069622   0.036335   -1.92   0.0554 .  
## olsenp_2022    0.003216   0.036583    0.09   0.9300    
## ph_2022        0.054172   0.035088    1.54   0.1226    
## n_sown_design  0.005127   0.031316    0.16   0.8700    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(allEffects(model_SR1_pois))

Shannon Diversity

model_SD1 <- lm(shannon ~ age + olsenp_2022 + ph_2022 + n_sown, data = df_model_scaled)

check_collinearity(model_SD1)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_SD1)
## 
## Call:
## lm(formula = shannon ~ age + olsenp_2022 + ph_2022 + n_sown, 
##     data = df_model_scaled)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.67784 -0.25047  0.02062  0.24941  0.74659 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.16608    0.05066  42.758   <2e-16 ***
## age          0.01277    0.06033   0.212    0.833    
## olsenp_2022  0.09865    0.06185   1.595    0.118    
## ph_2022      0.02779    0.05740   0.484    0.631    
## n_sown       0.02924    0.05187   0.564    0.576    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.351 on 43 degrees of freedom
## Multiple R-squared:  0.07865,    Adjusted R-squared:  -0.007058 
## F-statistic: 0.9176 on 4 and 43 DF,  p-value: 0.4624
plot(allEffects(model_SD1))

Functional diversity

CSR

## Competitive species ----
model_C1 <- lm(C_score ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_C1)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_C1)
## 
## Call:
## lm(formula = C_score ~ age + olsenp_2022 + ph_2022 + n_sown, 
##     data = df_model_scaled)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -14.5111  -4.8698  -0.5635   4.8947  19.1250 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  25.1754     1.0665  23.606   <2e-16 ***
## age           0.7245     1.2701   0.570    0.571    
## olsenp_2022   1.6099     1.3021   1.236    0.223    
## ph_2022       1.5832     1.2085   1.310    0.197    
## n_sown        1.3833     1.0920   1.267    0.212    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.389 on 43 degrees of freedom
## Multiple R-squared:  0.09672,    Adjusted R-squared:  0.0127 
## F-statistic: 1.151 on 4 and 43 DF,  p-value: 0.3457
plot(allEffects(model_C1))

## Stress tolerant species ----
model_S1 <- lm(S_score ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_S1)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_S1)
## 
## Call:
## lm(formula = S_score ~ age + olsenp_2022 + ph_2022 + n_sown, 
##     data = df_model_scaled)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -18.0355  -4.4508  -0.4823   5.2417  23.9121 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  22.7877     1.4161  16.092   <2e-16 ***
## age           4.5788     1.6865   2.715   0.0095 ** 
## olsenp_2022  -0.1995     1.7290  -0.115   0.9087    
## ph_2022       1.8871     1.6046   1.176   0.2461    
## n_sown        0.3689     1.4499   0.254   0.8004    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.811 on 43 degrees of freedom
## Multiple R-squared:  0.1984, Adjusted R-squared:  0.1238 
## F-statistic: 2.661 on 4 and 43 DF,  p-value: 0.04534
plot(allEffects(model_S1))

## Ruderal species ----
model_R1 <- lm(R_score ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_R1)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_R1)
## 
## Call:
## lm(formula = R_score ~ age + olsenp_2022 + ph_2022 + n_sown, 
##     data = df_model_scaled)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -30.762  -5.781   1.299   5.786  22.240 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  41.5749     1.5478  26.860   <2e-16 ***
## age          -3.5170     1.8434  -1.908   0.0631 .  
## olsenp_2022  -0.5665     1.8898  -0.300   0.7658    
## ph_2022      -0.3173     1.7539  -0.181   0.8573    
## n_sown        1.0179     1.5848   0.642   0.5241    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.72 on 43 degrees of freedom
## Multiple R-squared:  0.1029, Adjusted R-squared:  0.01949 
## F-statistic: 1.234 on 4 and 43 DF,  p-value: 0.3109
plot(allEffects(model_R1))

Grassification

model_grass <- lm(graminoid_cover ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_grass)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_grass)
## 
## Call:
## lm(formula = graminoid_cover ~ age + olsenp_2022 + ph_2022 + 
##     n_sown, data = df_model_scaled)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -47.653 -23.346  -8.419  25.489  76.969 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  50.2813     4.8668  10.331 3.18e-13 ***
## age          -0.3903     5.7961  -0.067    0.947    
## olsenp_2022   2.4806     5.9423   0.417    0.678    
## ph_2022     -10.2492     5.5148  -1.858    0.070 .  
## n_sown       -0.6305     4.9832  -0.127    0.900    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 33.72 on 43 degrees of freedom
## Multiple R-squared:  0.1073, Adjusted R-squared:  0.02423 
## F-statistic: 1.292 on 4 and 43 DF,  p-value: 0.2883
plot(allEffects(model_grass))

Pollinator value

model_pol <- lm(total_nectar ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_pol)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_pol)
## 
## Call:
## lm(formula = total_nectar ~ age + olsenp_2022 + ph_2022 + n_sown, 
##     data = df_model_scaled)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -11.591  -5.377  -1.439   4.349  16.557 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 16.49292    1.06363  15.506   <2e-16 ***
## age          0.43700    1.26671   0.345   0.7318    
## olsenp_2022  0.02839    1.29865   0.022   0.9827    
## ph_2022      2.22119    1.20525   1.843   0.0722 .  
## n_sown       1.96577    1.08905   1.805   0.0781 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.369 on 43 degrees of freedom
## Multiple R-squared:  0.1514, Adjusted R-squared:  0.07248 
## F-statistic: 1.918 on 4 and 43 DF,  p-value: 0.1247
plot(allEffects(model_pol))

Sowing success

model_sownsucc <- lm(prop_sown_observed ~ age + olsenp_2022 + ph_2022 + n_sown,data = df_model_scaled)

check_collinearity(model_sownsucc)
## # Check for Multicollinearity
## 
## Low Correlation
## 
##         Term  VIF     VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##          age 1.39 [1.13,   2.17]     1.18      0.72     [0.46, 0.89]
##  olsenp_2022 1.46 [1.17,   2.25]     1.21      0.69     [0.44, 0.86]
##      ph_2022 1.26 [1.06,   2.06]     1.12      0.80     [0.49, 0.94]
##       n_sown 1.03 [1.00, 367.50]     1.01      0.97     [0.00, 1.00]
summary(model_sownsucc)
## 
## Call:
## lm(formula = prop_sown_observed ~ age + olsenp_2022 + ph_2022 + 
##     n_sown, data = df_model_scaled)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.184129 -0.074000 -0.000525  0.068358  0.291178 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.154373   0.015818   9.759  1.8e-12 ***
## age         -0.018838   0.018838  -1.000    0.323    
## olsenp_2022 -0.010537   0.019313  -0.546    0.588    
## ph_2022      0.032938   0.017924   1.838    0.073 .  
## n_sown      -0.006071   0.016196  -0.375    0.710    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1096 on 43 degrees of freedom
## Multiple R-squared:  0.1441, Adjusted R-squared:  0.06445 
## F-statistic:  1.81 on 4 and 43 DF,  p-value: 0.1445
plot(allEffects(model_sownsucc))