One visualisation technique I frequently use is to make an ordination showing the modern calibration set sites, the fossil core data, and contours of an environmental variable.
Here, I’ve used non-metric multidimensional scaling to ordinate the core and calibration data simultaneously, and then drawn contours of an environmental variable over the ordination.
With this plot it is easy to tell if
- The core samples have good analogues in the calibration set. If so they will be within the calibration set cloud.
- The environmental variable of interest could plausibly have driven the assemblage changes down core. If so the trajectory of the core will be ~perpendicular to the contours of the environmental variable. If not, the core samples will either be in a compact cloud, or parallel to the contours.
It would be possible to add contours of multiple environmental variables, but this is likely to resemble a plate of spaghetti very quickly. Perhaps more usefully, it is possible to add multiple cores to the figure. If all share the same trajectory, then perhaps each core has the same forcing factors.
It is possible to predict the value of the environmental variable for each fossil sample using the contours (analogous to Goring et al. (2009), who use this technique for a single fossil sample at a time), but I don’t think this is a good idea. The problem is that the fossil samples tend to be similar and so clump together, potentially distorting the space around them. This clumping and distorting will get worse with high resolution fossil records, so it may be necessary to thin these, for example only using every tenth sample. Alternatively, the fossil samples could be added passively to an ordination. This cannot be done with NMDS, but it could be done with an eigenvector based method such as correspondence analysis. There is a different problem here however, if the fossil data have an extreme position on axes one or two, it will be obvious, but it may be difficult to detect if the fossil data have an extreme position on a higher axis, e.g., ordination axis seven.
library(rioja) library(analogue) data(SWAP)#SWAP training set data data(RLGH)#Core data from the Round Loch of Glenhead allspp<-Merge(SWAP$spec, RLGH$spec) mod<-metaMDS(allspp) x11() par(mar=c(3,3,1,1), mgp=c(1.5,.5,0)) plot(mod, type="n", display="sites") points(mod, display="sites", pch=20, col="lightblue", select=1:nrow(SWAP$spec)) points(mod, display="sites", type="l", select=-(1:nrow(SWAP$spec))) ordisurf(mod, c(SWAP$pH, rep(NA, nrow(RLGH$spec))), add=T) legend("topright",legend=c("Calibration sites", "pH", "RLGH"), col=c("lightblue", "red", "black"), pch=c(20,NA,NA), lty=c(NA,1,1))
Lines 1:4 load the libraries and built-in datasets. Line 6 Merges the calibration and fossil data.frames into a single data.frame that is then used in the NMDS on line 8. The plotting makes use of the plotting functionality of the vegan library, see help(plot.cca) for details (although we are actually using plot.metaMDS). First the code plots an empty graph, then selects just the calibration sites, and plots these, then selects everything but the calibration sites and plots this as a line. Since the environmental values for the fossil data are unknown, they are coded as NA for ordisurf.
With correspondence analysis, the code is a little different, as we need to predict the position of the fossil data.
allspp<-Merge(SWAP$spec, RLGH$spec, split=T) CA<-cca(sqrt(allspp$SWAP)) pred<-predict(CA, newdata=sqrt(allspp$RLGH), type="wa") x11() par(mar=c(3,3,1,1), mgp=c(1.5,.5,0)) plot(CA, type="n", display="sites") points(CA, display="sites", pch=20, col="lightblue") points(pred[,1:2], type="l") ordisurf(CA, SWAP$pH, add=T) legend("topright",legend=c("Calibration sites", "pH", "RLGH"), col=c("lightblue", "red", "black"), pch=c(20,NA,NA), lty=c(NA,1,1))
Goring et al. (2009) A new methodology for reconstructing climate and vegetation from modern pollen assemblages: an example from British Columbia. Journal of Biogeography 36 626-638.