packages

library(tidyverse)
library(ggpubr)
library(sandwich)
library(rcompanion)

Deviance

y<-c(3,6,4,7)
mean(y)
[1] 5
plot(y , pch=20,col=2, cex= 3)
points(c(3:4), y[c(3,4)] , 
       pch=20,col= 4, cex= 3) 
abline(h= mean(y), col=3, lty="dashed")
abline( h= mean(c(3,6)), col=2)  # block 1
abline( h= mean(c(4,7)), col=4)   # block 2

Observed Vrs. Expected (null nodel)

TOTAL DEVIANCE (Crawley 2005)

null model [Ha: μ1 = μ2]
2*(3*log(3/5)+6*log(6/5)+
     4*log(4/5)+7*log(7/5))
[1] 2.048368
#plot
plot(y , pch=20,col=2, cex= 3)
points(c(3:4), y[c(3,4)] , 
       pch=20,col= 4, cex= 3) 
abline(h= mean(y), col=3, lty="dashed")
segments(x0= c(1:4), y0= y, x= c(1:4), y=rep(mean(y),4)) 

Residual Deviance

2*(3*log(3/4.5)+6*log(6/4.5)+
     4*log(4/5.5)+7*log(7/5.5))
[1] 1.848033
#plot
plot(y , pch=20,col=2, cex= 3)
points(c(3:4), y[c(3,4)] , 
       pch=20,col= 4, cex= 3) 
abline(h= mean(y), col=3, lty="dashed")
abline( h= mean(c(3,6)), col=2)  # block 1
abline( h= mean(c(4,7)), col=4)   # block 2
segments(x0= c(1:4), y0= y, x= c(1:4), y=c(4.5,4.5,5.5,5.5)) 

GLM
glm <- glm(y ~ location, family= poisson)
coef(glm)
(Intercept)   locationB 
  1.5040774   0.2006707 
exp(coef(glm)[1])   # Expected value for residual Deviance for location "A"
(Intercept) 
        4.5 
exp(coef(glm)[1] + coef(glm)[2])   # Expected value for resid.Dev for location "B"
(Intercept) 
        5.5 
glm$deviance        # Residual Deviance
[1] 1.848033
glm$null.deviance   # Null Deviance
[1] 2.048368
library(ggplot2)
ggplot(data=dev, aes(x= location, y= y , col= location)) +
  geom_point(size= 4) +
  geom_hline(yintercept = mean(dev$y), col="dark green", linetype="dashed") +
  geom_curve(x= dev$location[1] ,y=4.5, xend= dev$location[3], yend= 5.5, 
             curvature = 0.18,
             linewidth=1.3,
             col= "dark gray" , linetype="dashed") +
  geom_errorbar(aes(ymin=c(3,3,4,4), ymax= c(6,6,7,7)), width= 0.2)


EXAMPLE

“slugsurvey.txt”

read.table("Crawley/slugsurvey.txt", header=TRUE, stringsAsFactors=TRUE) -> slug
names(slug)
[1] "slugs" "field"
head(slug)
tail(slug)
ggdensity(slug$slugs)

glm “slugsurvey.txt”

glm.slug <- glm(slug$slugs~ slug$field, family = quasipoisson)
summary(glm.slug)

Call:
glm(formula = slug$slugs ~ slug$field, family = quasipoisson)

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)  
(Intercept)         0.2429     0.2494   0.974   0.3331  
slug$fieldRookery   0.5790     0.3116   1.858   0.0669 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for quasipoisson family taken to be 3.17311)

    Null deviance: 224.86  on 79  degrees of freedom
Residual deviance: 213.44  on 78  degrees of freedom
AIC: NA

Number of Fisher Scoring iterations: 6

ggplot SLUGS

ggplot(data= slug, aes(x= field, y= slugs, col= field)) + 
  geom_boxplot() +
  geom_point(position = position_dodge2(width = 0.3)) +
  geom_smooth(method = "glm", method.args = list(family = 'poisson')) +
  geom_curve(x= slug$field[1] ,y= exp(coef(glm.slug)[1]), xend=slug$field[41], yend= exp(coef(glm.slug)[1]+coef(glm.slug)[2]),
             curvature = 0.07, col="dark gray", size= 1.2)

AOV approach (General linear model)

