context("jsdgam")
# Reconstruct the spider data from mvabund
spiderdat <- structure(
list(
abundance = c(
25L,
0L,
15L,
2L,
1L,
0L,
2L,
0L,
1L,
3L,
15L,
16L,
3L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
7L,
17L,
11L,
9L,
3L,
29L,
15L,
10L,
2L,
20L,
6L,
20L,
6L,
7L,
11L,
1L,
0L,
1L,
13L,
43L,
2L,
0L,
3L,
0L,
1L,
1L,
2L,
1L,
0L,
0L,
0L,
1L,
0L,
0L,
0L,
0L,
0L,
2L,
0L,
0L,
0L,
0L,
0L,
0L,
1L,
2L,
0L,
1L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
16L,
15L,
20L,
9L,
6L,
11L,
14L,
0L,
0L,
2L,
1L,
2L,
6L,
12L,
0L,
0L,
0L,
0L,
0L,
2L,
1L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
4L,
7L,
5L,
0L,
18L,
4L,
1L,
4L,
30L,
9L,
24L,
9L,
6L,
16L,
7L,
0L,
0L,
1L,
0L,
18L,
4L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
2L,
0L,
0L,
0L,
0L,
1L,
1L,
1L,
1L,
0L,
1L,
55L,
0L,
0L,
0L,
0L,
1L,
3L,
6L,
6L,
2L,
5L,
12L,
13L,
16L,
0L,
2L,
0L,
1L,
0L,
0L,
0L,
60L,
1L,
29L,
7L,
2L,
11L,
30L,
2L,
26L,
22L,
95L,
96L,
24L,
14L,
0L,
0L,
0L,
0L,
0L,
0L,
1L,
2L,
6L,
3L,
11L,
0L,
1L,
6L,
12L,
15L,
18L,
29L,
135L,
27L,
89L,
2L,
1L,
0L,
0L,
1L,
53L,
15L,
0L,
2L,
0L,
0L,
1L,
0L,
0L,
0L,
0L,
0L,
6L,
0L,
0L,
0L,
45L,
37L,
45L,
94L,
76L,
24L,
105L,
1L,
1L,
0L,
1L,
8L,
72L,
72L,
0L,
0L,
0L,
0L,
0L,
0L,
1L,
0L,
0L,
0L,
0L,
0L,
0L,
0L,
57L,
65L,
66L,
86L,
91L,
63L,
118L,
30L,
2L,
1L,
4L,
13L,
97L,
94L,
25L,
28L,
23L,
25L,
22L,
22L,
18L,
1L,
1L,
0L,
16L,
1L,
0L,
2L,
4L,
9L,
1L,
25L,
17L,
34L,
16L,
3L,
0L,
0L,
0L,
0L,
22L,
32L,
3L,
4L,
2L,
0L,
3L,
2L,
2L,
0L,
0L,
0L,
6L,
0L,
0L,
0L
),
taxon = structure(
c(
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
1L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
2L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
3L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
4L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
5L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
6L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
7L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
8L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
9L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
10L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
11L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L,
12L
),
levels = c(
"Alopacce",
"Alopcune",
"Alopfabr",
"Arctlute",
"Arctperi",
"Auloalbi",
"Pardlugu",
"Pardmont",
"Pardnigr",
"Pardpull",
"Trocterr",
"Zoraspin"
),
class = "factor"
),
site = c(
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L,
1L,
2L,
3L,
4L,
5L,
6L,
7L,
8L,
9L,
10L,
11L,
12L,
13L,
14L,
15L,
16L,
17L,
18L,
19L,
20L,
21L,
22L,
23L,
24L,
25L,
26L,
27L,
28L
),
soil.dry = c(
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555,
2.3321,
3.0493,
2.5572,
2.6741,
3.0155,
3.381,
3.1781,
2.6247,
2.4849,
2.1972,
2.2192,
2.2925,
3.5175,
3.0865,
3.2696,
3.0301,
3.3322,
3.1224,
2.9232,
3.1091,
2.9755,
1.2528,
1.1939,
1.6487,
1.8245,
0.9933,
0.9555,
0.9555
),
bare.sand = c(
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434,
0,
0,
0,
0,
0,
2.3979,
0,
0,
0,
3.9318,
0,
0,
1.7918,
0,
0,
0,
0,
0,
0,
0,
0,
3.2581,
3.0445,
3.2581,
3.5835,
4.5109,
2.3979,
3.434
),
fallen.leaves = c(
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0,
0,
1.7918,
0,
0,
0,
3.434,
0,
4.2627,
0,
0,
0,
0,
1.7918,
0,
4.3944,
4.6052,
4.4543,
4.3944,
4.5109,
4.5951,
4.5643,
0,
0,
0,
0,
0,
0,
0
),
moss = c(
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136,
3.0445,
1.0986,
2.3979,
2.3979,
0,
2.3979,
0.6931,
1.0986,
4.3307,
3.434,
4.1109,
3.8286,
0.6931,
1.7918,
0.6931,
0.6931,
0.6931,
0,
1.6094,
0.6931,
0.6931,
4.3307,
4.0254,
4.0254,
1.0986,
1.7918,
3.8286,
3.7136
),
herb.layer = c(
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434,
4.4543,
4.5643,
4.6052,
4.6151,
4.6151,
3.434,
4.6151,
3.434,
3.2581,
3.0445,
3.7136,
4.0254,
4.5109,
4.5643,
3.0445,
0.6931,
3.0445,
3.0445,
1.6094,
0.6931,
1.7918,
0.6931,
3.2581,
3.0445,
4.1109,
1.7918,
3.434,
3.434
),
reflection = c(
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889,
3.912,
1.6094,
3.6889,
2.9957,
2.3026,
0.6931,
2.3026,
0.6931,
3.4012,
3.6889,
3.6889,
3.6889,
3.4012,
1.0986,
0.6931,
0,
1.0986,
1.0986,
0,
0,
0,
3.912,
4.0943,
4.0073,
2.3026,
4.382,
3.6889,
3.6889
)
),
row.names = c(NA, -336L),
class = "data.frame"
)
test_that("family must be correctly specified", {
expect_error(
mod <- jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = 'banana'
),
'family not recognized'
)
})
test_that("response variable must be specified", {
expect_error(
jsdgam(
formula = ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection)
,
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb()
),
'Not sure how to deal with this response variable specification'
)
})
test_that("unit must exist in data", {
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = banana,
species = taxon,
n_lv = 3,
family = nb()
),
'Variable "banana" not found in data'
)
})
test_that("species must exist in data", {
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = banana,
n_lv = 3,
family = nb()
),
'Variable "banana" not found in data'
)
})
test_that("species must be a factor in data", {
spiderdat$taxon <- as.numeric(spiderdat$taxon)
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb()
),
'Variable "taxon" must be a factor type'
)
})
test_that("unit must be a numeric / integer in data", {
spiderdat$site <- as.factor(spiderdat$site)
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb()
),
'Variable "site" must be either numeric or integer type'
)
})
test_that("n_lv must be <= number of species", {
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 15,
family = nb()
),
'Number of factors must be <= number of levels in species'
)
})
test_that("knots must be a list", {
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend) - 1,
# supplying knots as a vector should fail
factor_knots = seq(
min(spiderdat$soil.dry),
max(spiderdat$soil.dry),
length.out = 4
),
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb(),
run_model = FALSE
),
'all "knot" arguments must be supplied as lists'
)
})
test_that("errors about knot lengths should be propagated from mgcv", {
expect_error(
jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend, bs = 'cr') - 1,
# knot length should be 5 for this CR basis
factor_knots = list(
soil.dry = seq(
min(spiderdat$soil.dry),
max(spiderdat$soil.dry),
length.out = 4
)
),
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb(),
run_model = FALSE
),
'number of supplied knots != k for a cr smooth'
)
})
test_that("get_mvgam_priors accepts factor_formula", {
expect_no_error(get_mvgam_priors(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, by = trend, bs = 'cr') - 1,
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
trend_model = 'None'
))
})
# Skip the next test as it should actually initiate the model, and may take a few seconds
skip_on_cran()
test_that("jsdgam should initiate correctly", {
mod <- jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, bs = 'cr', by = trend) - 1,
# supplying knots should also work if k matches length(knots)
factor_knots = list(
soil.dry = seq(
min(spiderdat$soil.dry),
max(spiderdat$soil.dry),
length.out = 5
)
),
data = spiderdat,
unit = site,
species = taxon,
n_lv = 3,
family = nb(),
run_model = FALSE
)
expect_true(inherits(mod, 'mvgam_prefit'))
expect_true(identical(
attr(mod$trend_mgcv_model, 'knots'),
list(
soil.dry = seq(
min(spiderdat$soil.dry),
max(spiderdat$soil.dry),
length.out = 5
)
)
))
expect_true(is.null(attr(mod$mgcv_model, 'knots')))
expect_true(any(grepl(
'// raw latent factors (with linear predictors)',
mod$model_file,
fixed = TRUE
)))
expect_true(any(grepl(
'matrix[n_series, n_lv] lv_coefs = rep_matrix(0, n_series, n_lv);',
mod$model_file,
fixed = TRUE
)))
expect_true(attr(mod$model_data, 'trend_model') == 'None')
expect_true(inherits(
attr(mod$model_data, 'prepped_trend_model'),
'mvgam_trend'
))
expect_true(attr(mod$model_data, 'prepped_trend_model')$subgr == 'taxon')
expect_true(attr(mod$model_data, 'prepped_trend_model')$trend_model == 'ZMVN')
})
test_that("jsdgam post-processing works correctly", {
# Run a short one to ensure post-processing and update work correctly
mod <- SM(jsdgam(
formula = abundance ~
# Environmental model includes species-level intercepts
# and random slopes for a linear effect of reflection
s(taxon, bs = 're') +
s(taxon, bs = 're', by = reflection),
# Each factor estimates a different, possibly nonlinear effect of soil.dry
factor_formula = ~ s(soil.dry, k = 5, bs = 'cr', by = trend) - 1,
# supplying knots should also work if k matches length(knots)
factor_knots = list(
soil.dry = seq(
min(spiderdat$soil.dry),
max(spiderdat$soil.dry),
length.out = 5
)
),
data = spiderdat %>%
dplyr::filter(site < 7),
unit = site,
species = taxon,
n_lv = 2,
family = nb(),
run_model = TRUE,
residuals = FALSE,
chains = 2,
silent = 2
))
expect_true(inherits(mod, 'jsdgam'))
expect_true(is.null(mod$resids))
# Calculate residual correlations to ensure it works
post_cors <- residual_cor(mod, summary = FALSE)
expect_equal(dim(post_cors$all_cormat)[1], 1000L)
expect_equal(dim(post_cors$all_cormat)[2], nlevels(spiderdat$taxon))
expect_true(all(post_cors$all_cormat <= 1))
expect_true(all(post_cors$all_cormat >= -1))
post_cors <- residual_cor(mod, summary = TRUE)
expect_equal(dim(post_cors$cor)[1], nlevels(spiderdat$taxon))
expect_ggplot(plot(post_cors))
# Ensure ordination works
expect_ggplot(ordinate(mod))
expect_ggplot(ordinate(mod, biplot = FALSE))
expect_ggplot(ordinate(mod, label_sites = FALSE))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.