I've used metaMDS for small fishery datasets before, found it illuminating, and would like to apply the same analysis to a very large dataset - fish catch records for 40 stations sampled six times annually since 1970. No matter what I do, I can't seem to get metaMDS to converge. The data has 76 species, 5773 rows, which I've reduced to the most common species and split by decade, so that each community matrix is 52 species and roughly 1100 rows. To resolve the issue of rows that are all zeroes, I added a phony "NoFish" species that is only 'caught' when catch for all other species is zero.
I feel like it should converge, it just doesn't. I've got plenty of data, the stress values look reasonable (0.2 for k=2 and 0.16 for k=3), and I've upped trymax to 200, and used previous.best. I looked online and added noshare, which seemed to help it run a little faster at least. My computer (Windows 10) takes over an hour to run 200 iterations, so I haven't upped trymax more than that. I've looked at my run results and nothing looks obviously out of place. I don't get any warnings at the end, but I have looked up the sratmax and sfgrmin messages online. Unfortunately all the results were gobbledygook to me.
stn <- read.csv("STN_CPUE_1970-2019.csv")
temp = temp[,colSums(temp)>100]#adjusted for CPUE, removes 24 of 76 species
stn.reduced = cbind(stn[,1:12], temp)
stn70r = stn.reduced[1:1072,]
stn3.nMDS = metaMDS(stn70r[,13:64], k=3, trymax=200, noshare = 0.1, previous.best = stn3.nMDS)
OUTPUT:
Square root transformation
Wisconsin double standardization
Using step-across dissimilarities:
Too long or NA distances: 61161 out of 574056 (10.7%)
Stepping across 574056 dissimilarities...
Connectivity of distance matrix with threshold dissimilarity 1
Data are connected
Starting from 3-dimensional configuration
Run 0 stress 0.1590091
.
.
Run 103 stress 0.1585801
... New best solution
... Procrustes: rmse 0.005185737 max resid 0.06388682
.
.
Run 200 stress 0.1625358
*** No convergence -- monoMDS stopping criteria:
40: no. of iterations >= maxit
156: stress ratio > sratmax
4: scale factor of the gradient < sfgrmin
Notes: All runs have a stress of around 0.16. When it does spit out a procrustes result, it's similar to the one above: rmse of 0.005-0.006 and max resid of 0.06-0.07. I've run it multiple times to the same result and I get the same three messages when I run it without noshare and a third axis:
stn.nMDS = metaMDS(stn70r[,13:64], trymax = 200, previous.best = stn.nMDS)
So not sure that increasing axes to three and adding noshare actually help. Any advice is greatly appreciated. Thanks!