library(car)
shapiro.test(slug$slugs)

    Shapiro-Wilk normality test

data:  slug$slugs
W = 0.77782, p-value = 1.187e-09
leveneTest(slugs~ field, data= slug)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  1  0.6427 0.4252
      78               
aov.slug <- aov(slugs~ field, data= slug)
summary(aov.slug)
            Df Sum Sq Mean Sq F value Pr(>F)  
field        1     20  20.000     3.9 0.0518 .
Residuals   78    400   5.128                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

LS0tDQp0aXRsZTogIkRldmlhbmNlIENvbmNlcHQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoqKipwYWNrYWdlcyoqKg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkoc2FuZHdpY2gpDQpsaWJyYXJ5KHJjb21wYW5pb24pDQpgYGANCg0KIyMjIERldmlhbmNlDQoNCmBgYHtyfQ0KeTwtYygzLDYsNCw3KQ0KbWVhbih5KQ0KcGxvdCh5ICwgcGNoPTIwLGNvbD0yLCBjZXg9IDMpDQpwb2ludHMoYygzOjQpLCB5W2MoMyw0KV0gLCANCiAgICAgICBwY2g9MjAsY29sPSA0LCBjZXg9IDMpIA0KYWJsaW5lKGg9IG1lYW4oeSksIGNvbD0zLCBsdHk9ImRhc2hlZCIpDQphYmxpbmUoIGg9IG1lYW4oYygzLDYpKSwgY29sPTIpICAjIGJsb2NrIDENCmFibGluZSggaD0gbWVhbihjKDQsNykpLCBjb2w9NCkgICAjIGJsb2NrIDINCmBgYA0KDQojIyMjIE9ic2VydmVkIFZycy4gRXhwZWN0ZWQgKG51bGwgbm9kZWwpDQoNCiMjIyMgVE9UQUwgREVWSUFOQ0UgKENyYXdsZXkgMjAwNSkNCg0KIyMjIyMgbnVsbCBtb2RlbCBbKioqSGEqKio6IM68fjF+ID0gzrx+Mn5dDQoNCmBgYHtyfQ0KMiooMypsb2coMy81KSs2KmxvZyg2LzUpKw0KICAgICA0KmxvZyg0LzUpKzcqbG9nKDcvNSkpDQojcGxvdA0KcGxvdCh5ICwgcGNoPTIwLGNvbD0yLCBjZXg9IDMpDQpwb2ludHMoYygzOjQpLCB5W2MoMyw0KV0gLCANCiAgICAgICBwY2g9MjAsY29sPSA0LCBjZXg9IDMpIA0KYWJsaW5lKGg9IG1lYW4oeSksIGNvbD0zLCBsdHk9ImRhc2hlZCIpDQpzZWdtZW50cyh4MD0gYygxOjQpLCB5MD0geSwgeD0gYygxOjQpLCB5PXJlcChtZWFuKHkpLDQpKSANCg0KYGBgDQoNCiMjIyMgUmVzaWR1YWwgRGV2aWFuY2UNCg0KYGBge3J9DQoyKigzKmxvZygzLzQuNSkrNipsb2coNi80LjUpKw0KICAgICA0KmxvZyg0LzUuNSkrNypsb2coNy81LjUpKQ0KI3Bsb3QNCnBsb3QoeSAsIHBjaD0yMCxjb2w9MiwgY2V4PSAzKQ0KcG9pbnRzKGMoMzo0KSwgeVtjKDMsNCldICwgDQogICAgICAgcGNoPTIwLGNvbD0gNCwgY2V4PSAzKSANCmFibGluZShoPSBtZWFuKHkpLCBjb2w9MywgbHR5PSJkYXNoZWQiKQ0KYWJsaW5lKCBoPSBtZWFuKGMoMyw2KSksIGNvbD0yKSAgIyBibG9jayAxDQphYmxpbmUoIGg9IG1lYW4oYyg0LDcpKSwgY29sPTQpICAgIyBibG9jayAyDQpzZWdtZW50cyh4MD0gYygxOjQpLCB5MD0geSwgeD0gYygxOjQpLCB5PWMoNC41LDQuNSw1LjUsNS41KSkgDQpgYGANCg0KIyMjIyMgR0xNDQoNCmBgYHtyIGVjaG89RkFMU0V9DQp5PC1jKDMsNiw0LDcpDQpsb2NhdGlvbjwtIGMoIkEiLCJBIiwiQiIsIkIiKQ0KZGV2IDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoeT0geSAsIGxvY2F0aW9uID1sb2NhdGlvbikpDQpkZXYkeSA8LSBhcy5udW1lcmljKGRldiR5KQ0KZGV2JGxvY2F0aW9uPC0gYXMuZmFjdG9yKGRldiRsb2NhdGlvbikNCmRldg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHM9RkFMU0V9DQpkZXYkeWhhdCA8LSBjKDQuNSw0LjUsIDUuNSw1LjUpDQpkZXYNCmBgYA0KDQpgYGB7cn0NCmdsbSA8LSBnbG0oeSB+IGxvY2F0aW9uLCBmYW1pbHk9IHBvaXNzb24pDQpjb2VmKGdsbSkNCmV4cChjb2VmKGdsbSlbMV0pICAgIyBFeHBlY3RlZCB2YWx1ZSBmb3IgcmVzaWR1YWwgRGV2aWFuY2UgZm9yIGxvY2F0aW9uICJBIg0KZXhwKGNvZWYoZ2xtKVsxXSArIGNvZWYoZ2xtKVsyXSkgICAjIEV4cGVjdGVkIHZhbHVlIGZvciByZXNpZC5EZXYgZm9yIGxvY2F0aW9uICJCIg0KZ2xtJGRldmlhbmNlICAgICAgICAjIFJlc2lkdWFsIERldmlhbmNlDQpnbG0kbnVsbC5kZXZpYW5jZSAgICMgTnVsbCBEZXZpYW5jZQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGF0YT1kZXYsIGFlcyh4PSBsb2NhdGlvbiwgeT0geSAsIGNvbD0gbG9jYXRpb24pKSArDQogIGdlb21fcG9pbnQoc2l6ZT0gNCkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtZWFuKGRldiR5KSwgY29sPSJkYXJrIGdyZWVuIiwgbGluZXR5cGU9ImRhc2hlZCIpICsNCiAgZ2VvbV9jdXJ2ZSh4PSBkZXYkbG9jYXRpb25bMV0gLHk9NC41LCB4ZW5kPSBkZXYkbG9jYXRpb25bM10sIHllbmQ9IDUuNSwgDQogICAgICAgICAgICAgY3VydmF0dXJlID0gMC4xOCwNCiAgICAgICAgICAgICBsaW5ld2lkdGg9MS4zLA0KICAgICAgICAgICAgIGNvbD0gImRhcmsgZ3JheSIgLCBsaW5ldHlwZT0iZGFzaGVkIikgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWMoMywzLDQsNCksIHltYXg9IGMoNiw2LDcsNykpLCB3aWR0aD0gMC4yKQ0KYGBgDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyMgRVhBTVBMRQ0KDQojIyMjICJzbHVnc3VydmV5LnR4dCINCg0KYGBge3J9DQpyZWFkLnRhYmxlKCJDcmF3bGV5L3NsdWdzdXJ2ZXkudHh0IiwgaGVhZGVyPVRSVUUsIHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkgLT4gc2x1Zw0KbmFtZXMoc2x1ZykNCmhlYWQoc2x1ZykNCnRhaWwoc2x1ZykNCmdnZGVuc2l0eShzbHVnJHNsdWdzKQ0KYGBgDQoNCiMjIyMgZ2xtICJzbHVnc3VydmV5LnR4dCINCg0KYGBge3J9DQpnbG0uc2x1ZyA8LSBnbG0oc2x1ZyRzbHVnc34gc2x1ZyRmaWVsZCwgZmFtaWx5ID0gcXVhc2lwb2lzc29uKQ0Kc3VtbWFyeShnbG0uc2x1ZykNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPUZBTFNFfQ0KbW9kMSA8LSBnbG0oc2x1ZyRzbHVnc34gc2x1ZyRmaWVsZCwgZmFtaWx5ID0gcXVhc2lwb2lzc29uKQ0KbW9kMiA8LSB1cGRhdGUobW9kMSx+Li1zbHVnJGZpZWxkKQ0KYW5vdmEobW9kMSwgbW9kMiwgdGVzdD0iRiIpDQpgYGANCg0KIyMjIyBnZ3Bsb3QgU0xVR1MNCg0KYGBge3IgbWVzc2FnZT1GQUxTRX0NCmdncGxvdChkYXRhPSBzbHVnLCBhZXMoeD0gZmllbGQsIHk9IHNsdWdzLCBjb2w9IGZpZWxkKSkgKyANCiAgZ2VvbV9ib3hwbG90KCkgKw0KICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC4zKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICdwb2lzc29uJykpICsNCiAgZ2VvbV9jdXJ2ZSh4PSBzbHVnJGZpZWxkWzFdICx5PSBleHAoY29lZihnbG0uc2x1ZylbMV0pLCB4ZW5kPXNsdWckZmllbGRbNDFdLCB5ZW5kPSBleHAoY29lZihnbG0uc2x1ZylbMV0rY29lZihnbG0uc2x1ZylbMl0pLA0KICAgICAgICAgICAgIGN1cnZhdHVyZSA9IDAuMDcsIGNvbD0iZGFyayBncmF5Iiwgc2l6ZT0gMS4yKQ0KYGBgDQoNCiMjIyMgQU9WIGFwcHJvYWNoIChHZW5lcmFsIGxpbmVhciBtb2RlbCkNCg0KYGBge3IgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoY2FyKQ0Kc2hhcGlyby50ZXN0KHNsdWckc2x1Z3MpDQpsZXZlbmVUZXN0KHNsdWdzfiBmaWVsZCwgZGF0YT0gc2x1ZykNCmFvdi5zbHVnIDwtIGFvdihzbHVnc34gZmllbGQsIGRhdGE9IHNsdWcpDQpzdW1tYXJ5KGFvdi5zbHVnKQ0KYGBgDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpgYGB7ciBldmFsPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgZWogY29uICJjbHVzdGVycy50eHQiDQoNCmNscyA8LSByZWFkLnRhYmxlKCJDcmF3bGV5L2NsdXN0ZXJzLnR4dCIsIGhlYWRlcj1UUlVFKQ0KbmFtZXMoY2xzKQ0KaGVhZChjbHMpDQpwbG90KGNscyRDYW5jZXJzIH4gY2xzJERpc3RhbmNlLCBwY2g9MjApDQoNCmdnZGVuc2l0eShjbHMkQ2FuY2VycykNCnNoYXBpcm8udGVzdChjbHMkQ2FuY2VycykNCg0KIyMjIyBnbG0gcG9pc3NvbiByZWdyZXNzaW9uIGNsdXN0ZXJzLnR4dA0KbW9kMS5jbHMgPC0gZ2xtKGNscyRDYW5jZXJzIH4gY2xzJERpc3RhbmNlLCBmYW1pbHk9IHBvaXNzb24pDQpzdW1tYXJ5KG1vZDEuY2xzKQ0KDQoNCiMjIyMjIyBQTE9ULWVqZW1wbG8gcG9pc3NvbiByZWdyZXNzaW9uIGdncGxvdCgpDQojIyBodHRwczovL3N0YXRzLmlkcmUudWNsYS5lZHUvci9kYWUvcG9pc3Nvbi1yZWdyZXNzaW9uLw0KDQoNCg0KY2xzJGNhbmNlci5oYXQgPC0gcHJlZGljdChtb2QxLmNscywgdHlwZT0icmVzcG9uc2UiKQ0KDQpjbHMgPC0gY2xzW3dpdGgoY2xzLCBvcmRlcihjbHMkRGlzdGFuY2UsIGNscyRDYW5jZXJzKSksIF0NCg0KZ2dwbG90KGRhdGE9Y2xzLCBhZXMoeCA9IERpc3RhbmNlLCB5ID0gY2FuY2VyLmhhdCkpICsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IENhbmNlcnMpLCBhbHBoYT0uNSwgcG9zaXRpb249cG9zaXRpb25faml0dGVyKGg9LjIpKSArDQogIGdlb21fbGluZShzaXplID0gMSkgKw0KICBnZW9tX3Ntb290aChtZXRob2Q9ICJnbG0iKQ0KICBsYWJzKHggPSAiRGlzdGFuY2UiLCB5ID0gIkV4cGVjdGVkIENhbmNlcnMiKQ0KYGBgDQo=