Species Matrix Function
create_matrix_by_rarity <- function(rarity_threshold,
tree_data_raw,
veg_cover_raw,
shrub_data_raw,
ground_cover_raw,
cogon_sites_raw,
quadrat_counts_df) {
total_sites <- nrow(cogon_sites_raw)
# --- Pre-filter by growth form ---
tree_data_raw <- tree_data_raw %>%
filter(Growth == "Tree")
veg_cover_raw <- veg_cover_raw %>%
filter(Growth != "Shrub" & Growth != "Tree")
shrub_data_raw <- shrub_data_raw %>%
filter(Growth == "Shrub" | Growth == "Tree")
# --- Filter ground cover (remove stumps) ---
ground_cover_raw <- ground_cover_raw %>%
filter(Ground_Cover_Type != "Stump")
# --- Filter by frequency ---
filter_by_frequency <- function(df, threshold) {
freq <- df %>%
group_by(Species) %>%
summarise(Frequency = n_distinct(Plot) / total_sites * 100) %>%
filter(Frequency >= threshold)
df %>%
filter(Species %in% freq$Species)
}
tree_data_filtered <- filter_by_frequency(tree_data_raw, rarity_threshold)
veg_cover_filtered <- filter_by_frequency(veg_cover_raw, rarity_threshold)
shrub_data_filtered <- filter_by_frequency(shrub_data_raw, rarity_threshold)
# --- Shrub Cover Conversion ---
shrub_cover <- shrub_data_filtered %>%
mutate(Cover = Line_End - Line_Start) %>%
group_by(Species_Name, Plot) %>%
summarise(Total_Cover = sum(Cover, na.rm = TRUE), .groups = "drop") %>%
mutate(Percent_Cover = Total_Cover / 3000 * 100)
# --- Herbaceous Cover Conversion ---
ground_cover_renamed <- ground_cover_raw %>%
rename(Species_Name = Ground_Cover_Type)
veg_cover_combined <- ground_cover_renamed %>%
full_join(veg_cover_filtered,
by = c("Date", "Observer", "Weather", "Plot", "Site",
"Quadrat", "Canopy_Cover", "Species_Name", "Cover", "Cover_Per")) %>%
left_join(cogon_sites_raw, by = "Plot")
veg_cover_summed <- veg_cover_combined %>%
group_by(Plot, Species_Name) %>%
summarize(total_cover = sum(Cover_Per, na.rm = TRUE), .groups = "drop")
avg_species_cover <- veg_cover_summed %>%
left_join(quadrat_counts_df, by = "Plot") %>%
mutate(avg_cover = total_cover / total_quadrats)
# --- Merge Herb and Shrub Cover ---
combined_cover <- avg_species_cover %>%
full_join(
shrub_cover %>% select(Plot, Species_Name, Percent_Cover),
by = c("Plot", "Species_Name")
) %>%
mutate(
overlap_flag = ifelse(!is.na(avg_cover) & !is.na(Percent_Cover), TRUE, FALSE),
final_cover = case_when(
!is.na(avg_cover) & is.na(Percent_Cover) ~ avg_cover,
is.na(avg_cover) & !is.na(Percent_Cover) ~ Percent_Cover,
TRUE ~ NA_real_
)
)
# --- Species Matrix ---
species_matrix <- combined_cover %>%
select(Plot, Species_Name, final_cover) %>%
filter(!is.na(Species_Name)) %>%
pivot_wider(
names_from = Species_Name,
values_from = final_cover,
values_fill = 0
)
return(species_matrix)
}
Invasion Clustering: PERMANOVA + NMDS
species_matrix <- create_matrix_by_rarity(
rarity_threshold = 0,
tree_data,
Veg_Cover,
shrub_data,
ground_cover,
CogonSites,
quadrat_count
)
species_mat <- species_matrix %>%
column_to_rownames("Plot")
species_by_plot <- t(species_mat)
non_species <- c("BG", "CWD", "FWD", "L", "PC")
species_by_plot <- species_by_plot[
!rownames(species_by_plot) %in% non_species,
]
all_combined_data <- bind_rows(
Veg_Cover %>% select(Species_Name, InvStatus),
shrub_data %>% select(Species_Name, InvStatus)
)
all_unique_species <- all_combined_data %>%
distinct(Species_Name, .keep_all = TRUE)
species_metadata <- data.frame(
Species_Name = rownames(species_by_plot)
) %>%
left_join(all_unique_species, by = "Species_Name")
species_metadata <- species_metadata %>%
mutate(
InvStatus2 = ifelse(InvStatus == "Non_Native",
"Non-Native",
"Native")
)
table(species_metadata$InvStatus2)
##
## Native Non-Native
## 502 42
species_dist <- vegdist(species_by_plot, method = "bray")
set.seed(123)
species_permanova2 <- adonis2(
species_dist ~ InvStatus2,
data = species_metadata,
permutations = 999
)
species_permanova2
## Permutation test for adonis under reduced model
## Permutation: free
## Number of permutations: 999
##
## adonis2(formula = species_dist ~ InvStatus2, data = species_metadata, permutations = 999)
## Df SumOfSqs R2 F Pr(>F)
## Model 1 0.83 0.00314 1.7046 0.001 ***
## Residual 542 264.01 0.99686
## Total 543 264.84 1.00000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Species Level-NMDS Function
run_species_nmds <- function(plot_subset, species_mat, species_metadata) {
region_mat <- species_mat[rownames(species_mat) %in% plot_subset, ]
species_by_plot <- t(region_mat)
species_by_plot <- species_by_plot[rowSums(species_by_plot) > 0, ]
set.seed(123)
nmds <- metaMDS(species_by_plot,
distance = "bray",
k = 4,
trymax = 200)
# IMPORTANT FIX HERE
scores_df <- as.data.frame(scores(nmds, display = "sites"))
scores_df$Species_Name <- rownames(species_by_plot)
scores_df <- left_join(scores_df,
species_metadata %>%
select(Species_Name, InvStatus2),
by = "Species_Name")
return(list(nmds = nmds,
scores = scores_df))
}
Regions
central_fl <- c("ONF", "WSF")
north_fl <- c("BRSF", "Escambia", "Jay", "Howell", "Hooper")
south_ms <- c("CNF", "DSNF", "BCNWR")
Region Species Matrix
plot_lookup <- CogonSites %>%
select(Plot, Site)
central_plots <- plot_lookup %>%
filter(Site %in% central_fl) %>%
pull(Plot)
north_plots <- plot_lookup %>%
filter(Site %in% north_fl) %>%
pull(Plot)
south_plots <- plot_lookup %>%
filter(Site %in% south_ms) %>%
pull(Plot)
Run NMDS for Each Region
All Sites
all_species_nmds <- run_species_nmds(
rownames(species_mat),
species_mat,
species_metadata
)
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.07934098
## Run 1 stress 0.08029574
## Run 2 stress 0.0808541
## Run 3 stress 0.08040134
## Run 4 stress 0.08049416
## Run 5 stress 0.08021941
## Run 6 stress 0.08119209
## Run 7 stress 0.08032576
## Run 8 stress 0.08166027
## Run 9 stress 0.0815899
## Run 10 stress 0.08116679
## Run 11 stress 0.08047774
## Run 12 stress 0.07996345
## Run 13 stress 0.08105386
## Run 14 stress 0.08005426
## Run 15 stress 0.08096181
## Run 16 stress 0.08036359
## Run 17 stress 0.08045566
## Run 18 stress 0.0809607
## Run 19 stress 0.08053886
## Run 20 stress 0.08076719
## Run 21 stress 0.08137975
## Run 22 stress 0.08079947
## Run 23 stress 0.07980284
## ... Procrustes: rmse 0.02309435 max resid 0.07993979
## Run 24 stress 0.08169276
## Run 25 stress 0.08016446
## Run 26 stress 0.08122536
## Run 27 stress 0.079902
## Run 28 stress 0.08025435
## Run 29 stress 0.0805529
## Run 30 stress 0.08085742
## Run 31 stress 0.07938437
## ... Procrustes: rmse 0.01984452 max resid 0.08941646
## Run 32 stress 0.08181832
## Run 33 stress 0.07966873
## ... Procrustes: rmse 0.02305383 max resid 0.06591168
## Run 34 stress 0.08103684
## Run 35 stress 0.08024691
## Run 36 stress 0.07944709
## ... Procrustes: rmse 0.02003272 max resid 0.06576558
## Run 37 stress 0.08027778
## Run 38 stress 0.08082354
## Run 39 stress 0.08045578
## Run 40 stress 0.08004238
## Run 41 stress 0.08043035
## Run 42 stress 0.07966591
## ... Procrustes: rmse 0.02248006 max resid 0.07835742
## Run 43 stress 0.08134719
## Run 44 stress 0.08112163
## Run 45 stress 0.08073344
## Run 46 stress 0.08120057
## Run 47 stress 0.08004796
## Run 48 stress 0.07984046
## ... Procrustes: rmse 0.02256507 max resid 0.09734414
## Run 49 stress 0.0800452
## Run 50 stress 0.08122862
## Run 51 stress 0.08002299
## Run 52 stress 0.0800094
## Run 53 stress 0.08056339
## Run 54 stress 0.08041905
## Run 55 stress 0.07900819
## ... New best solution
## ... Procrustes: rmse 0.01876781 max resid 0.06912523
## Run 56 stress 0.08102461
## Run 57 stress 0.07986647
## Run 58 stress 0.08088471
## Run 59 stress 0.08042955
## Run 60 stress 0.0813519
## Run 61 stress 0.07940482
## ... Procrustes: rmse 0.01861775 max resid 0.071239
## Run 62 stress 0.08148289
## Run 63 stress 0.07993754
## Run 64 stress 0.08092474
## Run 65 stress 0.08265672
## Run 66 stress 0.08008231
## Run 67 stress 0.08135561
## Run 68 stress 0.07946926
## ... Procrustes: rmse 0.01866838 max resid 0.06450914
## Run 69 stress 0.08097323
## Run 70 stress 0.07945358
## ... Procrustes: rmse 0.02023045 max resid 0.07523241
## Run 71 stress 0.07998332
## Run 72 stress 0.08167429
## Run 73 stress 0.07938059
## ... Procrustes: rmse 0.02013189 max resid 0.08100328
## Run 74 stress 0.08035314
## Run 75 stress 0.08075695
## Run 76 stress 0.08069836
## Run 77 stress 0.08048655
## Run 78 stress 0.0811444
## Run 79 stress 0.07968011
## Run 80 stress 0.07971214
## Run 81 stress 0.0800918
## Run 82 stress 0.08164932
## Run 83 stress 0.08001745
## Run 84 stress 0.08158016
## Run 85 stress 0.08112754
## Run 86 stress 0.07953878
## Run 87 stress 0.08005752
## Run 88 stress 0.0800171
## Run 89 stress 0.08107175
## Run 90 stress 0.0817424
## Run 91 stress 0.07972171
## Run 92 stress 0.07968877
## Run 93 stress 0.08153247
## Run 94 stress 0.08115168
## Run 95 stress 0.08013658
## Run 96 stress 0.08069886
## Run 97 stress 0.07980844
## Run 98 stress 0.07945755
## ... Procrustes: rmse 0.01997056 max resid 0.07564367
## Run 99 stress 0.08052764
## Run 100 stress 0.08002535
## Run 101 stress 0.08104213
## Run 102 stress 0.08040633
## Run 103 stress 0.07926435
## ... Procrustes: rmse 0.01814409 max resid 0.0768556
## Run 104 stress 0.08223935
## Run 105 stress 0.08005766
## Run 106 stress 0.08058202
## Run 107 stress 0.08093715
## Run 108 stress 0.08083701
## Run 109 stress 0.08048469
## Run 110 stress 0.08086714
## Run 111 stress 0.07986827
## Run 112 stress 0.08102316
## Run 113 stress 0.08033603
## Run 114 stress 0.08078528
## Run 115 stress 0.08118316
## Run 116 stress 0.08109434
## Run 117 stress 0.0820823
## Run 118 stress 0.08134514
## Run 119 stress 0.07968602
## Run 120 stress 0.08033129
## Run 121 stress 0.07989543
## Run 122 stress 0.08107459
## Run 123 stress 0.07981447
## Run 124 stress 0.08100624
## Run 125 stress 0.08081028
## Run 126 stress 0.07966708
## Run 127 stress 0.0809807
## Run 128 stress 0.08167427
## Run 129 stress 0.08088907
## Run 130 stress 0.08019644
## Run 131 stress 0.07980196
## Run 132 stress 0.08127498
## Run 133 stress 0.08054299
## Run 134 stress 0.08135886
## Run 135 stress 0.0795003
## ... Procrustes: rmse 0.02188964 max resid 0.0823039
## Run 136 stress 0.07991396
## Run 137 stress 0.08169462
## Run 138 stress 0.0800088
## Run 139 stress 0.07986881
## Run 140 stress 0.0797726
## Run 141 stress 0.08161637
## Run 142 stress 0.08098354
## Run 143 stress 0.08085217
## Run 144 stress 0.08103254
## Run 145 stress 0.08003741
## Run 146 stress 0.08013074
## Run 147 stress 0.0806873
## Run 148 stress 0.08025636
## Run 149 stress 0.07968757
## Run 150 stress 0.08011332
## Run 151 stress 0.07925802
## ... Procrustes: rmse 0.0176016 max resid 0.06915522
## Run 152 stress 0.07975279
## Run 153 stress 0.08121644
## Run 154 stress 0.08070041
## Run 155 stress 0.08137452
## Run 156 stress 0.08183268
## Run 157 stress 0.07944293
## ... Procrustes: rmse 0.02024413 max resid 0.06748629
## Run 158 stress 0.08010603
## Run 159 stress 0.07928858
## ... Procrustes: rmse 0.019018 max resid 0.08071532
## Run 160 stress 0.07989325
## Run 161 stress 0.08049649
## Run 162 stress 0.08017636
## Run 163 stress 0.07986131
## Run 164 stress 0.08103451
## Run 165 stress 0.0805889
## Run 166 stress 0.08195393
## Run 167 stress 0.0812432
## Run 168 stress 0.07981635
## Run 169 stress 0.08066838
## Run 170 stress 0.07972713
## Run 171 stress 0.08039688
## Run 172 stress 0.07982104
## Run 173 stress 0.08057397
## Run 174 stress 0.07966062
## Run 175 stress 0.08039938
## Run 176 stress 0.08085265
## Run 177 stress 0.07994945
## Run 178 stress 0.08014495
## Run 179 stress 0.0810204
## Run 180 stress 0.08085948
## Run 181 stress 0.0795784
## Run 182 stress 0.08004591
## Run 183 stress 0.08157702
## Run 184 stress 0.08055388
## Run 185 stress 0.08134529
## Run 186 stress 0.08076847
## Run 187 stress 0.07945282
## ... Procrustes: rmse 0.01850433 max resid 0.07946547
## Run 188 stress 0.08111998
## Run 189 stress 0.08097639
## Run 190 stress 0.08003375
## Run 191 stress 0.08023102
## Run 192 stress 0.08016385
## Run 193 stress 0.08130682
## Run 194 stress 0.08037738
## Run 195 stress 0.07960386
## Run 196 stress 0.08002236
## Run 197 stress 0.07992307
## Run 198 stress 0.07972185
## Run 199 stress 0.08022403
## Run 200 stress 0.08306487
## *** Best solution was not repeated -- monoMDS stopping criteria:
## 200: no. of iterations >= maxit
Central FL
central_nmds <- run_species_nmds(
central_plots,
species_mat,
species_metadata
)
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.07618288
## Run 1 stress 0.07657965
## ... Procrustes: rmse 0.03068566 max resid 0.1096652
## Run 2 stress 0.07924802
## Run 3 stress 0.07989643
## Run 4 stress 0.0780951
## Run 5 stress 0.07725143
## Run 6 stress 0.07786953
## Run 7 stress 0.07772926
## Run 8 stress 0.07834651
## Run 9 stress 0.07754048
## Run 10 stress 0.07711434
## Run 11 stress 0.07814642
## Run 12 stress 0.07740231
## Run 13 stress 0.07611091
## ... New best solution
## ... Procrustes: rmse 0.02353641 max resid 0.08013801
## Run 14 stress 0.07665853
## Run 15 stress 0.07772014
## Run 16 stress 0.08119633
## Run 17 stress 0.07790747
## Run 18 stress 0.07801277
## Run 19 stress 0.07755032
## Run 20 stress 0.07757413
## Run 21 stress 0.07724985
## Run 22 stress 0.07838977
## Run 23 stress 0.07797109
## Run 24 stress 0.07598332
## ... New best solution
## ... Procrustes: rmse 0.02689329 max resid 0.09582153
## Run 25 stress 0.07768007
## Run 26 stress 0.0772424
## Run 27 stress 0.0778387
## Run 28 stress 0.07752827
## Run 29 stress 0.07841816
## Run 30 stress 0.07936864
## Run 31 stress 0.07718072
## Run 32 stress 0.07610765
## ... Procrustes: rmse 0.0269198 max resid 0.08828237
## Run 33 stress 0.07790668
## Run 34 stress 0.07694995
## Run 35 stress 0.07799425
## Run 36 stress 0.07630591
## ... Procrustes: rmse 0.02356504 max resid 0.09277736
## Run 37 stress 0.07706337
## Run 38 stress 0.07843363
## Run 39 stress 0.07740273
## Run 40 stress 0.07815843
## Run 41 stress 0.07666287
## Run 42 stress 0.07753168
## Run 43 stress 0.07701367
## Run 44 stress 0.07699282
## Run 45 stress 0.07814714
## Run 46 stress 0.07746323
## Run 47 stress 0.07833661
## Run 48 stress 0.07645127
## ... Procrustes: rmse 0.02999817 max resid 0.1100521
## Run 49 stress 0.07714152
## Run 50 stress 0.07781305
## Run 51 stress 0.07590409
## ... New best solution
## ... Procrustes: rmse 0.03381482 max resid 0.1030998
## Run 52 stress 0.07710514
## Run 53 stress 0.07912908
## Run 54 stress 0.07743674
## Run 55 stress 0.07781869
## Run 56 stress 0.07729696
## Run 57 stress 0.0776828
## Run 58 stress 0.07840329
## Run 59 stress 0.07650362
## Run 60 stress 0.07717443
## Run 61 stress 0.07694
## Run 62 stress 0.07707322
## Run 63 stress 0.07687193
## Run 64 stress 0.07781634
## Run 65 stress 0.07863721
## Run 66 stress 0.07848047
## Run 67 stress 0.07729359
## Run 68 stress 0.07809396
## Run 69 stress 0.07702369
## Run 70 stress 0.07797107
## Run 71 stress 0.07844367
## Run 72 stress 0.07783141
## Run 73 stress 0.07855917
## Run 74 stress 0.07885025
## Run 75 stress 0.07752716
## Run 76 stress 0.07956031
## Run 77 stress 0.07822539
## Run 78 stress 0.07744582
## Run 79 stress 0.07980658
## Run 80 stress 0.07767421
## Run 81 stress 0.07690956
## Run 82 stress 0.07817545
## Run 83 stress 0.07861327
## Run 84 stress 0.08054197
## Run 85 stress 0.07878526
## Run 86 stress 0.07752283
## Run 87 stress 0.07753522
## Run 88 stress 0.07640597
## Run 89 stress 0.07762608
## Run 90 stress 0.07773358
## Run 91 stress 0.07896305
## Run 92 stress 0.07691633
## Run 93 stress 0.07881135
## Run 94 stress 0.07783595
## Run 95 stress 0.07801795
## Run 96 stress 0.07811892
## Run 97 stress 0.07623905
## ... Procrustes: rmse 0.02811611 max resid 0.09436683
## Run 98 stress 0.07933989
## Run 99 stress 0.07723329
## Run 100 stress 0.07832101
## Run 101 stress 0.07607128
## ... Procrustes: rmse 0.02892923 max resid 0.07247198
## Run 102 stress 0.07679536
## Run 103 stress 0.07676744
## Run 104 stress 0.07835961
## Run 105 stress 0.07732572
## Run 106 stress 0.07787561
## Run 107 stress 0.07602188
## ... Procrustes: rmse 0.03205087 max resid 0.1065432
## Run 108 stress 0.07766535
## Run 109 stress 0.07772502
## Run 110 stress 0.07807387
## Run 111 stress 0.07703665
## Run 112 stress 0.07685159
## Run 113 stress 0.07783463
## Run 114 stress 0.07745777
## Run 115 stress 0.07662337
## Run 116 stress 0.0793889
## Run 117 stress 0.07848714
## Run 118 stress 0.07827749
## Run 119 stress 0.0776651
## Run 120 stress 0.07695084
## Run 121 stress 0.07771902
## Run 122 stress 0.07866458
## Run 123 stress 0.07701535
## Run 124 stress 0.07730586
## Run 125 stress 0.0771418
## Run 126 stress 0.07777205
## Run 127 stress 0.07754763
## Run 128 stress 0.07884605
## Run 129 stress 0.07764113
## Run 130 stress 0.08120835
## Run 131 stress 0.07928036
## Run 132 stress 0.07807571
## Run 133 stress 0.08010351
## Run 134 stress 0.07746014
## Run 135 stress 0.07714212
## Run 136 stress 0.0795956
## Run 137 stress 0.07770149
## Run 138 stress 0.07779669
## Run 139 stress 0.07715809
## Run 140 stress 0.0793706
## Run 141 stress 0.07849363
## Run 142 stress 0.07783615
## Run 143 stress 0.07760509
## Run 144 stress 0.07806619
## Run 145 stress 0.07724428
## Run 146 stress 0.07671482
## Run 147 stress 0.07827531
## Run 148 stress 0.07593417
## ... Procrustes: rmse 0.02623317 max resid 0.09731996
## Run 149 stress 0.0765584
## Run 150 stress 0.07611825
## ... Procrustes: rmse 0.03276471 max resid 0.108557
## Run 151 stress 0.07727748
## Run 152 stress 0.07943099
## Run 153 stress 0.07735748
## Run 154 stress 0.0778095
## Run 155 stress 0.07782768
## Run 156 stress 0.07691885
## Run 157 stress 0.07600287
## ... Procrustes: rmse 0.02782205 max resid 0.08530563
## Run 158 stress 0.07661509
## Run 159 stress 0.07830716
## Run 160 stress 0.08039323
## Run 161 stress 0.0767396
## Run 162 stress 0.07946752
## Run 163 stress 0.07891622
## Run 164 stress 0.07951047
## Run 165 stress 0.07737708
## Run 166 stress 0.07790162
## Run 167 stress 0.07593571
## ... Procrustes: rmse 0.02963955 max resid 0.1045927
## Run 168 stress 0.07937165
## Run 169 stress 0.07692018
## Run 170 stress 0.07840564
## Run 171 stress 0.07726995
## Run 172 stress 0.07636011
## ... Procrustes: rmse 0.0134211 max resid 0.05250202
## Run 173 stress 0.07907844
## Run 174 stress 0.07840545
## Run 175 stress 0.07839771
## Run 176 stress 0.07695966
## Run 177 stress 0.07944364
## Run 178 stress 0.08091021
## Run 179 stress 0.0783941
## Run 180 stress 0.07761726
## Run 181 stress 0.07756284
## Run 182 stress 0.07633711
## ... Procrustes: rmse 0.03714797 max resid 0.1077138
## Run 183 stress 0.07841409
## Run 184 stress 0.07696812
## Run 185 stress 0.07693482
## Run 186 stress 0.07751503
## Run 187 stress 0.07783778
## Run 188 stress 0.07788461
## Run 189 stress 0.07863643
## Run 190 stress 0.07737201
## Run 191 stress 0.08029335
## Run 192 stress 0.07607394
## ... Procrustes: rmse 0.0312793 max resid 0.1006802
## Run 193 stress 0.07850449
## Run 194 stress 0.0786191
## Run 195 stress 0.07604439
## ... Procrustes: rmse 0.02378928 max resid 0.08470817
## Run 196 stress 0.0766049
## Run 197 stress 0.07770776
## Run 198 stress 0.07778862
## Run 199 stress 0.07740006
## Run 200 stress 0.07761813
## *** Best solution was not repeated -- monoMDS stopping criteria:
## 200: no. of iterations >= maxit
North FL
north_nmds <- run_species_nmds(
north_plots,
species_mat,
species_metadata
)
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.09574465
## Run 1 stress 0.09538016
## ... New best solution
## ... Procrustes: rmse 0.04538987 max resid 0.1281838
## Run 2 stress 0.09618981
## Run 3 stress 0.09601926
## Run 4 stress 0.09715563
## Run 5 stress 0.09741254
## Run 6 stress 0.09699853
## Run 7 stress 0.09716777
## Run 8 stress 0.09544076
## ... Procrustes: rmse 0.04556325 max resid 0.1250364
## Run 9 stress 0.09585217
## ... Procrustes: rmse 0.0442791 max resid 0.1220052
## Run 10 stress 0.096041
## Run 11 stress 0.09637675
## Run 12 stress 0.09663033
## Run 13 stress 0.09815207
## Run 14 stress 0.09792344
## Run 15 stress 0.09763475
## Run 16 stress 0.09736535
## Run 17 stress 0.09626851
## Run 18 stress 0.0969912
## Run 19 stress 0.09740783
## Run 20 stress 0.0961271
## Run 21 stress 0.0963497
## Run 22 stress 0.09625918
## Run 23 stress 0.09588915
## Run 24 stress 0.096709
## Run 25 stress 0.09834616
## Run 26 stress 0.09666839
## Run 27 stress 0.0981693
## Run 28 stress 0.09651026
## Run 29 stress 0.09558474
## ... Procrustes: rmse 0.04616433 max resid 0.1163503
## Run 30 stress 0.09707729
## Run 31 stress 0.09818913
## Run 32 stress 0.09822341
## Run 33 stress 0.09529407
## ... New best solution
## ... Procrustes: rmse 0.04583833 max resid 0.1253635
## Run 34 stress 0.0964983
## Run 35 stress 0.09814314
## Run 36 stress 0.09701256
## Run 37 stress 0.09817333
## Run 38 stress 0.09700433
## Run 39 stress 0.09661236
## Run 40 stress 0.0951252
## ... New best solution
## ... Procrustes: rmse 0.04051074 max resid 0.1099881
## Run 41 stress 0.09751647
## Run 42 stress 0.09716522
## Run 43 stress 0.09654873
## Run 44 stress 0.09564138
## Run 45 stress 0.09658308
## Run 46 stress 0.0978039
## Run 47 stress 0.09747274
## Run 48 stress 0.09729564
## Run 49 stress 0.09726328
## Run 50 stress 0.09765789
## Run 51 stress 0.09611949
## Run 52 stress 0.09752285
## Run 53 stress 0.09729105
## Run 54 stress 0.09754133
## Run 55 stress 0.09696315
## Run 56 stress 0.09739484
## Run 57 stress 0.0963053
## Run 58 stress 0.09837464
## Run 59 stress 0.09600321
## Run 60 stress 0.09767133
## Run 61 stress 0.09657833
## Run 62 stress 0.09672562
## Run 63 stress 0.09691362
## Run 64 stress 0.0975209
## Run 65 stress 0.09615705
## Run 66 stress 0.09892273
## Run 67 stress 0.09816398
## Run 68 stress 0.09716079
## Run 69 stress 0.09692077
## Run 70 stress 0.09719949
## Run 71 stress 0.09664856
## Run 72 stress 0.09536274
## ... Procrustes: rmse 0.03962006 max resid 0.1110017
## Run 73 stress 0.09495531
## ... New best solution
## ... Procrustes: rmse 0.03146871 max resid 0.1216352
## Run 74 stress 0.09686598
## Run 75 stress 0.09684011
## Run 76 stress 0.09673415
## Run 77 stress 0.09584342
## Run 78 stress 0.09801807
## Run 79 stress 0.09724587
## Run 80 stress 0.09654834
## Run 81 stress 0.09748698
## Run 82 stress 0.09648964
## Run 83 stress 0.09804356
## Run 84 stress 0.09687672
## Run 85 stress 0.09756031
## Run 86 stress 0.09733277
## Run 87 stress 0.09733692
## Run 88 stress 0.09591529
## Run 89 stress 0.09711012
## Run 90 stress 0.09613411
## Run 91 stress 0.09512879
## ... Procrustes: rmse 0.02912714 max resid 0.09516664
## Run 92 stress 0.0970366
## Run 93 stress 0.0954308
## ... Procrustes: rmse 0.0377208 max resid 0.1357736
## Run 94 stress 0.09755123
## Run 95 stress 0.09598537
## Run 96 stress 0.09625912
## Run 97 stress 0.09789752
## Run 98 stress 0.09659858
## Run 99 stress 0.09716527
## Run 100 stress 0.09598177
## Run 101 stress 0.09650906
## Run 102 stress 0.09671008
## Run 103 stress 0.09647448
## Run 104 stress 0.0973691
## Run 105 stress 0.09714067
## Run 106 stress 0.09593438
## Run 107 stress 0.0979796
## Run 108 stress 0.09760448
## Run 109 stress 0.09660529
## Run 110 stress 0.09736899
## Run 111 stress 0.09639604
## Run 112 stress 0.09738529
## Run 113 stress 0.09667183
## Run 114 stress 0.09898635
## Run 115 stress 0.09657628
## Run 116 stress 0.09755063
## Run 117 stress 0.09726498
## Run 118 stress 0.09662401
## Run 119 stress 0.09746838
## Run 120 stress 0.09694552
## Run 121 stress 0.09802136
## Run 122 stress 0.09595129
## Run 123 stress 0.09692237
## Run 124 stress 0.09711268
## Run 125 stress 0.09670271
## Run 126 stress 0.09644809
## Run 127 stress 0.09655529
## Run 128 stress 0.09842228
## Run 129 stress 0.097485
## Run 130 stress 0.09698923
## Run 131 stress 0.09692099
## Run 132 stress 0.09643519
## Run 133 stress 0.0972417
## Run 134 stress 0.09731909
## Run 135 stress 0.0974735
## Run 136 stress 0.09720203
## Run 137 stress 0.09630507
## Run 138 stress 0.09596961
## Run 139 stress 0.09556407
## Run 140 stress 0.09683757
## Run 141 stress 0.09831452
## Run 142 stress 0.09618323
## Run 143 stress 0.09653854
## Run 144 stress 0.09667627
## Run 145 stress 0.09622494
## Run 146 stress 0.0961214
## Run 147 stress 0.09566307
## Run 148 stress 0.09695309
## Run 149 stress 0.09605033
## Run 150 stress 0.09729558
## Run 151 stress 0.09568245
## Run 152 stress 0.09669086
## Run 153 stress 0.09729529
## Run 154 stress 0.09665356
## Run 155 stress 0.09686821
## Run 156 stress 0.09655342
## Run 157 stress 0.09779595
## Run 158 stress 0.09772806
## Run 159 stress 0.09718051
## Run 160 stress 0.09706559
## Run 161 stress 0.09833161
## Run 162 stress 0.09587044
## Run 163 stress 0.09717068
## Run 164 stress 0.09598031
## Run 165 stress 0.0966323
## Run 166 stress 0.09584119
## Run 167 stress 0.09705275
## Run 168 stress 0.09662837
## Run 169 stress 0.09618579
## Run 170 stress 0.09669052
## Run 171 stress 0.09862327
## Run 172 stress 0.09573029
## Run 173 stress 0.09789344
## Run 174 stress 0.09731544
## Run 175 stress 0.0973567
## Run 176 stress 0.09604049
## Run 177 stress 0.09686749
## Run 178 stress 0.09746932
## Run 179 stress 0.09641426
## Run 180 stress 0.09617632
## Run 181 stress 0.09631236
## Run 182 stress 0.09635988
## Run 183 stress 0.09677773
## Run 184 stress 0.09781272
## Run 185 stress 0.09733325
## Run 186 stress 0.09601495
## Run 187 stress 0.09718859
## Run 188 stress 0.09728801
## Run 189 stress 0.09615365
## Run 190 stress 0.09668322
## Run 191 stress 0.09659269
## Run 192 stress 0.09624168
## Run 193 stress 0.09773826
## Run 194 stress 0.09950048
## Run 195 stress 0.09667529
## Run 196 stress 0.09738936
## Run 197 stress 0.09656731
## Run 198 stress 0.09748773
## Run 199 stress 0.09693308
## Run 200 stress 0.09809169
## *** Best solution was not repeated -- monoMDS stopping criteria:
## 200: no. of iterations >= maxit
South MS
south_nmds <- run_species_nmds(
south_plots,
species_mat,
species_metadata
)
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.09840778
## Run 1 stress 0.09872853
## ... Procrustes: rmse 0.0262368 max resid 0.1181572
## Run 2 stress 0.1001657
## Run 3 stress 0.1014794
## Run 4 stress 0.09977403
## Run 5 stress 0.09971798
## Run 6 stress 0.09866265
## ... Procrustes: rmse 0.02637648 max resid 0.09796836
## Run 7 stress 0.09936006
## Run 8 stress 0.09993557
## Run 9 stress 0.09987077
## Run 10 stress 0.09867628
## ... Procrustes: rmse 0.0252402 max resid 0.09267926
## Run 11 stress 0.0990232
## Run 12 stress 0.1008567
## Run 13 stress 0.1004226
## Run 14 stress 0.09878202
## ... Procrustes: rmse 0.03184882 max resid 0.1057062
## Run 15 stress 0.1002197
## Run 16 stress 0.09961989
## Run 17 stress 0.09863467
## ... Procrustes: rmse 0.02960627 max resid 0.09946693
## Run 18 stress 0.09983873
## Run 19 stress 0.1000104
## Run 20 stress 0.1000483
## Run 21 stress 0.100549
## Run 22 stress 0.1000433
## Run 23 stress 0.09966646
## Run 24 stress 0.09937978
## Run 25 stress 0.09873128
## ... Procrustes: rmse 0.02590091 max resid 0.1181635
## Run 26 stress 0.09935261
## Run 27 stress 0.09875078
## ... Procrustes: rmse 0.02658216 max resid 0.0839196
## Run 28 stress 0.0991153
## Run 29 stress 0.1007009
## Run 30 stress 0.1006551
## Run 31 stress 0.1000426
## Run 32 stress 0.1011899
## Run 33 stress 0.1007098
## Run 34 stress 0.09820417
## ... New best solution
## ... Procrustes: rmse 0.02754724 max resid 0.1115378
## Run 35 stress 0.1003806
## Run 36 stress 0.1003381
## Run 37 stress 0.09916538
## Run 38 stress 0.09935116
## Run 39 stress 0.09907145
## Run 40 stress 0.1002305
## Run 41 stress 0.09830194
## ... Procrustes: rmse 0.02495221 max resid 0.06155115
## Run 42 stress 0.09903098
## Run 43 stress 0.0994644
## Run 44 stress 0.0998429
## Run 45 stress 0.1003625
## Run 46 stress 0.09931979
## Run 47 stress 0.09983875
## Run 48 stress 0.09942213
## Run 49 stress 0.1002661
## Run 50 stress 0.1006347
## Run 51 stress 0.09983322
## Run 52 stress 0.09864266
## ... Procrustes: rmse 0.03305424 max resid 0.09819324
## Run 53 stress 0.1002213
## Run 54 stress 0.09930153
## Run 55 stress 0.09889457
## Run 56 stress 0.09983416
## Run 57 stress 0.09979488
## Run 58 stress 0.1005301
## Run 59 stress 0.09882808
## Run 60 stress 0.0981011
## ... New best solution
## ... Procrustes: rmse 0.02173119 max resid 0.09297868
## Run 61 stress 0.09941179
## Run 62 stress 0.1002974
## Run 63 stress 0.09964365
## Run 64 stress 0.1008907
## Run 65 stress 0.1008149
## Run 66 stress 0.09863003
## Run 67 stress 0.09959618
## Run 68 stress 0.09984011
## Run 69 stress 0.1001015
## Run 70 stress 0.09996611
## Run 71 stress 0.1001526
## Run 72 stress 0.09949198
## Run 73 stress 0.09808991
## ... New best solution
## ... Procrustes: rmse 0.02436883 max resid 0.1080396
## Run 74 stress 0.0990484
## Run 75 stress 0.1019242
## Run 76 stress 0.1001849
## Run 77 stress 0.09851044
## ... Procrustes: rmse 0.02487647 max resid 0.1256996
## Run 78 stress 0.09931556
## Run 79 stress 0.09875767
## Run 80 stress 0.0990214
## Run 81 stress 0.1000891
## Run 82 stress 0.1000621
## Run 83 stress 0.1001589
## Run 84 stress 0.09876873
## Run 85 stress 0.09883965
## Run 86 stress 0.09833324
## ... Procrustes: rmse 0.02136837 max resid 0.09498353
## Run 87 stress 0.09818725
## ... Procrustes: rmse 0.02247622 max resid 0.08223123
## Run 88 stress 0.09986931
## Run 89 stress 0.09982939
## Run 90 stress 0.1013537
## Run 91 stress 0.1005963
## Run 92 stress 0.09983695
## Run 93 stress 0.09850726
## ... Procrustes: rmse 0.02583827 max resid 0.1126902
## Run 94 stress 0.09972748
## Run 95 stress 0.09884901
## Run 96 stress 0.09998561
## Run 97 stress 0.1000137
## Run 98 stress 0.09869921
## Run 99 stress 0.1008126
## Run 100 stress 0.1000732
## Run 101 stress 0.09994594
## Run 102 stress 0.09990954
## Run 103 stress 0.09996324
## Run 104 stress 0.1006575
## Run 105 stress 0.09891345
## Run 106 stress 0.1003919
## Run 107 stress 0.09835479
## ... Procrustes: rmse 0.01885496 max resid 0.09830373
## Run 108 stress 0.1004167
## Run 109 stress 0.09951955
## Run 110 stress 0.0988132
## Run 111 stress 0.1016092
## Run 112 stress 0.1002605
## Run 113 stress 0.1000117
## Run 114 stress 0.1006491
## Run 115 stress 0.1009791
## Run 116 stress 0.1002857
## Run 117 stress 0.1000642
## Run 118 stress 0.09901189
## Run 119 stress 0.09849171
## ... Procrustes: rmse 0.02293407 max resid 0.1037807
## Run 120 stress 0.09914133
## Run 121 stress 0.1014845
## Run 122 stress 0.1010433
## Run 123 stress 0.09868016
## Run 124 stress 0.1003276
## Run 125 stress 0.09934036
## Run 126 stress 0.1014611
## Run 127 stress 0.1012757
## Run 128 stress 0.1005619
## Run 129 stress 0.1004109
## Run 130 stress 0.1007642
## Run 131 stress 0.09933345
## Run 132 stress 0.09945733
## Run 133 stress 0.09931122
## Run 134 stress 0.09854993
## ... Procrustes: rmse 0.02430299 max resid 0.0905104
## Run 135 stress 0.1008398
## Run 136 stress 0.1005994
## Run 137 stress 0.1000358
## Run 138 stress 0.1007233
## Run 139 stress 0.1002374
## Run 140 stress 0.09989501
## Run 141 stress 0.09935369
## Run 142 stress 0.1001102
## Run 143 stress 0.0990654
## Run 144 stress 0.1002077
## Run 145 stress 0.09864157
## Run 146 stress 0.09970348
## Run 147 stress 0.0984146
## ... Procrustes: rmse 0.02149019 max resid 0.08418951
## Run 148 stress 0.09992328
## Run 149 stress 0.09921246
## Run 150 stress 0.1008818
## Run 151 stress 0.1010535
## Run 152 stress 0.09976953
## Run 153 stress 0.09898058
## Run 154 stress 0.09843237
## ... Procrustes: rmse 0.02429579 max resid 0.1141498
## Run 155 stress 0.09983832
## Run 156 stress 0.1006056
## Run 157 stress 0.09858249
## ... Procrustes: rmse 0.02173132 max resid 0.1015488
## Run 158 stress 0.09935585
## Run 159 stress 0.09821454
## ... Procrustes: rmse 0.01880274 max resid 0.09921613
## Run 160 stress 0.09950474
## Run 161 stress 0.09943845
## Run 162 stress 0.1008394
## Run 163 stress 0.1005908
## Run 164 stress 0.09954704
## Run 165 stress 0.09913251
## Run 166 stress 0.09983198
## Run 167 stress 0.09936345
## Run 168 stress 0.1009868
## Run 169 stress 0.09956817
## Run 170 stress 0.09870193
## Run 171 stress 0.1013372
## Run 172 stress 0.09934699
## Run 173 stress 0.09973087
## Run 174 stress 0.1002436
## Run 175 stress 0.1004712
## Run 176 stress 0.0992857
## Run 177 stress 0.09925885
## Run 178 stress 0.09880004
## Run 179 stress 0.100002
## Run 180 stress 0.1000055
## Run 181 stress 0.09954604
## Run 182 stress 0.0989315
## Run 183 stress 0.09959917
## Run 184 stress 0.09807919
## ... New best solution
## ... Procrustes: rmse 0.02201437 max resid 0.08720544
## Run 185 stress 0.09956904
## Run 186 stress 0.09999901
## Run 187 stress 0.09801555
## ... New best solution
## ... Procrustes: rmse 0.02090624 max resid 0.09201046
## Run 188 stress 0.10019
## Run 189 stress 0.1000106
## Run 190 stress 0.09866294
## Run 191 stress 0.1006864
## Run 192 stress 0.1002969
## Run 193 stress 0.100186
## Run 194 stress 0.1003432
## Run 195 stress 0.09843969
## ... Procrustes: rmse 0.01952165 max resid 0.09538217
## Run 196 stress 0.09857167
## Run 197 stress 0.09939987
## Run 198 stress 0.09909632
## Run 199 stress 0.09991192
## Run 200 stress 0.09926474
## *** Best solution was not repeated -- monoMDS stopping criteria:
## 200: no. of iterations >= maxit
NMDS Plots
# Combine all NMDS scores
all_scores_combined <- bind_rows(
all_species_nmds$scores,
central_nmds$scores,
north_nmds$scores,
south_nmds$scores
)
x_range <- range(all_scores_combined$NMDS1, na.rm = TRUE)
y_range <- range(all_scores_combined$NMDS2, na.rm = TRUE)
plot_species_nmds <- function(scores_df, panel_label, x_range, y_range) {
scores_df <- scores_df %>%
filter(!is.na(InvStatus2))
ggplot(scores_df,
aes(x = NMDS1,
y = NMDS2,
color = InvStatus2)) +
geom_point(size = 2, alpha = 0.7) +
scale_color_manual(
values = c("Native" = "#56B4E9",
"Non-Native" = "#E69F00")
) +
coord_fixed(xlim = x_range, ylim = y_range) +
theme_classic(base_size = 12) +
labs(title = panel_label,
x = NULL,
y = NULL,
color = "Status") +
theme(
plot.title = element_text(face = "bold")
)
}
Combined Plot
p1 <- plot_species_nmds(all_species_nmds$scores, "A", x_range, y_range)
p2 <- plot_species_nmds(central_nmds$scores, "B", x_range, y_range)
p3 <- plot_species_nmds(north_nmds$scores, "C", x_range, y_range)
p4 <- plot_species_nmds(south_nmds$scores, "D", x_range, y_range)
final_nmds_plot <- (p1 | p2) /
(p3 | p4) +
plot_layout(guides = "collect") +
plot_annotation(
theme = theme(
plot.margin = margin(10, 10, 10, 10)
)
) &
theme(legend.position = "right")
# Add shared labels
final_plot <- final_nmds_plot &
labs(x = "NMDS1", y = "NMDS2")
## Save
ggsave("Species_NMDS_Plots.png",
plot = final_plot,
width = 12,
height = 10,
dpi = 300)